-
与直接控制 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 --reload
firewall-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 ##更改网络接口到指定域
高级规则