Firewalld是动态防火墙(也称状态检测防火墙),即对系统主动发出连接的回包不做处理,允许通过,只对外界主动发起连接服务器的数据包使用规则,这一点和iptables不同。

Firewalld的区域采用白名单机制,即匹配白名单中服务的数据包允许通过,而不管区域的target是何值,注意:只要服务匹配白名单即可,而不管数据包源地址是否匹配,因为源地址和接口用来区分数据包进入哪个区域。

源地址为10.10.10.1,目的端口为22的数据包可以通过接口ens33进入这个区域,也算匹配白名单放行。

一个接口只能属于一个区域,一个区域可以有多个接口。一个源(或重叠的源)不能被分配到多个区域,这样做的结果是产生一个未定义的行为,因为不清楚应该将哪些规则应用于该源,例如:

firewall-cmd --zone=home --add-source=192.168.0.114/24
firewall-cmd --zone=work --add-source=192.168.0.114/16

虽然这么配置firewalld不会报错,生产中还是尽量避免。

活动区域中扮演两个不同的角色。关联接口行为的区域作为接口区域,并且,关联源地址的区域作为源区域(一个区域能够扮演两个角色,即关联接口的同时又关联源地址)。

firewalld数据处理流程(区域级别):

检查数据来源的源地址

1.若源地址关联到特定的区域,则执行该区域所指定的规则

2.若源地址未关联到特定的区域,则使用传入网络接口的区域并执行该区域所指定的规则

3.若网络接口未关联到特定的区域,则使用默认区域并执行该区域所指定的规则

4.执行firewalld的默认规则:接受 icmp 包并拒绝其它的一切

区域Target的值为default时,意味着此区域不处理数据包,由后续的区域来处理。如图:

源区域target为default时,则把数据包送到接口区域处理,接口区域target为default时,则送到默认区域处理,默认区域target为default时,则送到默认规则处理。Firewalld的默认规则为:接受 icmp 包并拒绝其它的一切。

区域内的数据包处理顺序为:富规则>>>白名单>>>target

富规则的处理顺序和规则的位置无关,和动作有关,富规则的处理顺序为:

1.     日志规则

2.     drop/reject规则

3.     accept规则