CentOS 7系統(tǒng)使用firewalld防火墻創(chuàng)建包過(guò)濾規(guī)則


一、操作目的和應(yīng)用場(chǎng)景
最近做了一些CentOS 7系統(tǒng)的安全加固,涉及到firewalld防火墻的配置。以前對(duì)iptables比較熟悉,用firewalld比較少,所以特意學(xué)習(xí)了firewalld的用法,并在這里分享。
firewalld和iptables都是防火墻的前端配置工具,真正工作的是linux內(nèi)核的netfilter。firewalld借鑒了其它防火墻系統(tǒng)/設(shè)備的理念,例如區(qū)域(zone)的概念以及配置信息管理的當(dāng)前配置和持久配置(runtime和permanent),這使得防火墻規(guī)則的管理工作更加方便。
二、平臺(tái)及工具版本
host系統(tǒng):linux mint 19.3
虛擬機(jī)管理程序:virtualbox 6
虛擬機(jī):CentOS 7
軟件:firewalld
計(jì)算機(jī)硬件:小米筆記本電腦
三、操作步驟
(一)設(shè)置zone(區(qū)域)
1、zone的作用是什么?
firewalld與iptables相比,一個(gè)重要的特性就是使用了zone的概念。不同的zone對(duì)應(yīng)不同類(lèi)型的網(wǎng)絡(luò),不同的網(wǎng)絡(luò)也對(duì)應(yīng)著不同的包過(guò)濾規(guī)則集。這與windows 7防火墻的“網(wǎng)絡(luò)位置”的功能類(lèi)似。
例如windows 7防火墻有4個(gè)網(wǎng)絡(luò)位置,分別是家庭網(wǎng)絡(luò)、工作網(wǎng)絡(luò)、公共網(wǎng)絡(luò)和域,每個(gè)網(wǎng)絡(luò)位置由于受到的威脅不同而具有不同的包過(guò)濾規(guī)則集。就以“遠(yuǎn)程協(xié)助”功能為例,不同網(wǎng)絡(luò)位置允許“遠(yuǎn)程協(xié)助”進(jìn)行入站連接的規(guī)則是不同的:
“域”網(wǎng)絡(luò)位置關(guān)于“遠(yuǎn)程協(xié)助”的入站規(guī)則:
“專(zhuān)用”網(wǎng)絡(luò)位置(工作網(wǎng)絡(luò))關(guān)于“遠(yuǎn)程協(xié)助”的入站規(guī)則:
“公用”網(wǎng)絡(luò)位置(工作網(wǎng)絡(luò))關(guān)于“遠(yuǎn)程協(xié)助”的入站規(guī)則:
而firewalld有公共、外部、非軍事區(qū)等9個(gè)zone,另外也可以創(chuàng)建自定義的zone。每個(gè)zone也都擁有自己的包過(guò)濾規(guī)則集,用戶(hù)也可以對(duì)zone中的已有規(guī)則進(jìn)行增刪改。firewalld根據(jù)網(wǎng)絡(luò)接口當(dāng)前關(guān)聯(lián)的zone中的規(guī)則進(jìn)行包過(guò)濾操作。防火墻規(guī)則的創(chuàng)建、修改和刪除,實(shí)際上就是針對(duì)網(wǎng)絡(luò)接口當(dāng)前關(guān)聯(lián)的zone中的服務(wù)、端口以及富規(guī)則等所進(jìn)行的增刪改操作。也可以通過(guò)將網(wǎng)絡(luò)接口關(guān)聯(lián)到新的zone來(lái)應(yīng)用新的包過(guò)濾規(guī)則。
2、不同zone的含義
firewalld有9個(gè)內(nèi)置的zone:
firewall-cmd –get-zones? //查看防火墻全部的zone
drop(丟棄)? //任何接收到的連接都被丟棄,沒(méi)有任何回復(fù)。只允許出站的網(wǎng)絡(luò)連接。
block(阻塞)? //任何接收的網(wǎng)絡(luò)連接都被阻塞,并給出IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohibited信息作為回應(yīng)。
public(公共)? //用于連接公共區(qū)域。不能相信來(lái)自這個(gè)區(qū)域的連接不會(huì)危害你的計(jì)算機(jī),只接受經(jīng)過(guò)選擇的連接。
external(外部)? //如果Linux服務(wù)器作為路由器使用,可以將連接外部的接口的zone設(shè)置為external。不信任來(lái)自external網(wǎng)絡(luò)的連接,只接受經(jīng)過(guò)選擇的連接。
dmz(非軍事區(qū))? //用于非軍事區(qū)的計(jì)算機(jī)。非軍事區(qū)可以被公開(kāi)訪問(wèn),可以有限地進(jìn)入內(nèi)部網(wǎng)絡(luò),只接受經(jīng)過(guò)選擇的連接。
work(工作)? //連接工作的區(qū)域,可以基本相信來(lái)自這個(gè)區(qū)域的連接不會(huì)危害你的計(jì)算機(jī)。只接受經(jīng)過(guò)選擇的連接。
home(家中)? //用于家中的網(wǎng)絡(luò),可以基本相信來(lái)自home區(qū)域的計(jì)算機(jī)不會(huì)危害你的電腦。只接受經(jīng)過(guò)選擇的連接。
internal(內(nèi)部)? //用于內(nèi)部網(wǎng)絡(luò),可以基本相信來(lái)自internal區(qū)域的計(jì)算機(jī)不會(huì)危害你的電腦。只接受經(jīng)過(guò)選擇的連接。
trusted(信任)? //連接被信任的區(qū)域,接受所有連接。
3、修改firewalld的默認(rèn)zone
//查看默認(rèn)的zone
firewall-cmd –get-default-zone
默認(rèn)的zone是public
//將默認(rèn)的zone設(shè)置為work
firewall-cmd –set-default-zone=work??
默認(rèn)的zone已改成work
4、查看網(wǎng)卡的zone
//查看enp0s3網(wǎng)卡對(duì)應(yīng)的zone
firewall-cmd –get-zone-of-interface=enp0s3
enp0s3網(wǎng)卡的zone是work。同時(shí)也能看到,只有部分網(wǎng)卡被分配了zone。
5、將網(wǎng)卡添加到zone
//將virbr0接口加入到internal zone
firewall-cmd –zone=internal –add-interface=virbr0
添加成功,現(xiàn)在virbr0接口的zone是internal。
6、修改網(wǎng)卡的zone
firewall-cmd –zone=block –change-interface=enp0s3
enp0s3網(wǎng)絡(luò)接口的zone已改為block
7、刪除網(wǎng)卡的zone
firewall-cmd –zone=block –remove-interface=enp0s3
刪除zone之后,這個(gè)網(wǎng)卡就沒(méi)有zone了。有人說(shuō)刪除網(wǎng)卡的zone之后會(huì)改為默認(rèn)的zone,在這里不是這樣的。
//重新將enp0s3的zone設(shè)置為work
firewall-cmd –zone=work –change-interface=enp0s3
8、查看所有網(wǎng)卡所在的zone
firewall-cmd –get-active-zones
(二)設(shè)置service(服務(wù))
1、查看所有的服務(wù)
firewall-cmd –get-service
可以看到forewall的中已定義的全部服務(wù)。
2、查看默認(rèn)zone的服務(wù)
firewall-cmd –list-service
默認(rèn)的work區(qū)域有兩個(gè)服務(wù):dhcpv6-client和ssh
3、查看指定zone的服務(wù)
firewall-cmd –zone=區(qū)域名稱(chēng) –list-service? //查看drop區(qū)域的服務(wù)
可以看到,不同的zone中的服務(wù)是不同的。
4、將服務(wù)添加到zone
firewall-cmd –zone=public –add-service=http? //臨時(shí)向public區(qū)域添加http服務(wù)
firewall-cmd –zone=public –add-service=ftp –permanent? //持久化(寫(xiě)入配置文件)
從輸出中可以看出,使用–permanent選項(xiàng)將服務(wù)添加到zone,實(shí)際上是將服務(wù)寫(xiě)入了zone的配置文件中。這樣在重新讀取zone的配置后才能生效,當(dāng)前是不生效的。
可以將firewalld的配置文件理解成思科設(shè)備的startup-config。修改startup-config,對(duì)于running-configs是沒(méi)有影響的。firewalld重讀配置文件相當(dāng)于copt running-config startup-config,當(dāng)前生效的配置會(huì)被配置文件中的信息所覆蓋從而不再生效。
5、從zone中刪除服務(wù)
//從public區(qū)域刪除ssh服務(wù)
firewall-cmd –zone=public –remove-service=ssh? //刪除內(nèi)存中的策略
public區(qū)域的ssh服務(wù)被刪除。
firewall-cmd –zone=public –remove-service=ssh –permanent? //刪除配置文件中的策略
public區(qū)域的ssh服務(wù)從配置文件中被刪除。
(三)firewalld應(yīng)用實(shí)例
1、通過(guò)向區(qū)域添加服務(wù)來(lái)創(chuàng)建防火墻規(guī)則
(1)要求
臨時(shí)允許任意源地址訪問(wèn)enp0s3網(wǎng)卡監(jiān)聽(tīng)的ftp、ssh、http服務(wù)
(2)實(shí)施方法
1)將指定的服務(wù)添加到enp0s3網(wǎng)卡對(duì)應(yīng)的zone中
firewall-cmd –get-zone-of-interface=enp0s3? //查看網(wǎng)卡對(duì)應(yīng)的zone
firewall-cmd –zone=work –list-service? //查看work區(qū)域中的服務(wù)
已經(jīng)包含了ssh服務(wù),那么只要將ftp和http服務(wù)添加到work區(qū)域即可。
firewall-cmd –zone=work –add-service=http
firewall-cmd –zone=work –add-service=ftp
服務(wù)添加成功。
(3)驗(yàn)證防火墻阻斷效果
//服務(wù)器端運(yùn)行netcat(兩個(gè)窗口中運(yùn)行),模擬ftp服務(wù)和http服務(wù)監(jiān)聽(tīng)21和80端口。
nc -l -p 21
nc -l -p 80
//客戶(hù)端訪問(wèn)
客戶(hù)端連接成功。
//服務(wù)端netcat監(jiān)聽(tīng)2121端口
nc -l -p 2121
//客戶(hù)端訪問(wèn)
由于不存在允許訪問(wèn)2121端口的策略,客戶(hù)端連接失敗。
2、通過(guò)向區(qū)域添加端口范圍來(lái)創(chuàng)建防火墻規(guī)則
(1)要求
永久允許訪問(wèn)enp0s3網(wǎng)卡監(jiān)聽(tīng)的8080到8089端口
(2)實(shí)施方法
//查看網(wǎng)卡對(duì)應(yīng)的zone
firewall-cmd –get-zone-of-interface=enp0s3
//由于是自定義端口,現(xiàn)有的服務(wù)無(wú)法與之對(duì)應(yīng)。可直接向zone中添加端口范圍
firewall-cmd –zone=work –add-port=8080-8089/tcp –permanent
自定義的端口范圍已經(jīng)寫(xiě)入了配置文件。
(3)驗(yàn)證防火墻阻斷效果
//服務(wù)端使用netcat監(jiān)聽(tīng)8080端口
//客戶(hù)端訪問(wèn)
無(wú)法訪問(wèn),顯然是被防火墻阻斷了。這是因?yàn)楱Cpermanent只是將規(guī)則寫(xiě)入了配置文件,內(nèi)存中還沒(méi)有修改。需要將配置文件的內(nèi)容重新讀入內(nèi)存才能生效。
//重新讀取firewall防火墻配置
firewall-cmd –reload
//客戶(hù)端連接
連接成功。說(shuō)明新的規(guī)則生效了。但還是需要注意,重新裝載配置后,前面臨時(shí)設(shè)置的那些規(guī)則就都失效了。
3、通過(guò)向區(qū)域添加富規(guī)則(rich-rules)來(lái)創(chuàng)建防火墻規(guī)則
(1)要求
只允許192.168.1.3訪問(wèn)本地的23端口,拒絕其它IP對(duì)訪問(wèn)23端口。
(2)實(shí)施方法
//允許192.168.1.3訪問(wèn)23端口
firewall-cmd –zone=work –add-rich-rule=’rule family=”ipv4″ source address=”192.168.1.3″ port port=”23″ protocol=”tcp” accept’
//拒絕任意IP訪問(wèn)23端口
firewall-cmd –zone=work –add-rich-rule=’rule family=”ipv4″ source address=”0.0.0.0″ port port=”23″ protocol=”tcp” reject’
//查看富規(guī)則
firewall-cmd –zone=work –list-rich-rules
(3)驗(yàn)證防火墻阻斷效果
//服務(wù)器監(jiān)聽(tīng)23端口
nc -l -p 23
//客戶(hù)端直接訪問(wèn)
nping -tcp -p 23 -c 1 192.168.1.7
-p? //指定目標(biāo)端口
-c? //指定發(fā)送數(shù)據(jù)包的數(shù)量
//客戶(hù)端修改源地址后訪問(wèn)
nping -tcp -p 23 -c 1 -S 192.168.1.100 192.168.1.7
-S? //將任意IP指定為源地址
//服務(wù)器端針對(duì)23端口抓包
可以看到,當(dāng)使用防火墻允許的源地址訪問(wèn)時(shí),服務(wù)器的23端口給出回應(yīng)。但是當(dāng)使用其它的IP作為源地址訪問(wèn)時(shí),服務(wù)器不給出回應(yīng)。這說(shuō)明防火墻規(guī)則生效了。
四、其它
(一)圖形界面
上面介紹了通過(guò)命令行配置firewalld的基本方法,也可以運(yùn)行圖形界面程序進(jìn)行配置:
firewall-config
理解了原理之后配置方法就比較簡(jiǎn)單了,這里不再詳述。
(二)默認(rèn)zone
針對(duì)默認(rèn)zone,在使用firewall-cmd命令進(jìn)行操作時(shí)可不指定zone的名稱(chēng)
firewall-cmd –add-service=https? //向默認(rèn)zone中添加服務(wù)
firewall-cmd –list-service? //查看默認(rèn)zone中的服務(wù)
由于網(wǎng)絡(luò)接口enp0s3關(guān)聯(lián)到了默認(rèn)的work區(qū)域,那么允許訪問(wèn)本地的https服務(wù)這條規(guī)則自然就生效了。


HSnetwork----你的私人網(wǎng)絡(luò)安全通報(bào)中心!
資料來(lái)源網(wǎng)絡(luò),HSnetwork整理;希望對(duì)你有所幫助!