1. 程式人生 > 其它 >LInux防火牆Firewalld基礎詳細解讀

LInux防火牆Firewalld基礎詳細解讀

一、Firewalld概述

FirewallD 是由紅帽發起的提供了支援網路/防火牆 區域(zone)定義網路連結以及介面安全等級的動態防火牆管理工具。它支援 IPv4、IPv6 防火牆設定以及乙太網橋接,並且擁有執行時配置和永久配置選項。它也支援允許服務或者應用程式直接新增防火牆規則的介面。

firewalld防火牆是Centos7系統預設的防火牆管理工具,取代了之前的iptables防火牆,也是工作在網路層,屬於包過濾防火牆。

2.1 Firewalld和iptables分析

firewalld和iptables都是用來管理防火牆的工具(屬於使用者態)來定義防火牆的各種規則功能,內部結構都指向netfilter網路過濾子系統(屬於核心態)來實現包過濾防火牆功能。

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

2.1 Firewalld和iptables區別

1.iptables主要是基於介面,來設定規則, 從而判斷網路的安全性。
firewalld是基於區域,根據不同的區域來設定不同的規則,從而保證網路的安全。與硬體防火牆的設定相類似。

2.iptables 在 /etc/sysconfig/iptables 中儲存配置,
firewalld 將配置儲存在 /etc/firewalld/(優先載入)和 /usr/lib/firewalld/(預設的配置檔案)中的各種 XML 檔案裡。

3.使用 iptables 每一個單獨更改意味著清除所有舊有的規則和從/etc/sysconfig/iptables 裡讀取所有新的規則。使用 firewalld 卻不會再建立任何新的規則,僅僅執行規則中的不同之處。因此firewalld可以在執行時間內,改變設定而不丟失現行連線。

4.iptables 防火牆型別為靜態防火牆 firewalld 防火牆型別為動態防火牆

三、Firewalld網路區域

3.1 firewalld 區域的概念

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

3.2 firewalld防火牆預定義了9個區域

1. trusted(信任區域)∶ 允許所有的傳入流量。

2. public(公共區域)∶ 允許與ssh或dhcpv6-client預定義服務匹配的傳入流量,其餘均拒絕。是新新增網路介面的預設區域

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

4. home (家庭區域)∶ 允許與ssh、ipp-client、mdns、samba-client或dhcpv6-client預定義服務匹配的傳入流量,其餘均拒絕。

5. internal (內部區域)∶ 預設值時與home區域相同。

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

7. dmz (隔離區域也稱為非軍事區域)∶ 允許與 ssh 預定義服務匹配的傳入流量,其餘均拒絕。

8. block(限制區域)∶拒絕所有傳入流量。

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

補充:

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

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

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

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

3.2 firewalld資料處理流程

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

1. 若源地址關聯到特定的區域(即源地址或接 口繫結的區域有衝突), 則執行該區域高制定的規則。

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

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

總結:繫結源地址的區域規則>網絡卡介面繫結的區域規則>預設區域的規則

  • Firewalld:只關心區域
  • Iptables:四表五鏈及流量的進出

四、Firewalld防火牆的配置方法

4.1 Firewalld配置方案

1. 執行時配置

●不中斷現有連線
●不能修改服務配置

2. 永久配置

●不立即生效,除非Firewalld重新啟動或重新載入配置
●中斷現有連線
●可以修改服務配置

4.2 Firewalld配置方法

1、使用firewall-cmd 命令列工具。
2、使用firewall-config 圖形工具。
3、編寫/etc/firewalld/中的配置檔案。

五、使用firewall-cmd 命令列工具

使用命令之前先要開啟Firewalld服務

5.1 常用的firewall-cmd 命令選項

--get-default-zone∶ 顯示當前預設區域
--set-default-zone=<zone>∶設定預設區域

--get-active-zones ∶ 顯示當前正在使用的區域及其對應的網絡卡介面
--get-zones∶ 顯示所有可用的區域

--get-zone-of-interface=<interface>∶ 顯示指定介面繫結的區域
--zone=<zone> --add-interface=<interface>∶ 為指定介面繫結區域
--zone=<zone> --change-interface=<interface>∶為指定的區域更改繫結的網路介面
--zone=<zone> --remove-interface=<interface>∶ 為指定的區域刪除繫結的網路介面

1. 顯示當前預設區域firewall-cmd --get-default-zone

2.設定預設區域為honefirewall-cmd --set-default-zone=home

3.顯示當前正在使用的區域及其對應的網絡卡介面firewall-cmd --get-active-zones

4.顯示所有可用的區域firewall-cmd --get-zones

5.顯示指定介面ens33繫結的區域firewall-cmd --get-zone-of-interface=ens33

6.為指定介面ens37繫結區域homefirewall-cmd --zone=home --add-interface=ens37

7.為指定的區域更改繫結的網路介面firewall-cmd --zone=public --change-interface=ens37

8.為指定的區域刪除繫結的網路介面,這裡為ens37繫結的home區域

5.2 --list-all-zones ∶ 顯示所有區域及其規則

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

[--zone=<zone>] --list-services ; 顯示指定區域內 允許訪問的所有服務
[--zone=<zone>] --add-service=<service> ∶ 為指定區域設定允許訪問的某項服務
[--zone=<zone>] --remove-service=<service> ∶ 刪除指定區域已設定的允許訪問的某項服務

1.顯示所有指定區域的所有規則,這裡為預設firewall-cmd --zone=public --list-all

2.顯示public區域內允許訪問的所有服務firewall-cmd --zone=public --list-services

3.刪除指定區域public已設定的允許訪問的ssh服務firewall-cmd --zone=public --remove-service=ssh

4.新增指定區域public允許訪問的ssh服務firewall-cmd --zone=public --add-service=ssh

[--zone=<zone> ] --list-ports :顯示指定區域內允許訪問的所有埠號
[--zone=<zone> ]-- add-port=<portid> [-<portid>] /<protocol> :為指定區域設定允許訪問的某個/某段埠號(包括協議名)
[--zone=<zone> ]-- remove-port=<portid> [-<portid>]/<protocol> :刪除指定區域已設定的允許訪問的埠號(包括協議名)

[--zone=<zone>] --list-icmp- blocks :顯示指定區域內拒絕訪問的所有ICMP 型別
[--zone=<zone>]--add- icmp-block=<icmptype> :為指定區域設定拒絕訪問的某項ICMP 型別
[--zone=<zone>] -- remove- icmp-block=<i cmptype> :刪除指定區域已設定的拒絕訪問的某項ICMP型別
firewall-cmd --get-icmptypes :顯示所有ICMP型別

5.3 區域管理

(1)顯示當前系統中的預設區域
firewall-cmd --get-default-zone

(2)顯示預設區域的所有規則
firewall-cmd --list-all

(3)顯示當前正在使用的區域及其對應的網絡卡介面
firewall-cmd --get-active-zones

(4)設定預設區域
firewall-cmd --set-default-zone=home
firewall-cmd --get-default-zone

1.顯示當前系統中的預設區域 、顯示預設區域的所有規則 和顯示當前正在使用的區域及其對應的網絡卡介面

2.設定預設區域為home,然後在修改回來。

5.4 服務管理

(1)檢視預設區域內允許訪問的所有服務

firewall-cmd --list-service

(2)新增httpd 服務到public 區域
firewall-cmd --add-service=http --zone=public

(3)檢視public 區域已配置規則
firewall-cmd --list-all --zone=public

(4)刪除public 區域的httpd 服務
firewall-cmd --remove-service=http --zone=public

(5)同時新增httpd、https 服務到預設區域,設定,成永久生效
firewall-cmd --add-service=http --add-service=https --permanent
firewall-cmd --add-service={http, https, ftp)--zone=internal
firewall-cmd --reload
firewall-cmd --list-all

#新增使用 --permanent選項表示設定成永久生效,需要重新啟動firewalld服務或執行firewall-cmd --reload命令
重新載入防火牆規則時才會生效。若不帶有此選項,表示用於設定執行時規則,但是這些規則在系統或firewalld服務重啟、停止時配置將失效

firewall-cmd --runtime-to-permanent∶將當前的執行時配置寫入規則配置檔案中,使之成為永久性配置

5.5 埠管理

(1)允許TCP的443埠到internal區域
firewall-cmd --zone=internal --add-port=443/tcp
firewall-cmd --list-all --zone=internal

(2)從internal 區域將TCP的443埠移除
firewall-cmd --zone=internal --remove-port=443/tcp

(3)允許UDP的2048~2050埠到預設區域
firewall-cmd --add-port=2048-2050/udp
firewall-cmd --list-all