前言
大家好,這里是浩道Linux,主要給大家分享Linux、Python、網(wǎng)絡(luò)通信、網(wǎng)絡(luò)安全等相關(guān)的IT知識(shí)平臺(tái)。
前邊推文已經(jīng)針對(duì)iptables做過(guò)一次實(shí)戰(zhàn)指南,大家可以進(jìn)行查閱回顧。
Linux系統(tǒng)iptables防火墻實(shí)戰(zhàn)指南~
本文浩道跟大家分享Linux系統(tǒng)firewalld防火墻硬核干貨,通過(guò)對(duì)其介紹、相關(guān)概念回顧,數(shù)據(jù)包處理流程、其安裝過(guò)程、其常用命令用法、其添加規(guī)則相關(guān)用法去開展,讓大家在****Linux系統(tǒng)中的安全防范再添一塊技能磚!
本文將圍繞以下幾個(gè)章節(jié)去開展,感興趣的小伙伴可以收藏,隨時(shí)學(xué)習(xí)!
firewalld簡(jiǎn)介
firewalld與iptables之間的關(guān)系
firewalld常見(jiàn)概念
firewalld數(shù)據(jù)包處理過(guò)程
firewalld防火墻安裝及其語(yǔ)法
firewalld配置常用命令列舉
一、firewalld簡(jiǎn)介
firewalld防火墻是Linux系統(tǒng)上的一種動(dòng)態(tài)防火墻管理工具,它是Red Hat公司開發(fā)的,并在許多Linux發(fā)行版中被采用。相對(duì)于傳統(tǒng)的靜態(tài)防火墻規(guī)則,firewalld使用動(dòng)態(tài)的方式來(lái)管理防火墻規(guī)則,可以更加靈活地適應(yīng)不同的網(wǎng)絡(luò)環(huán)境和應(yīng)用場(chǎng)景。
firewalld防火墻是Centos7系統(tǒng)默認(rèn)自帶的防火墻管理工具,取代了之前的iptables防火墻工具,它工作在網(wǎng)絡(luò)層,主要功能是管理網(wǎng)絡(luò)連接和防止未經(jīng)授權(quán)的訪問(wèn)。它可以對(duì)入站和出站流量進(jìn)行管理,可以控制端口、服務(wù)和網(wǎng)絡(luò)協(xié)議的訪問(wèn)權(quán)限,也支持NAT和端口轉(zhuǎn)發(fā)等高級(jí)功能,屬于包過(guò)濾防火墻。
firewalld防火墻采用了D-Bus接口來(lái)與網(wǎng)絡(luò)管理器和其他應(yīng)用程序進(jìn)行通信,這使得它可以更加靈活地適應(yīng)不同的網(wǎng)絡(luò)環(huán)境和應(yīng)用場(chǎng)景。例如,當(dāng)一個(gè)新的網(wǎng)絡(luò)接口被添加到系統(tǒng)中時(shí),firewalld可以接收到相關(guān)的通知,并自動(dòng)更新防火墻規(guī)則以適應(yīng)新的網(wǎng)絡(luò)環(huán)境。
firewalld防火墻還提供了支持網(wǎng)絡(luò)區(qū)域所定義的網(wǎng)絡(luò)連接以及接口安全等級(jí)的動(dòng)態(tài)防火墻管理工具。它支持IPv4、IPv6防火墻設(shè)置以及以太網(wǎng)橋(在某些高級(jí)服務(wù)可能會(huì)用到,比如云計(jì)算〉,并且擁有兩種配置模式:運(yùn)行時(shí)配置與永久配置。
二、firewalld與iptables之間的關(guān)系
firewalld和liptables都是用來(lái)管理防火墻的工具(屬于用戶態(tài)),它們都可以用來(lái)定義防火墻的各種規(guī)則功能,內(nèi)部結(jié)構(gòu)都指向netfiter網(wǎng)絡(luò)過(guò)濾子系統(tǒng)(屬于內(nèi)核態(tài)),從而實(shí)現(xiàn)包過(guò)濾防火墻功能。
(一)兩者基于方式不同
1、iptables主要是基于接口來(lái)設(shè)置規(guī)則,從而實(shí)現(xiàn)網(wǎng)絡(luò)的安全性。
2、firewalld是基于區(qū)域,根據(jù)不同的區(qū)域來(lái)設(shè)置不同的規(guī)則,從而保證網(wǎng)絡(luò)的安全。與硬件防火墻的設(shè)置相類似。
(二)配置文件不同
1、iptables 將配置存儲(chǔ)在/etc/sysconfig/iptables ;
2、firewalld將配置儲(chǔ)存在/etc/firewalld,優(yōu)先加載該配置文件,同時(shí)/usr/lib/firewalld中的各種xml文件是默認(rèn)的配置文件。
(三)對(duì)防火墻規(guī)則修改不同
1、iptables對(duì)于規(guī)則的修改需要全部刷新策略,每一個(gè)單獨(dú)更改意味著清除所有舊有的規(guī)則和從/etc/sysconfig/iptables里讀取所有新的規(guī)則。
2、firewalld對(duì)于規(guī)則的修改無(wú)需全部刷新策略,因?yàn)樗粫?huì)再創(chuàng)建任何新的規(guī)則,僅僅運(yùn)行規(guī)則中的不同之處。因此firewalld可以在運(yùn)行時(shí)間內(nèi),改變?cè)O(shè)置而不丟失現(xiàn)行連接。
(四)防火墻類型不同
1、iptables防火墻類型為靜態(tài)防火墻。可以理解為iptables的規(guī)則就是一張表,對(duì)表進(jìn)行增刪改查操作。
2、firewalld防火墻類型為動(dòng)態(tài)防火墻。可以理解為firewalld的規(guī)則是一塊區(qū)域,可以更換不同的區(qū)域進(jìn)行增刪改查操作。
(五)firewalld相對(duì)于iptables優(yōu)勢(shì)
1、firewalld可以動(dòng)態(tài)修改單條規(guī)則,而iptables在修改了規(guī)則后必須得全部刷新才可以生效。
2、firewalld在使用上要比iptables更加人性化了,即使對(duì)于不明白防火墻的“四表五鏈”,對(duì)于TCP/IP協(xié)議也不熟悉的情況下,也可以實(shí)現(xiàn)大部分管理功能。
三、firewalld常見(jiàn)概念
(一)firewalld區(qū)域概念
firewalld防火墻為了簡(jiǎn)化方便管理,將所有網(wǎng)絡(luò)流量分為多個(gè)區(qū)域(zone)。然后根據(jù)數(shù)據(jù)包的源IP地址或傳入的網(wǎng)絡(luò)接口等條件將流量傳入相應(yīng)區(qū)域。每個(gè)區(qū)域都定義了自己打開或者關(guān)閉的端口和服務(wù)列表。
(二)firewalld預(yù)定義區(qū)域概念
1、區(qū)域如同進(jìn)入主機(jī)的安全門,每個(gè)區(qū)域都具有不同限制程度的規(guī)則,只會(huì)允許符合規(guī)則的流量傳入。
2、可以根據(jù)網(wǎng)絡(luò)規(guī)模,使用一個(gè)或多個(gè)區(qū)域,但是任何一個(gè)活躍區(qū)域至少需要關(guān)聯(lián)源地址或接口。
3、默認(rèn)情況下,public區(qū)域是默認(rèn)區(qū)域,包含所有接口(網(wǎng)卡)。
最終一個(gè)區(qū)域的安全程度是取決于管理員在此區(qū)域中設(shè)置的規(guī)則。
**值得注意:**如果數(shù)據(jù)包的源地址與區(qū)域綁定,則此數(shù)據(jù)包不管從那個(gè)網(wǎng)卡傳入都使用改區(qū)域的規(guī)則過(guò)濾數(shù)據(jù)包。如果數(shù)據(jù)包的源地址未與區(qū)域綁定,則此數(shù)據(jù)從哪個(gè)網(wǎng)卡傳入則使用該網(wǎng)卡綁定的區(qū)域規(guī)則過(guò)濾數(shù)據(jù)包。
(三)常見(jiàn)區(qū)域及含義
1、信任區(qū)域trusted:?允許所有的流量傳人;
2、公共區(qū)域public:?默認(rèn)允許與ssh或dhcpv6-client預(yù)定義服務(wù)匹配的傳入流量,其余均拒絕,是新添加網(wǎng)絡(luò)接口的默認(rèn)區(qū)域。
3、外部區(qū)域external:?默認(rèn)允許與ssh預(yù)定義服務(wù)匹配的傳入流量,其余均拒絕。默認(rèn)將通過(guò)此區(qū)域轉(zhuǎn)發(fā)的IPv4傳出流量將進(jìn)行地址偽裝(MASQUERADE),可用于為路由器啟用了偽裝功能的外部網(wǎng)絡(luò)。
4、家庭區(qū)域home:?默認(rèn)允許與ssh、mdns、samba-client或dhcpv6-client預(yù)定義服務(wù)匹配的傳入流量,其余均拒絕。
5、內(nèi)部區(qū)域internal:?默認(rèn)值時(shí)與home區(qū)域功能相同。
6、工作區(qū)域work:?允許與 ssh、dhcpv6-client預(yù)定義服務(wù)匹配的傳入流量,其余均拒絕。
7、隔離區(qū)域dmz也稱為非軍事區(qū)域:?默認(rèn)允許與ssh預(yù)定義服務(wù)匹配的傳入流量,其余均拒絕。
8、限制區(qū)域block:?拒絕所有傳入流量。
9、丟棄區(qū)域drop:?丟棄所有傳入流量,并且不產(chǎn)生包含ICMP的錯(cuò)誤響應(yīng)。
值得注意:?默認(rèn)情況下的默認(rèn)區(qū)域?yàn)閜ublic(默認(rèn)與所有網(wǎng)卡綁定),要激活某個(gè)區(qū)域,就需要將區(qū)域與源地址網(wǎng)卡綁定。
四、firewalld數(shù)據(jù)包處理過(guò)程
(一)firewalld數(shù)據(jù)處理流程
firewalld對(duì)于進(jìn)入系統(tǒng)的數(shù)據(jù)包,會(huì)根據(jù)數(shù)據(jù)包的源I地址或傳入的網(wǎng)絡(luò)接口等條件,將數(shù)據(jù)流量轉(zhuǎn)入相應(yīng)區(qū)域的防火靖規(guī)則。對(duì)于進(jìn)入系統(tǒng)的數(shù)據(jù)包,首先撿查的就是其源地址。
(二)firewalld檢查數(shù)據(jù)包的源地址的規(guī)則
1、若源地址關(guān)聯(lián)到特定的區(qū)域(即源地址或接口綁定的區(qū)域有沖突),則執(zhí)行該區(qū)域所制定的規(guī)則。
2、若源地址未關(guān)聯(lián)到特定的區(qū)域(即源地址或接口綁定的區(qū)域沒(méi)有沖突〉,則使用傳入網(wǎng)絡(luò)接口的區(qū)域并執(zhí)行該區(qū)域所制定的規(guī)則。
3、若網(wǎng)絡(luò)接口也未關(guān)聯(lián)到特定的區(qū)域(即源地址或接口都沒(méi)有綁定特定的某個(gè)區(qū)域),則使用默認(rèn)區(qū)域并執(zhí)行該區(qū)域所制定的規(guī)則。
針對(duì)以上數(shù)據(jù)包處理流程總結(jié)為:先檢查傳入數(shù)據(jù)包的源地址,若源地址與特定區(qū)域綁定,則使用該區(qū)域的規(guī)則過(guò)濾數(shù)據(jù)包。若源地址與特定區(qū)域沒(méi)有綁定,且數(shù)據(jù)包傳入網(wǎng)卡與特定區(qū)域綁定,則使用綁定網(wǎng)卡的區(qū)域的規(guī)則過(guò)濾數(shù)據(jù)包。若也沒(méi)有區(qū)域綁定網(wǎng)卡,則使用默認(rèn)區(qū)域的規(guī)則過(guò)濾數(shù)據(jù)包。
五、firewalld防火墻安裝及其語(yǔ)法
firewalld在centos7中已經(jīng)自帶安裝了,所以不需要我們?cè)倭硗獍惭b。至于其它發(fā)行版本的Linux系統(tǒng),大家可以自行去了解相關(guān)Linux版本自帶firewalld的情況,這里不展開,以下相關(guān)操作均在centos7下進(jìn)行。
1、centos7下可以通過(guò)yum方式安裝firewalld
?
yum install firewalld firewall-config? 2、啟動(dòng)firewalld服務(wù)
systemctl start firewalld? 3、關(guān)閉firewalld服務(wù)
systemctl stop firewalld
?
4、將firewalld設(shè)置為開機(jī)自啟動(dòng)
?
systemctl enable firewalld
?
5、將firewalld禁用開機(jī)自啟動(dòng)
?
systemctl disable firewalld
?
6、查看firewalld工作狀態(tài)
?
systemctl status firewalld
?
或
?
firewall-cmd --state(一)firewalld命令格式 1、命令格式
firewall-cmd [選項(xiàng)參數(shù) ... ]
?
(1)選項(xiàng)參數(shù) 1)常見(jiàn)通用選項(xiàng)參數(shù)
-h, --help # 顯示幫助信息; -V, --version # 顯示版本信息. (這個(gè)選項(xiàng)不能與其他選項(xiàng)組合); -q, --quiet # 不打印狀態(tài)消息;2)常見(jiàn)狀態(tài)選項(xiàng)參數(shù)
--state # 顯示firewalld的狀態(tài); --reload # 不中斷服務(wù)的重新加載; --complete-reload # 中斷所有連接的重新加載; --runtime-to-permanent # 將當(dāng)前防火墻的規(guī)則永久保存; --check-config # 檢查配置正確性;? 3)日志選項(xiàng)參數(shù)
--get-log-denied # 獲取記錄被拒絕的日志; --set-log-denied= # 設(shè)置記錄被拒絕的日志,只能為 'all','unicast','broadcast','multicast','off' 其中的一個(gè);(二)firewalld命令常見(jiàn)選項(xiàng)參數(shù) 可以通過(guò)firewall-cmd --help查看firewalld具體參數(shù)用法,以下羅列常見(jiàn)參數(shù):
?
1、-h,--help:顯示幫助信息;
2、-V,--version:顯示版本信息;
3、-q,--quiet:不打印狀態(tài)信息;
4、--state:顯示firewalld的狀態(tài);
5、--reload:不中斷服務(wù)的重新加載;
6、--complete-reload:中斷所有連接的重新加載;
7、--runtime-to-permanent:將當(dāng)前防火墻的規(guī)則永久保存;
8、--check-config: 檢查配置正確性;
9、--get-default-zone:顯示當(dāng)前默認(rèn)區(qū)域;
10、--set-default-zone=:設(shè)置默認(rèn)區(qū)域;
11、--get-active-zones:顯示當(dāng)前正在使用的區(qū)域及其對(duì)應(yīng)的網(wǎng)卡接口
12、--get-zones :顯示所有可用的區(qū)域;
13、--get-zone-of-interface=:顯示指定接口綁定的區(qū)域;
14、--zone= --add-interface=:為指定接口綁定區(qū)域;
15、--zone= --change-interface=:為指定的區(qū)域更改綁定的網(wǎng)絡(luò)接口;
16、--zone= --remove-interface=:為指定的區(qū)域刪除綁定的網(wǎng)絡(luò)接口;
17、--list-all-zones :顯示所有區(qū)域及其規(guī)則;
18、[--zone=] --list-all :顯示所有指定區(qū)域的所有規(guī)則,省略--zone=時(shí)表示僅對(duì)默認(rèn)區(qū)域操作;
19、[--zone=] --list-services :顯示指定區(qū)域內(nèi)允許訪問(wèn)的所有服務(wù);
20、[--zone=] --add-service= :為指定區(qū)域設(shè)置允許訪問(wèn)的某項(xiàng)服務(wù);
21、[--zone=] --remove-service= :刪除指定區(qū)域已設(shè)置的允許訪問(wèn)的某項(xiàng)服務(wù);
22、[--zone=] --list-ports :顯示指定區(qū)域內(nèi)允許訪問(wèn)的所有端口號(hào);
23、為指定區(qū)域設(shè)置允許訪問(wèn)的某個(gè)/某段端口號(hào)(包括協(xié)議名);
[--zone=] --add-port=[-]/
24、刪除指定區(qū)域已設(shè)置的允許訪問(wèn)的端口號(hào)(包括協(xié)議名);
[--zone=] --remove-port=[-]/
25、[--zone=] --list-icmp-blocks:顯示指定區(qū)域內(nèi)拒絕訪問(wèn)的所有 ICMP 類型;
26、[--zone=] --add-icmp-block= :為指定區(qū)域設(shè)置拒絕訪問(wèn)的某項(xiàng) ICMP 類型;
27、[--zone=] --remove-icmp-block= :刪除指定區(qū)域已設(shè)置的拒絕訪問(wèn)的某項(xiàng)ICMP類型;
28、?--get-icmptypes :顯示所有 ICMP 類型;
?
六、firewalld配置常用命令列舉
以下羅列出平時(shí)運(yùn)維工作常用的一些規(guī)則添加命令,方便大家參考學(xué)習(xí)。這里需要注意點(diǎn);
firewalld可以通過(guò)兩種方式控制端口的開放,一種是通過(guò)指定端口號(hào),另一種是指定服務(wù)名。例如開放mysql服務(wù)就是開放了對(duì)應(yīng)3306端口,但是不能通過(guò)端口號(hào)來(lái)關(guān)閉,也就是說(shuō)通過(guò)指定服務(wù)名開放的就要通過(guò)指定服務(wù)名關(guān)閉;通過(guò)指定端口號(hào)開放的就要通過(guò)指定端口號(hào)關(guān)閉。還有一個(gè)要注意的就是指定端口的時(shí)候一定要指定是什么協(xié)議,tcp還是udp。
1、查看firewalld版本號(hào)信息
?
firewall-cmd --version
?
2、查看firewalld命令使用幫助信息
?
firewall-cmd --help3、查看firewalld工作狀態(tài)
firewall-cmd --state
?
4、查看firewalld區(qū)域信息
?
firewall-cmd --get-active-zones
?
5、查看指定接口所屬區(qū)域
?
firewall-cmd?--get-zone-of-interface=ens33
?
6、拒絕所有包
?
firewall-cmd --panic-on
?
7、查看是否拒絕
?
firewall-cmd --query-panic
?
8、取消拒絕狀態(tài)
?
firewall-cmd --panic-off
?
9、將接口添加到區(qū)域,默認(rèn)接口都在public
?
firewall-cmd --zone=public --add-interface=ens33
?
10、加入一個(gè)端口到指定區(qū)域
?
firewall-cmd --zone=dmz --add-port=8080/tcp
?
11、更新防火墻規(guī)則
?
firewall-cmd --reload
firewall-cmd --complete-reload
?
12、設(shè)置默認(rèn)接口區(qū)域,立即生效無(wú)需重啟
?
firewall-cmd --set-default-zone=public
?
13、設(shè)置為家庭區(qū)域
?
firewall-cmd --set-default-zone=home
?
14、查看所有打開的端口
?
firewall-cmd --zone=dmz --list-ports
?
15、顯示支持的區(qū)域列表
?
firewall-cmd --get-zones
?
16、查看顯示當(dāng)前正在使用的區(qū)域及其對(duì)應(yīng)的網(wǎng)卡接口
?
firewall-cmd --get-active-zones
?
17、設(shè)置當(dāng)前區(qū)域的接口
?
firewall-cmd --get-zone-of-interface=ens33
?
18、顯示所有公共區(qū)域(public)
?
firewall-cmd --zone=public --list-all
?
19、臨時(shí)修改網(wǎng)絡(luò)接口ens33為內(nèi)部區(qū)域(internal);
?
firewall-cmd --zone=internal --change-interface=ens33
?
20、永久修改網(wǎng)絡(luò)接口ens33為內(nèi)部區(qū)域(internal)
?
firewall-cmd --permanent --zone=internal --change-interface=ens33
?
21、顯示服務(wù)列表?
?
firewall-cmd --get-services
?
22、禁止ssh服務(wù)通過(guò)
?
firewall-cmd --delete-service=ssh
?
23、開放ssh服務(wù)通過(guò)
?
firewall-cmd --new-service=ssh
?
24、查看顯示當(dāng)前服務(wù)
?
firewall-cmd --list-services
?
25、添加http服務(wù)到內(nèi)部區(qū)域(internal)
?
firewall-cmd --permanent --zone=internal --add-service=http
?
26、打開tcp的8090端口
?
firewall-cmd?--enable?ports=8090/tcp
?
27、臨時(shí)允許Samba服務(wù)通過(guò)300秒
?
firewall-cmd?--enable?service=samba?--timeout=300
?
28、打開8090/TCP端口
?
firewall-cmd?--add-port=8090/tcp
?
29、永久打開8090/TCP端口
?
firewall-cmd --permanent --add-port=8090/tcp
?
30、開放mysql服務(wù)對(duì)應(yīng)的端口
?
firewall-cmd --add-service=mysql
?
31、阻止mysql服務(wù)對(duì)應(yīng)的端口
?
firewall-cmd --remove-service=mysql
?
32、開放通過(guò)tcp訪問(wèn)3306端口
?
firewall-cmd --add-port=3306/tcp
?
33、開放通過(guò)udp訪問(wèn)234端口
?
firewall-cmd?--add-port=234/udp??
?
34、查看開放的端口
?
firewall-cmd --list-ports
?
35、阻止通過(guò)tcp訪問(wèn)3306端口
?
firewall-cmd --remove-port=3306/tcp
?
36、顯示所有的icmp類型
?
firewall-cmd --get-icmptypes
?
37、為指定區(qū)域設(shè)置拒絕訪問(wèn)的某項(xiàng)icmp?類型
?
firewall-cmd --add-icmp-block=echo-request
?
38、顯示指定區(qū)域內(nèi)拒絕訪問(wèn)的所有 icmp 類型
?
firewall-cmd --list-icmp-blocks
?
39、為指定區(qū)域設(shè)置拒絕訪問(wèn)的某項(xiàng) icmp 類型
?
firewall-cmd --add-icmp-block=destination-unreachable
?
40、刪除指定區(qū)域已設(shè)置的拒絕訪問(wèn)的某項(xiàng)icmp類型
?
firewall-cmd --remove-icmp-block=destination-unreachable
?
41、檢查是否允許偽裝IP
?
firewall-cmd --query-masquerade
?
42、允許防火墻偽裝IP
?
firewall-cmd --add-masquerade
?
43、禁止防火墻偽裝IP
?
firewall-cmd --remove-masquerade
?
44、將8888端口的流量轉(zhuǎn)發(fā)至80端口
?
firewall-cmd --add-forward-port=port=8888:proto=tcp:toport=80
?
45、將8888端口的流量轉(zhuǎn)發(fā)至192.168.20.232的80端口
?
firewal-cmd --add-forward-port=port=8888: proto=tcp:toaddr=192.168.20.232:toport=80
?
46、將8888端口的流量轉(zhuǎn)發(fā)至192.168.20.232
?
firewall-cmd?--add-forward-port=port=8888:proto=tcp:toaddr=192.168.20.232
?
七、總結(jié)
大家都知道,防火墻規(guī)則眾多并且繁雜,我們不可能羅列完它的每一條添加命令,更不可能死記硬背它的每一條規(guī)則。但是我們可以通過(guò)掌握其添加規(guī)則語(yǔ)法,用到時(shí)方便查閱添加即可。
審核編輯:湯梓紅
評(píng)論
查看更多