簡介
在centos 8采用firewalld管理netfilter子系統(tǒng),默認(rèn)情況,firewall的后端是nftables,而非iptables,底層調(diào)用的是nft命令,而非iptables命令。
不同的防火墻軟件相互間存在沖突,使用某個(gè)時(shí)應(yīng)禁用其它的防火墻軟件。

配置文件
firewalld的配置文件一般有兩個(gè)存儲(chǔ)位置:/etc/firewalld/ 和 /usr/lib/firewalld/。
手動(dòng)配置的規(guī)則會(huì)存放到/etc/firewalld/這個(gè)目錄中,如果這個(gè)目錄中沒有找到對(duì)應(yīng)的配置文件,就會(huì)去/usr/lib/firewalld/這個(gè)默認(rèn)路徑下查找。因此需要手動(dòng)恢復(fù)默認(rèn)規(guī)則就要?jiǎng)h除/etc/firewalld/下面對(duì)應(yīng)的文件即可。
配置目錄下的子目錄
zones目錄中存放zone配置文件,services目錄中存放service配置文件,icmptypes目錄中存放icmp類型相關(guān)的配置文件。
firewalld主配置文件/etc/firewalld/firewalld.conf
DefaultZone,默認(rèn)使用的zone,默認(rèn)值為public;
MinimalMark,標(biāo)記的最小值,默認(rèn)為100;
CleanupOnExit,退出后是否清除防火墻規(guī)則,默認(rèn)為yes;
Lockdown,是否限制別的程序通過D-BUS接口直接操作firewalld,默認(rèn)為no,當(dāng)Lockdown設(shè)置為yes時(shí),/etc/firewalld/lockdown-whitelist.xml規(guī)定哪些程序可以對(duì)firewalld進(jìn)行操作;
IPv6_rpfilter,判斷接收的包是否是偽造的,默認(rèn)為yes。
firewalld提供了9個(gè)zone
drop
默認(rèn):丟棄所有進(jìn)入的數(shù)據(jù)包,不做任何響應(yīng)。僅允許傳出連接
block
默認(rèn):拒絕所有進(jìn)入的數(shù)據(jù)包,返回icmp-host-prohibited報(bào)文(ipv4)或icmp6-adm-prohibited報(bào)文(ipv6)。僅允許傳出連接
public
默認(rèn):firewalld默認(rèn)的zone。用于不受信任的公共場(chǎng)所,不信任網(wǎng)絡(luò)中其它計(jì)算機(jī),可以允許選定的傳入連接
external
默認(rèn):用在路由器等啟用偽裝(NAT)的外部網(wǎng)絡(luò),僅允許選定的傳入連接
internal
默認(rèn):用在(NAT)內(nèi)部網(wǎng)絡(luò),網(wǎng)絡(luò)中的其它系統(tǒng)通常是可信的,僅允許選定的傳入連接
dmz
默認(rèn):允許非軍事區(qū)(DMZ,內(nèi)外網(wǎng)絡(luò)之間增加的一層網(wǎng)絡(luò),起到緩沖作用)中的計(jì)算機(jī)有限的被外界網(wǎng)絡(luò)訪問,僅允許選定的傳入連接
work
默認(rèn):用在工作網(wǎng)絡(luò),網(wǎng)絡(luò)中的其它計(jì)算機(jī)通常是可信的,僅允許選定的傳入連接
home
默認(rèn):用在家庭網(wǎng)絡(luò),網(wǎng)絡(luò)中的其它計(jì)算機(jī)通常是可信的,僅允許選定的傳入連接
trusted
默認(rèn):接受所有網(wǎng)絡(luò)連接,信任網(wǎng)絡(luò)中的所有計(jì)算機(jī)
zone的配置文件路徑是在/etc/firewalld/zones/目錄中
service(服務(wù))
iptables使用端口號(hào)來匹配規(guī)則,但是如果某一個(gè)服務(wù)的端口號(hào)改變了,就要同時(shí)更改iptables規(guī)則,很不方便,同時(shí)也不方便閱讀理解。
一個(gè)service中可以配置特定的端口(將端口和service的名字關(guān)聯(lián))。
zone中加入service規(guī)則就等效于直接加入了port規(guī)則,但是使用service更容易管理和理解。
service配置文件的命名為<service名稱>.xml
zone文件中的過濾規(guī)則
zone文件中的過濾規(guī)則優(yōu)先級(jí):source(最高)-> interface(次之)-> firewalld.conf中配置的默認(rèn)zone(最低)。
source:根據(jù)數(shù)據(jù)包源地址過濾,相同的source只能在一個(gè)zone中配置
interface:根據(jù)接收數(shù)據(jù)包的網(wǎng)卡過濾
service:根據(jù)服務(wù)名過濾(實(shí)際是查找服務(wù)關(guān)聯(lián)的端口,根據(jù)端口過濾),一個(gè)service可以配置到多個(gè)zone中
port:根據(jù)端口過濾
icmp-block:icmp報(bào)文過濾,可按照icmp類型設(shè)置
masquerade:ip地址偽裝,即將接收到的請(qǐng)求的源地址設(shè)置為轉(zhuǎn)發(fā)請(qǐng)求網(wǎng)卡的地址(路由器的工作原理)
forward-port:端口轉(zhuǎn)發(fā)
rule:自定義規(guī)則,與iptables配置接近。rule結(jié)合--timeout可以實(shí)現(xiàn)一些有用的功能,比如可以寫個(gè)自動(dòng)化腳本,發(fā)現(xiàn)異常連接時(shí)添加一條rule將相應(yīng)地址drop掉,并使用--timeout設(shè)置時(shí)間段,過了之后再自動(dòng)開放
數(shù)據(jù)包的處理流程
firewalld提供了9個(gè)zone,過濾規(guī)則優(yōu)先級(jí)決定進(jìn)來的數(shù)據(jù)包會(huì)由哪個(gè)zone來處理,處理進(jìn)來數(shù)據(jù)包的流程如下:
1、如果進(jìn)來的數(shù)據(jù)包的源地址被drop或block這兩個(gè)zone的source規(guī)則匹配,那么這個(gè)數(shù)據(jù)包不會(huì)再去匹配interface規(guī)則。如果數(shù)據(jù)包的源地址沒有被drop和block兩個(gè)zone的source規(guī)則匹配,而是被其它zone的source規(guī)則匹配,那么數(shù)據(jù)包將會(huì)被該zone處理。
2、如果數(shù)據(jù)包通的接口被drop或block這兩個(gè)zone的interface規(guī)則匹配,則不會(huì)交給默認(rèn)zone處理。如果數(shù)據(jù)包通的接口沒有被drop和block 兩個(gè)zone的interface規(guī)則匹配,而是被其它zone的interface規(guī)則匹配,那么數(shù)據(jù)包將會(huì)被該zone處理。
3、如果數(shù)據(jù)包沒有被source規(guī)則和interface規(guī)則匹配,將會(huì)被默認(rèn)zone處理(由/etc/firewalld/firewalld.conf中的配置項(xiàng)DefaultZone設(shè)置)。