iptables
是一个在 Linux 中的管理防火墙规则的命令行工具,它作为 Linux 内核的 netfilter 框架的一部分运行,以控制传入和传出的网络流量。
与 firewalld
相比
iptables
是基于规则的,每个规则必须独立定义,firewalld
是基于区域的,规则适用于预定义或自定义区域。
iptables
适合高度精细和手动的配置,firewalld
动态规则更简单且更加用户友好。
iptables
需要刷新或重新启动才能应用更改,firewalld
支持不间断的即时更改。
iptables
对于静态、简单的配置来说非常高效,firewalld
由于抽象层,速度稍微慢一些,但大多数情况下可以忽略不计。
-A
:追加到规则到链中
-D
:从链中删除一个规则
-P
:为链设置默认策略
-F
:刷新链中的所有规则
-L
:列出链中的所有规则
-t [table]
:指定 table
-i
:指定输入接口,例如:eth0
-o
:指定输出接口
-s
:指定源IP地址
-d
:指定目标IP地址
-p
:指定协议类型,例如:tcp、udp、icmp
处理数据包的一组规则
INPUT
: 控制传入数据包。
FORWARD
: 控制通过系统转发的数据包。
OUTPUT
: 控制传出的数据包。
规则处理类别
filter
: 基本数据包过滤的默认表。
nat
: 处理网络地址转换(NAT)。
mangle
: 改变数据包。
raw
: 在连接跟踪之前配置数据包。
对数据包应用的操作,例如:ACCEPT
、DROP
sudo iptables -L
sudo iptables -L --line-numbers
sudo iptables -t nat -L
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# -A INPUT: 追加到 INPUT链
# -p tcp: 指定协议为 TCP
# --dport 80: 指定目标端口为80
# -j ACCEPT: 接受数据包
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
# -s 192.168.1.100: 指定源IP地址
sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
sudo iptables -D INPUT 2
# -D INPUT 2: 删除 INPUT 链的第二个规则
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT
sudo iptables-save > /etc/iptables.rules
sudo iptables-restore < /etc/iptables.rules
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.200:80
sudo iptables -A INPUT -j LOG --log-prefix "Dropped Packet: " --log-level 4
sudo iptables -A INPUT -j LOG --log-prefix "Accepted Packet: " --log-level 4
sudo iptables -L -v
sudo iptables -Z
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -X
firewalld
是一个在 Linux 中的防火墙管理工具,提供动态接口管理网络流量,它使用区域来定义网络连接的信任级别,并支持 IPv4 和 IPv6。
drop
(丢失):任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络练连接
block
(限制):任何接收的网络连接都被IPv4的icmp-host-prohibited信息和icmp6-adm-prohibited信息所拒绝
public
(公共):在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接
external
(外部) :特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接
dmz
(非军事区):用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接
work
(工作):用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接用于家庭网络。
home
(家庭):您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接
internal
(内部):用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接
trusted
(信任):可接受所有的网络连接
sudo systemctl start firewalld
sudo systemctl stop firewalld
sudo systemctl enable firewalld
sudo systemctl disable firewalld
sudo systemctl status firewalld
sudo firewall-cmd --reload
sudo firewall-cmd --state
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --list-all --zone=public
sudo firewall-cmd --get-zones
sudo firewall-cmd --set-default-zone=trusted
sudo firewall-cmd --zone=public --add-interface=eth0
sudo firewall-cmd --zone=public --remove-interface=eth0
sudo firewall-cmd --get-zone-of-interface=eth0
sudo firewall-cmd --get-services
sudo firewall-cmd --zone=public --add-service=http
sudo firewall-cmd --zone=public --remove-service=http
sudo firewall-cmd --zone=public --query-service=http
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-port=8080/tcp
sudo firewall-cmd --zone=public --remove-port=8080/tcp
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --zone=public --list-ports
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept'
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" drop'
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" log prefix="Blocked: " level="info" drop'
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept' --permanent
sudo firewall-cmd --zone=public --add-masquerade
sudo firewall-cmd --zone=public --remove-masquerade
sudo firewall-cmd --zone=trusted --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100
firewall-offline-cmd --add-service=http
sudo firewall-cmd --runtime-to-permanent
iptables
是一个命令行工具,直接操作内核中的Netfilter
框架,通过规则链和规则来管理网络流量。它提供了对网络流量的精细控制,允许用户根据IP地址、端口号、协议等条件定义规则。iptables
适用于需要高度自定义和精细控制网络流量的场景。
firewalld
是一个动态管理防火墙的工具,提供了服务和区域的概念,简化了防火墙规则的管理。它使用iptables
作为后端,但通过更高层次的抽象来简化配置和管理。firewalld
适用于需要快速配置和动态调整防火墙规则的场景。
iptables
在修改规则后需要重新加载或保存规则文件才能生效,这可能会导致服务中断。iptables
的规则在系统重启后会丢失,除非将规则保存到文件中。
firewalld
支持动态修改单条规则,不需要像iptables
那样修改后全部刷新才可生效。firewalld
的规则更改立即生效,并且支持在运行时模式和永久模式之间切换,确保了更高的灵活性和可靠性。
iptables
非常灵活和强大,但相对复杂,需要对网络和防火墙原理有深入的理解。它直接操作内核,提供了广泛的配置选项,适合高级用户和专业网络管理员。
firewalld
通过服务和区域的概念简化了配置过程,提供了预定义的规则集和可视化管理界面,使得配置更加直观和简单。它适合那些需要简化管理但仍然需要一定安全性的用户