前言
大家好,這里是浩道Linux,主要給大家分享Linux、Python、網絡通信、網絡安全等相關的IT知識平臺。
前邊推文已經針對iptables做過一次實戰指南,大家可以進行查閱回顧。
Linux系統iptables防火墻實戰指南~
本文浩道跟大家分享Linux系統firewalld防火墻硬核干貨,通過對其介紹、相關概念回顧,數據包處理流程、其安裝過程、其常用命令用法、其添加規則相關用法去開展,讓大家在****Linux系統中的安全防范再添一塊技能磚!
本文將圍繞以下幾個章節去開展,感興趣的小伙伴可以收藏,隨時學習!
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、查看firewalld工作狀態
?
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= # 設置記錄被拒絕的日志,只能為 '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=:設置默認區域;
11、--get-active-zones:顯示當前正在使用的區域及其對應的網卡接口
12、--get-zones :顯示所有可用的區域;
13、--get-zone-of-interface=:顯示指定接口綁定的區域;
14、--zone= --add-interface=:為指定接口綁定區域;
15、--zone= --change-interface=:為指定的區域更改綁定的網絡接口;
16、--zone= --remove-interface=:為指定的區域刪除綁定的網絡接口;
17、--list-all-zones :顯示所有區域及其規則;
18、[--zone=] --list-all :顯示所有指定區域的所有規則,省略--zone=時表示僅對默認區域操作;
19、[--zone=] --list-services :顯示指定區域內允許訪問的所有服務;
20、[--zone=] --add-service= :為指定區域設置允許訪問的某項服務;
21、[--zone=] --remove-service= :刪除指定區域已設置的允許訪問的某項服務;
22、[--zone=] --list-ports :顯示指定區域內允許訪問的所有端口號;
23、為指定區域設置允許訪問的某個/某段端口號(包括協議名);
[--zone=] --add-port=[-]/
24、刪除指定區域已設置的允許訪問的端口號(包括協議名);
[--zone=] --remove-port=[-]/
25、[--zone=] --list-icmp-blocks:顯示指定區域內拒絕訪問的所有 ICMP 類型;
26、[--zone=] --add-icmp-block= :為指定區域設置拒絕訪問的某項 ICMP 類型;
27、[--zone=] --remove-icmp-block= :刪除指定區域已設置的拒絕訪問的某項ICMP類型;
28、?--get-icmptypes :顯示所有 ICMP 類型;
?
六、firewalld配置常用命令列舉
以下羅列出平時運維工作常用的一些規則添加命令,方便大家參考學習。這里需要注意點;
firewalld可以通過兩種方式控制端口的開放,一種是通過指定端口號,另一種是指定服務名。例如開放mysql服務就是開放了對應3306端口,但是不能通過端口號來關閉,也就是說通過指定服務名開放的就要通過指定服務名關閉;通過指定端口號開放的就要通過指定端口號關閉。還有一個要注意的就是指定端口的時候一定要指定是什么協議,tcp還是udp。
1、查看firewalld版本號信息
?
firewall-cmd --version
?
2、查看firewalld命令使用幫助信息
?
firewall-cmd --help3、查看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
?
七、總結
大家都知道,防火墻規則眾多并且繁雜,我們不可能羅列完它的每一條添加命令,更不可能死記硬背它的每一條規則。但是我們可以通過掌握其添加規則語法,用到時方便查閱添加即可。
審核編輯:湯梓紅
評論
查看更多