-
与直接控制 iptables 相比,使用 FirewallD 有两个主要区别:
1. FirewallD 使用区域和服务而不是链式规则。
2. FirewallD可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效。
-
Firewalld 跟iptables比起来,不好的地方是每个服务都需要去设置才能放行,因为默认是拒绝。而iptables里默认是每个服务是允许,需要拒绝的才去限制。
-
iptables 服务在 /etc/sysconfig/iptables 中储存配置,而 FirewallD 将配置储存在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种 XML 文件里,使用 iptables 的时候每一个单独更改意味着清除所有旧有的规则和从 /etc/sysconfig/iptables 里读取所有新的规则,使用 firewalld 却不会再创建任何新的规则;仅仅运行规则中的不同。因此 FirewallD 可以在运行时改变设置而不丢失现行配置。
火墙策略之三链五表
netfilter在数据包必须经过且可以读取规则的位置,共设有5个控制关卡。这5个关卡处的检查规则分别放在5个规则链中(有的叫钩子函数(hook functions)。也就是说5条链对应着数据包传输路径中的5个控制关卡,链中的规则会在对应的关卡检查和处理。任何一个数据包,只要经过本机,必然经过5个链中的某个或某几个。
| PREROUTING | 数据包刚进入网络接口之后,路由之前 |
| INPUT | 数据包从内核流入用户空间。 |
| FORWARD | 在内核空间中,从一个网络接口进入,到另一个网络接口去。转发过滤。 |
| OUTPUT | 数据包从用户空间流出到内核空间。 |
| POSTROUTING | 路由后,数据包离开网络接口前。 |
| 默认表 | 表中存放数据 |
| filter |
经过本机内核的所有数据(input output forward) |
| nat | 不经过内核的数据(postrouting prerouting input output) |
| mangle | 当filter和nat表不够用时使用,表中记录对链数据的补充解释说明(input output forward postrouting prerouting) |
iptables的使用
因为防火墙之间存在冲突,所以在使用iptables时须关闭并冻结firewalld
yum install iptables-servicessystemctl mask firewalldsystemctl enable --now iptables.service
保存策略
方式一
iptables-save > /etc/sysconfig/iptables
方式二
service iptables save
iptables 命令参数
| 参数 | 含义 |
| -t | 指定表名称 |
| -n | 不做解析 |
| -L | 查看 |
| -A | 添加策略 |
| -p | 指定协议 |
| –dport | 指定目的地端口 |
| -s | 指定来源 |
| -j | 指定动作 |
| ACCEPT | 允许 |
| DROP | 丢弃 |
| REJECT | 拒绝 |
| SNAT | 源地址转换 |
| DNAT | 目的地地址转换 |
| -F | 清空表中策略 |
| -N | 新建链 |
| -E | 更改链名称 |
| -X | 删除链 |
| -D | 删除规则 |
| -I | 插入规则 |
| -R | 更改规则 |
| -P | 更改默认规则 |
注意:火墙策略是由上到下读取,当第一条与第二条发生冲突时,第一条策略生效。
操作案例
1. 查看表filter策略
iptables -t filter -nL
2. 清空所有策略
iptables -t filter -F
3. 指定INPUT链允许所有
iptables -A INPUT -j ACCEPT
查看策略(默认查看filter)
iptables -nL
4. 删除INPUT链中的第一条策略
iptables -D INPUT 1
查看策略(默认查看filter)
iptables -nL
5.改变INPUT链的默认状态为丢弃,执行完改行命令后linux客户端会断开连接
iptables -P INPUT DROP

6. 指定协议为tcp,端口为22的被允许,这次可再次通过客户端连接linux
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
查看策略(默认查看filter)
iptables -nL

firewalld的使用
开启
systemctl enable --now firewalld.service
关闭
systemctl disable --now iptables.service
冻结
systemctl mask iptables.service
解冻
systemctl unmask firewalld.service
| trusted | (信任区域) 放通所有传入流量 |
| home | (家庭区域) 允许ssh、ipp-slient、mdns、saba-client或dhcpv6-client预定义服务匹配的传入流量,其余全部回绝 |
| work | (工作区域) 允许ssh、ipp-slient、dhcpv6-client预定义服务匹配的传入流量,其余统统请回 |
| public | (公共区域) 允许ssh或dhcpv6-client预定义类服务匹配的传入流量,其余统统请回 |
| dmz | (隔离区域) 外网 -> dmz -> 防火墙 -> 内网 允许ssh预定义服务匹配的传入流量,其余统统请回 |
| block | (限制区域) 和trusted 相反它会拒绝所有传入流量 |
| drop | (丢弃区域) 丢弃所有传入流量,包括包含ICMP的错误响应 |
| internal | (内部区域) 默认值时与home区域相同 |
| externa |
(外部区域) 用于外部流量传入,其余全部请回 |
常用命令选项参数
常用管理命令
-
firewall-cmd --state ##查看火墙状态firewall-cmd --get-active-zones ##查看当前火墙中生效的域firewall-cmd --get-default-zone ##查看默认域firewall-cmd --list-all ##查看默认域中的火墙策略firewall-cmd --list-all --zone=work ##查看指定域的火墙策略firewall-cmd --set-default-zone=trusted ##设定默认域firewall-cmd --get-services ##查看所有可以设定的服务firewall-cmd --permanent --remove-service=cockpit ##移除服务(刷新后生效)firewall-cmd --reload 重启服务firewall-cmd --permanent --add-source=172.25.254.0/24 --zone=block ##指定数据来源访问指定域firewall-cmd --reloadfirewall-cmd --permanent --remove-source=172.25.254.0/24 --zone=block ##删除自定域中的数据来源firewall-cmd --permanent --remove-interface=ens224 --zone=public ##删除指定域的网络接口firewall-cmd --permanent --add-interface=ens224 --zone=block ##添加指定域的网络接口firewall-cmd --permanent --change-interface=ens224 --zone=public ##更改网络接口到指定域
高级规则