當前位置: 妍妍網 > 碼農

面試時都說精通firewalld防火墻,一拿出這些就不會了!

2024-05-27碼農

關註上方 浩道Linux ,回復 資料 ,即可獲取海量 L inux Python 網路通訊、網路安全 等學習資料!

前言

大家好,這裏是 浩道Linux ,主要給大家分享 L inux P ython 網路通訊、網路安全等 相關的IT知識平台。

浩道結合平日面試時遇到的大家常說的精通firewalld防火墻,不忍吐槽一番。本文就是針對大家忽略的一些firewalld防火墻知識進行總結,透過對其介紹、相關概念回顧,封包處理流程、其安裝過程、其常用命令用法、其添加規則相關用法去開展,讓大家在 L inux系統中的安全防範再添一塊技能磚!

本文將圍繞以下幾個章節去開展,感興趣的小夥伴可以收藏,隨時學習!

firewalld簡介

firewalld與iptables之間的關系

firewalld常見概念

firewalld封包處理過程

firewalld防火墻安裝及其語法

firewalld配置常用命令列舉

一、firewalld簡介

firewalld 防火墻是Linux系統上的一種動態防火墻管理工具,它是Red Hat公司開發的,並在許多Linux發行版中被采用。相對於傳統的靜態防火墻規則,firewalld使用動態的方式來管理防火墻規則,可以更加靈活地適應不同的網路環境和套用場景。

firewalld防火墻是Centos7系統預設內建的防火墻管理工具,取代了之前的iptables防火墻工具,它工作在網路層,主要功能是管理網路連線和防止未經授權的存取。它可以對入站和出站流量進行管理,可以控制埠、服務和網路協定的存取許可權,也支持NAT和埠轉發等高級功能,屬於包過濾防火墻。

firewalld防火墻采用了D-Bus介面來與網路管理器和其他應用程式進行通訊,這使得它可以更加靈活地適應不同的網路環境和套用場景。例如,當一個新的網路介面被添加到系統中時,firewalld可以接收到相關的通知,並自動更新防火墻規則以適應新的網路環境。

firewalld防火墻還提供了支持網路區域所定義的網路連線以及介面安全等級的動態防火墻管理工具。它支持IPv4、IPv6防火墻設定以及乙太網路橋(在某些高級服務可能會用到,比如雲端運算〉,並且擁有兩種配置模式:執行時配置與永久配置。

二、firewalld與iptables之間的關系

firewalld和liptables都是用來管理防火墻的工具(屬於使用者態),它們都可以用來定義防火墻的各種規則功能,內部結構都指向netfiter網路過濾子系統(屬於內核態),從而實作包過濾防火墻功能。

(一)兩者基於方式不同

1、iptables主要是基於介面來設定規則,從而實作網路的安全性。

2、firewalld是基於區域,根據不同的區域來設定不同的規則,從而保證網路的安全。與硬體防火墻的設定相類似。

(二)配置檔不同

1、iptables 將配置儲存在/etc/sysconfig/iptables ;

2、firewalld將配置儲存在/etc/firewalld,優先載入該配置檔,同時/usr/lib/firewalld中的各種xml檔是 預設的配置檔

(三)對防火墻規則修改不同

1、iptables對於規則的修改需要全部重新整理策略,每一個單獨更改意味著清除所有舊有的規則和從/etc/sysconfig/iptables裏讀取所有新的規則。

2、firewalld對於規則的修改無需全部重新整理策略,因為它不會再建立任何新的規則,僅僅執行規則中的不同之處。因此firewalld可以在執行時間內,改變設定而不遺失現行連線。

(四)防火墻型別不同

1、iptables防火墻型別為靜態防火墻。可以理解為iptables的規則就是一張表,對表進行增刪改查操作。

2、 firewalld防火墻型別為動態防火墻。 可以理解為firewalld的規則是一塊區域,可以更換不同的區域進行增刪改查操作。

(五)firewalld相對於iptables優勢

1、firewalld可以動態修改單條規則,而iptables在修改了規則後必須得全部重新整理才可以生效。

2、firewalld在使用上要比iptables更加人性化了,即使對於不明白防火墻的「四表五鏈」,對於TCP/IP協定也不熟悉的情況下,也可以實作大部份管理功能。

三、firewalld常見概念

(一)firewalld區域概念

firewalld防火墻為了簡化方便管理,將所有網路流量分為多個區域(zone)。然後根據封包的源IP地址或傳入的網路介面等條件將流量傳入相應區域。每個區域都定義了自己開啟或者關閉的埠和服務列表。

(二)firewalld預定義區域概念

1、區域如同進入主機的安全門,每個區域都具有不同限制程度的規則,只會允許符合規則的流量傳入。

2、 可以根據網路規模,使用一個或多個區域,但是任何一個活躍區域至少需要關聯源地址或介面。

3、預設情況下,public區域是預設區域,包含所有介面(網卡)。

最終一個區域的安全程度是取決於管理員在此區域中設定的規則。

值得註意: 如果封包的源地址與區域繫結,則此封包不管從那個網卡傳入都使用改區域的規則過濾封包。如果封包的源地址未與區域繫結,則此數據從哪個網卡傳入則使用該網卡繫結的區域規則過濾封包。

(三)常見區域及含義

1、信任區域trusted: 允許所有的流量傳人;

2、公共區域public: 預設允許與ssh或dhcpv6-client預定義服務匹配的傳入流量,其余均拒絕,是新添加網路介面的預設區域。

3、外部區域external: 預設允許與ssh預定義服務匹配的傳入流量,其余均拒絕。 預設將透過此區域轉發的IPv4傳出流量將進行地址偽裝(MASQUERADE),可用於為路由器啟用了偽裝功能的外部網路。

4、家庭區域home: 預設允許與ssh、mdns、samba-client或dhcpv6-client預定義服務匹配的傳入流量,其余均拒絕。

5、內部區域internal: 預設值時與home區域功能相同。

6、工作區域work: 允許與 ssh、dhcpv6-client預定義服務匹配的傳入流量,其余均拒絕。

7、隔離區域dmz也稱為非軍事區域: 預設允許與ssh預定義服務匹配的傳入流量,其余均拒絕。

8、限制區域block: 拒絕所有傳入流量。

9、丟棄區域drop: 丟棄所有傳入流量,並且不產生包含ICMP的錯誤響應。

值得註意: 預設情況下的預設區域為public(預設與所有網卡繫結),要啟用某個區域,就需要將區域與源地址網卡繫結。

四、firewalld封包處理過程

(一)firewalld數據處理流程

firewalld對於進入系統的封包,會根據封包的源I地址或傳入的網路介面等條件,將數據流量轉入相應區域的防火靖規則。對於進入系統的封包,首先撿查的就是其源地址。

(二)firewalld檢查封包的源地址的規則

1、若源地址關聯到特定的區域(即源地址或介面繫結的區域有沖突),則執行該區域所制定的規則。

2、若源地址未關聯到特定的區域(即源地址或介面繫結的區域沒有沖突〉,則使用傳入網路介面的區域並執行該區域所制定的規則。

3、若網路介面也未關聯到特定的區域(即源地址或介面都沒有繫結特定的某個區域),則使用預設區域並執行該區域所制定的規則。

針對以上封包處理流程總 結為: 先檢查傳入封包的源地址,若源地址與特定區域繫結,則使用該區域的規則過濾封包。若源地址與特定區域沒有繫結,且封包傳入網卡與特定區域繫結,則使用繫結網卡的區域的規則過濾封包。若也沒有區域繫結網卡,則使用預設區域的規則過濾封包。

五、firewalld防火墻安裝及其語法

firewalld在centos7中已經內建安裝了,所以不需要我們再另外安裝。至於其它發行版本的Linux系統,大家可以自行去了解相關Linux版本內建firewalld的情況,這裏不展開,以下相關操作均在centos7下進行。

1、centos7下可以透過yum方式安裝firewalld

yum install firewalld firewall-config

2、啟動firewalld服務

systemctl start firewalld

3、關閉firewalld服務

systemctl stop firewalld

4、將firewalld設定為開機自啟動

systemctl enable firewalld

5、將firewalld禁用開機自啟動

systemctl disable firewalld

6、 檢視 fire walld 工作狀態

systemctl status firewalld


firewall-cmd --state

(一)firewalld命令格式

1、命令格式

firewall-cmd [選項參數 ... ]

(1)選項參數

1)常見通用選項參數

-h, --help# 顯示幫助資訊;-V, --version # 顯示版本資訊. (這個選項不能與其他選項組合);-q, --quiet # 不打印狀態訊息;

2)常見狀態選項參數

--state# 顯示firewalld的狀態;--reload # 不中斷服務的重新載入;--complete-reload # 中斷所有連線的重新載入;--runtime-to-permanent # 將當前防火墻的規則永久保存;--check-config # 檢查配置正確性;

3)日誌選項參數

--get-log-denied # 獲取記錄被拒絕的日誌;--set-log-denied=<value> # 設定記錄被拒絕的日誌,只能為 'all','unicast','broadcast','multicast','off' 其中的一個;

(二)firewalld命令常見選項參數

可以透過firewall-cmd --help檢視firewalld具體參數用法,以下羅列常見參數:

1、-h,--help: 顯示幫助資訊;

2、-V,--version: 顯示版本資訊;

3、-q,--quiet: 不打印狀態資訊;

4、--state: 顯示firewalld的狀態;

5、--reload: 不中斷服務的重新載入;

6、 --complete-reload: 中斷所有連線的重新載入;

7、 --runtime-to-permanent: 將當前防火墻的規則永久保存;

8、 --check-config: 檢查配置正確性;

9、 --get-default-zone: 顯示當前預設區域;

10、 --set-default-zone=<zone> 設定預設區域;

11、--get-active-zones: 顯示當前正在使用的區域及其對應的網卡介面

12、--get-zones : 顯示所有可用的區域;

13、--get-zone-of-interface=<interface>: 顯示指定介面繫結的區域;

14、--zone=<zone> --add-interface=<interface>: 為指定介面繫結區域;

15、--zone=<zone> --change-interface=<interface>: 為指定的區域更改繫結的網路介面;

16、--zone=<zone> --remove-interface=<interface>: 為指定的區域刪除繫結的網路介面;

17、--list-all-zones : 顯示所有區域及其規則;

18、[--zone=<zone>] --list-all : 顯示所有指定區域的所有規則,省略--zone=<zone>時表示僅對預設區域操作;

19、[--zone=<zone>] --list-services : 顯示指定區域內允許存取的所有服務;

20、[--zone=<zone>] --add-service=<service> : 為指定區域設定允許存取的某項服務;

21、[--zone=<zone>] --remove-service=<service> : 刪除指定區域已設定的允許存取的某項服務;

22、[--zone=<zone>] --list-ports : 顯示指定區域內允許存取的所有埠號;

23、為指定區域設定允許存取的某個/某段埠號(包括協定名);

[--zone=<zone>] --add-port=<portid>[-<portid>]/<protocol>

24、刪除指定區域已設定的允許存取的埠號(包括協定名);

[--zone=<zone>] --remove-port=<portid>[-<portid>]/<protocol>

25、[--zone=<zone>] --list-icmp-blocks :顯示指定區域內拒絕存取的所有 ICMP 型別;

26、[--zone=<zone>] --add-icmp-block=<icmptype> : 為指定區域設定拒絕存取的某項 ICMP 型別;

27、[--zone=<zone>] --remove-icmp-block=<icmptype> : 刪除指定區域已設定的拒絕存取的某項ICMP型別;

28、 --get-icmptypes : 顯示所有 ICMP 型別;

六、firewalld配置常用命令列舉

以下羅列出平時運維工作常用的一些規則添加命令,方便大家參考學習。這裏需要註意點;

firewalld可以透過兩種方式控制埠的開放,一種是透過指定埠號,另一種是指定服務名。例如開放mysql服務就是開放了對應3306埠,但是不能透過埠號來關閉,也就是說透過指定服務名開放的就要透過指定服務名關閉;透過指定埠號開放的就要透過指定埠號關閉。還有一個要註意的就是指定埠的時候一定要指定是什麽協定,tcp還是udp。

1、檢視firewalld版本號資訊

firewall-cmd --version

2、檢視firewalld命令使用幫助資訊

firewall-cmd --help

3、檢視firewalld工作狀態

firewall-cmd --state

4、檢視firewalld區域資訊

firewall-cmd --get-active-zones

5、檢視指定介面所屬區域

firewall-cmd --get-zone-of-interface=ens33

6、拒絕所有包

firewall-cmd --panic-on

7、檢視是否拒絕

firewall-cmd --query-panic

8、取消拒絕狀態

firewall-cmd --panic-off

9、將介面添加到區域,預設介面都在public

firewall-cmd --zone=public --add-interface=ens33

10、加入一個埠到指定區域

firewall-cmd --zone=dmz --add-port=8080/tcp

11、更新防火墻規則

firewall-cmd --reload

firewall-cmd --complete-reload

12、設定預設介面區域,立即生效無需重新開機

firewall-cmd --set-default-zone=public

13、設定為家庭區域

firewall-cmd --set-default-zone=home

14、檢視所有開啟的埠

firewall-cmd --zone=dmz --list-ports

15、顯示支持的區域列表

firewall-cmd --get-zones

16、檢視顯示當前正在使用的區域及其對應的網卡介面

firewall-cmd --get-active-zones

17、設定當前區域的介面

firewall-cmd --get-zone-of-interface=ens33

18、顯示所有公共區域(public)

firewall-cmd --zone=public --list-all

19、臨時修改網路介面ens33為內部區域(internal);

firewall-cmd --zone=internal --change-interface=ens33

20、永久修改網路介面ens33為內部區域(internal)

firewall-cmd --permanent --zone=internal --change-interface=ens33

21、顯示服務列表

firewall-cmd --get-services

22、禁止ssh服務透過

firewall-cmd --delete-service=ssh

23、開放ssh服務透過

firewall-cmd --new-service=ssh

24、檢視顯示當前服務

firewall-cmd --list-services

25、添加http服務到內部區域(internal)

firewall-cmd --permanent --zone=internal --add-service=http

26、開啟tcp的8090埠

firewall-cmd --enable ports=8090/tcp

27、臨時允許Samba服務透過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服務對應的埠

firewall-cmd --add-service=mysql

31、阻止mysql服務對應的埠

firewall-cmd --remove-service=mysql

32、開放透過tcp存取3306埠

firewall-cmd --add-port=3306/tcp

33、開放透過udp存取234埠

firewall-cmd --add-port=234/udp

34、檢視開放的埠

firewall-cmd --list-ports

35、阻止透過tcp存取3306埠

firewall-cmd --remove-port=3306/tcp

36、顯示所有的icmp型別

firewall-cmd --get-icmptypes

37、為指定區域設定拒絕存取的某項icmp 型別

firewall-cmd --add-icmp-block=echo-request

38、顯示指定區域內拒絕存取的所有 icmp 型別

firewall-cmd --list-icmp-blocks

39、為指定區域設定拒絕存取的某項 icmp 型別

firewall-cmd --add-icmp-block=destination-unreachable

40、刪除指定區域已設定的拒絕存取的某項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埠的流量轉發至80埠

firewall-cmd --add-forward-port=port=8888:proto=tcp:toport=80

45、將8888埠的流量轉發至192.168.20.232的80埠

firewal-cmd --add-forward-port=port=8888: proto=tcp:toaddr=192.168.20.232:toport=80

46、將8888埠的流量轉發至192.168.20.232

firewall-cmd --add-forward-port=port=8888:proto=tcp:toaddr=192.168.20.232

七、總結

大家都知道,防火墻規則眾多並且繁雜,我們不可能羅列完它的每一條添加命令,更不可能死記硬背它的每一條規則。但是我們可以透過掌握其添加規則語法,用到時方便查閱添加即可。

更多精彩

關註公眾號 浩道Linux

浩道Linux ,專註於 Linux系統 的相關知識、 網路通訊 網路安全 Python相關 知識以及涵蓋IT行業相關技能的學習, 理論與實戰結合,真正讓你在學習工作中真正去用到所學。同時也會分享一些面試經驗,助你找到高薪offer,讓我們一起去學習,一起去進步,一起去漲薪!期待您的加入~~~ 關註回復「資料」可 免費獲取學習資料 (含有電子書籍、視訊等)。

喜歡的話,記得 點「贊」 「在看」