Linux防火牆——Firewalld原理與實戰操作

語言: CN / TW / HK

一、防火牆概述

Firewalld是一種提供了支援網路/防火牆區域(zone)定義網路連結以及介面安全等級的動態防火牆管理工具,它自身並不具備防火牆的功能,而是iptables一樣需要通過核心的netfilter來實現,也就是說firewalld和 iptables一樣,他們的作用都是用於維護規則,而真正使用規則幹活的是核心的netfilter,只不過firewalld和iptables的結構以及使用方法不一樣罷了。

  • 從邏輯上可分為:主機防火牆網路防火牆
  • 從物理上可分為:硬體防火牆軟體防火牆

防火牆主要通過NetfilterTCP Wrappers兩個機制來管理的。

  • Netfilter:資料包過濾機制
  • TCP Wrappers:程式管理機制

關於資料包過濾機制(Netfilter)有兩個軟體:firewalldiptables

在看本篇firewalld文章之前,最好先了解一下iptables,可以看我之前的博文:

【溫馨提示】在RHEL7系列中,預設使用firewalld作為防火牆。在RHEL7版本已經預設沒有iptables服務了,當然iptables 命令還是可以用的。

二、Firewalld原理架構

在這裡插入圖片描述

1)Firewalld區域管理

通過將網路劃分成不同的區域,制定出不同區域之間的訪問控制策略來控制不同程式區域間傳送的資料流。

【例如】網際網路是不可信任的區域,而內部網路是高度信任的區域。網路安全模型可以在安裝, 初次啟動和首次建立網路連線時選擇初始化。該模型描述了主機所連線的整個網路環境的可信級別,並定義了新連線的處理方式。

2)Firewalld域

|網路區名稱 | 預設配置 | |--|--| | trusted(信任) | 可接受所有的網路連線 | | home(家庭) | 用於家庭網路,僅接受ssh,mdns,gp-client,samba-client,dhcpv6-client連線 | | internal( 內部) | 用於內部網路,僅接受ssh,mdns,gp-client,samba-client,dhcpv6-client連線 | | work(工作) | 用於工作區,僅接受sshjpp-client,dhcpv6-client服務連線 | | public(工作) | 用於工作區,僅接受ssh,ipp-client,dhcpv6-client服務連線,在公共區域內使用,僅接受ssh或dhcpv6-client服務連線,是firewalld的預設區域 | | external( 外部) | 出去的ipv4網路連線通過此區域為偽裝或轉發,僅接受ssh服務的連線 | | dmz(非軍事區) | 僅接受ssh服務的連線 | | block(限制) | 拒絕所有網路的連線 | | drop (丟棄) | 任何接收的網路資料包都被丟棄,沒有任何回覆 |

【溫馨提示】firewalld的預設區域是public

3) Firewalld配置檔案

firewalld預設提供了九個zone配置檔案:block.xmldmz.xmldrop.xmlexternal.xmlhome.xmlinternal.xmlpublic.xmltrusted.xmlwork.xml,都儲存在/usr/lib/firewalld/zones/目錄下。

三 、Firewalld 和 Iptables 的異同

1)相同點

firewalldiptables 都是 linux 中防火牆的管理程式,但其實其角色主要為對於防火牆策略的管理,真正的防火牆執行者是位於核心中的netfilter

2)不同點

  • iptables 僅能通過命令列進行配置;而 firewalld 提供了圖形介面,類似windows防火牆的操作方式;
  • iptables 每一個單獨更改意味著清除所有舊的規則,並從 /etc/sysconfig/iptables 中讀取所有新的規;則;而 firewalld 在有規則變動後,可以僅僅執行規則中的不同之處,即在 firewalld 執行時間內,改變設定時可以不丟失現行連結;
  • iptables 的配置檔案在 /etc/sysconfig/iptables 中;而 firewalld 的配置檔案在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各種 XML 檔案中;
  • iptables 沒有守護程序,並不能算是真正意義上的服務;而 firewalld 有守護程序;
  • iptables 通過控制埠來控制服務,而 firewalld 則是通過控制協議來控制埠;
  • 【firewalld】預設是拒絕;而【iptables】預設是允許。

【溫馨提示】

service說明: 在 /usr/lib/firewalld/services/ 目錄中,還儲存了另外一類配置檔案,每個檔案對應一項具體的網路服務,如 ssh 服務等。這個目錄下的服務配置預設是放通的,不受firewalld-cmd 規則控制,除非把這個目錄下的服務配置檔案刪掉,就恢復了默認了(預設拒絕),當然也可以新增一些服務配置檔案。

驗證預設拒絕規則

```bash

這裡用到nc工具去監聽埠

安裝nc

yum install -y nc

監聽埠

nc -l 8888

查詢埠

ss -tnlp|grep :8888 ``` 在這裡插入圖片描述 用另外一臺機器telnet埠 telnet 192.168.182.149 8888 在這裡插入圖片描述

四、Firewalld實戰操作

只有firewalld服務啟動了,才能使用相關工具: firewall-config(圖形介面), firewall-cmd,這裡主要介紹命令列方式的。

1)Firewalld有規則兩種狀態

  • 執行時(runtime):修改規則馬上生效,但是臨時生效
  • 持久配置(permanent: 修改後需要過載才會生效

bash firewall-cmd --permanent [RULE] firewall-cmd --reload

【溫馨提示】一旦使用了--permanent會將配置寫入到/etc/firewalld/{services,zones}/*.xml對應的檔案中,配置完成後一定要reload,否則只能待防火牆重啟後這些配置才能生效。

2)Firewalld配置檔案

bash /etc/firewalld/{services,zones}/*.xml 優先順序最高,permanent模式生效的策略會放到這裡 /lib/firewalld/{services,zones}/*.xml 優先順序要低些,是一些預設配置,可以當做模板使用 以下options是可以組合使用的,具體見man firewall-cmd或者firewall-cmd --help,裡面有詳細的說明,此處只列出一些常用的option。

```bash firewall-cmd

   --permanent           --配置寫入到配置檔案,否則臨時馬上生效

--reload --過載配置檔案,永久生效

--zone= --指定區域

   --get-default-zones    --獲取預設區域

   --set-default-zone=    --設定預設區域

--get-zones --獲取所有可用的區域

--get-active-zones --獲取當前啟用(活躍)的區域

--add-source= --新增地址,可以是主機或網段,遵循當前區域的target

--remove-source    --移除地址,可以是主機或網段,遵循當前區域的target

--add-service=    --新增服務,遵循當前區域的target

--remove-service=      --移除服務,遵循當前區域的target

--list-services --顯示指定區域內允許訪問的所有服務

--add-port= --新增埠,遵循當前區域的target

--remove-port= --移除埠,遵循當前區域的target

--list-ports 顯示指定區域內允許訪問的所有埠號

--add-interface= --zone=        --新增網絡卡到指定區域

--change-interface= --new-zone-name --改變網絡卡到指定區域

--list-all        --列出啟用使用的區域的配置

--list-all-zones          --列出所有區域的配置

--get-zone-of-interface=      --獲取指定介面所在的區域

--list-icmp-blocks         --顯示指定區域內拒絕訪問的所有ICMP型別

--add-icmp-block= --為指定區域設定拒絕訪問的某項ICMP型別

--remove-icmp-block= --移除指定區域內拒絕訪問某項的ICMP型別

   #常用的ICMP型別有:
       #echo-request:型別0,icmp請求報文
       #echo-reply:型別8,icmp響應回覆報文

--list-protocols --列出在指定區域中允許通過的協議

  --add-protocol=           --在指定區域中新增允許通過的協議

  --remove-protocol=        --移除在指定區域中的某項協議

--get-target     --獲取區域中的預設target

  --set-target=              --設定區域的target

```

3)增刪改查操作

1、【查】看一個區域的配置資訊

bash (py3) [root@jumpserver-168-182-149 nginx]# firewall-cmd --list-all public (active) # 活動的區域 target: default # 預設啟動的區域 icmp-block-inversion: no # ICMP協議型別黑白名單開關(yes/no) interfaces: ens33 # 關聯的網絡卡介面 sources: 192.168.182.147 # 來源,可以是IP地址,也可以是mac地址 services: dhcpv6-client ssh # 列出允許通過這個防火牆的服務 ports: 2181/tcp 8888/tcp 80/tcp # 列出允許通過這個防火牆的目標埠。(即 需要對外開放的埠) protocols: # 協議值可以是一個協議 ID 數字,或者一個協議名 masquerade: no # 表示這個區域是否允許 IP 偽裝。如果允許,它將允許 IP 轉發,它可以讓你的計算機作為一個路由器 forward-ports: # 列出轉發的埠 source-ports: # 允許的來源埠 icmp-blocks: # 可新增ICMP型別,當icmp-block-inversion為no時,這些ICMP型別被拒絕;當icmp-block-inversion為yes時,這些ICMP型別被允許 rich rules: # 富規則,即更細緻、更詳細的防火牆規則策略,它的優先順序在所有的防火牆策略中也是最高的 rule family="ipv4" source address="192.168.250.0/24" accept 常用的檢視命令

```bash

查詢預設區域配置資訊

firewall-cmd --list-all

檢視區域配置資訊

firewall-cmd --list-all --zone=work

查詢所有埠

firewall-cmd --list-ports

查詢指定埠

firewall-cmd --zone=public --query-port=22/tcp

查詢放通IP段

firewall-cmd --list-sources

檢視預設區域

firewall-cmd --get-default-zone

檢視所有可以使用的區域

firewall-cmd --get-zones

檢視活躍的區域

firewall-cmd --get-active-zones

檢視網絡卡繫結在了哪個區域

firewall-cmd --get-zone-of-interface=[IFACE]

檢視所有服務

firewall-cmd --get-services ```

2、【增】加規則

1、語法格式(埠):

bash firewall-cmd --zone=作用域 --add-port=埠數字/通訊協議 --永久生效 【示例】

bash firewall-cmd --zone=public --add-port=2181/tcp --permanent ##開啟2181埠,開放當前埠,他會用TCP協議,需要重新載入/重啟才永久生效 firewall-cmd --reload 在這裡插入圖片描述

```bash

開啟2888埠,使用預設zone,他會用UDP協議,立馬生效,只是臨時的,重啟服務/重啟機器將失效

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

檢視

firewall-cmd --list-ports
``` 在這裡插入圖片描述 2、語法格式(源IP):

bash firewall-cmd --zone=作用域 --add-source=埠數字/通訊協議 --永久生效 【示例】

```bash

放通ip地址

firewall-cmd --add-source=192.168.182.0/24 --zone=public

檢視

firewall-cmd --list-sources

放通某個ip/ip段的某個埠

firewall-cmd --zone=public --add-source=192.168.182.147 --permanent firewall-cmd --zone=public --add-port=8888/tcp --permanent firewall-cmd --reload ``` 在這裡插入圖片描述

3、【刪】除規則

1、語法格式(埠):

bash firewall-cmd --zone=作用域 --remove-port=埠數字/通訊協議 【示例】

bash firewall-cmd --zone=public --remove-port=2181/tcp 在這裡插入圖片描述 2、語法格式(源IP):

bash firewall-cmd --zone=作用域 --remove-source=埠數字/通訊協議 【示例】

bash firewall-cmd --zone=public --remove-source=192.168.182.0/24 在這裡插入圖片描述

4、【改】正規則

1、修改當前的預設區為work

```bash firewall-cmd --set-default-zone=work

檢視

firewall-cmd --get-default-zone=work ``` 在這裡插入圖片描述

五、直接規則

```bash Direct Options

--direct --指定將要使用直接規則

--get-all-chains --獲取所有的鏈

--get-chains {ipv4|ipv6|eb} --獲取表中的鏈

--add-chain {ipv4|ipv6|eb}

--新增鏈到表中(自定義的)

--remove-chain {ipv4|ipv6|eb}

--移除表中的某條鏈

--query-chain {ipv4|ipv6|eb}

--返回鏈是否已被新增到表

--get-all-rules --獲取所有的策略規則

--get-rules {ipv4|ipv6|eb}

--獲取指定表中指定鏈中的規則

--add-rule {ipv4|ipv6|eb}

... --在指定表中的指定鏈新增規則

--remove-rule {ipv4|ipv6|eb}

... --優先從指定表中的指定鏈刪除規則條目

--remove-rules {ipv4|ipv6|eb}

--從表中刪除規則條目

--query-rule {ipv4|ipv6|eb}

... --返回是否優先的規則已被新增到連結串列中

--passthrough {ipv4|ipv6|eb} ... --直接傳遞iptables的命令

--get-all-passthroughs --獲取所有直接傳遞的規則

--get-passthroughs {ipv4|ipv6|eb} ... --獲取跟蹤直通規則

--add-passthrough {ipv4|ipv6|eb} ... --新增一個直接規則

--remove-passthrough {ipv4|ipv6|eb} ... --移除一個直接規則

--query-passthrough {ipv4|ipv6|eb} ... --查詢直接規則是否新增 ```

【溫馨提示】除非將直接規則顯式插入到由 fircwa1ld管理的區域, 否則將首先解析直接規則, 然後才會解析任何fircwalld規則,即直接規則優先於firewalld規則。直接規則主要用於使服務和應用程式能夠增加規則。傳遞的引數 與 iptables, ip6tables 以及 ebtables 一致。

1)增加規則

新增直接【鏈/規則】格式:

```bash firewall-cmd --direct --add-chain { ipv4 | ipv6 | eb }

[自定義連結串列名]

firewall-cmd --direct --add-rule { ipv4 | ipv6 | eb }

```

【溫馨提示】priority值越小,優先順序越高

【示例】

```bash

所有來自192.168.182.0/24網路IP,單個IP每分鐘最高連線併發是1,超過併發的連線都丟棄# 新增鏈

firewall-cmd --direct --permanent --add-chain ipv4 raw blacklist01firewall-cmd --reload# 檢視連結串列firewall-cmd --direct --get-all-chains# 沒reload就得加上--permanent,如果沒加--permanent就不用了firewall-cmd --direct --permanent --get-all-chains# 新增規則,使用自動定義鏈PREROUTING,使用自定義處理動作到新鏈blacklist01,0代表優先順序,越小優先順序越高 firewall-cmd --direct --permanent --add-rule ipv4 raw PREROUTING 0 -s 192.168.182.149 -j blacklist01firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist01 0 -j DROP=》等同於下面一句# 使用系統鏈PEROUTING, 使用系統DROP處理動作firewall-cmd --direct --permanent --add-rule ipv4 raw PREROUTING 0 -s 192.168.182.149 -j DROPfirewall-cmd --reload# 單個IP每分鐘最高連線併發是1,然後記入日誌到檔案/var/log/messages,使用自定義鏈,系統處理動作LOGfirewall-cmd --direct --permanent --add-rule ipv4 raw blacklist01 0 -m limit --limit 1/min -j LOG --log-prefix "blacklisted"firewall-cmd --reload# 檢視規則,跟檢視鏈一樣,如果加了--permanent,沒reload就得加上--permanet才能檢視到firewall-cmd --direct --permanent --get-all-rules ```

【溫馨提示】這裡-j就是iptables裡面的處理動作(ACCEPT,DROP,REJECT,SNAT,MASQUERADE,DNAT,REDIRECT,LOG);當然也可以接自定義的動作,例如上例所示。

2)刪除規則

新增刪除【鏈/規則】格式:

```bash firewall-cmd --direct --remove-chain { ipv4 | ipv6 | eb }

[自定義連結串列名]

firewall-cmd --direct --remove-rule { ipv4 | ipv6 | eb }

``` 【示例】

```bash firewall-cmd --direct --permanent --remove-chain ipv4 raw blacklist01

firewall-cmd --direct --permanent --add-rule ipv4 raw PREROUTING 0 -s 192.168.182.149 -j blacklist01 firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist01 0 -j DROP firewall-cmd --reload

firewall-cmd --direct --permanent --remove-rule ipv4 raw PREROUTING 0 -s 192.168.182.149 -j DROP firewall-cmd --reload ```

六、Firewalld防火牆富規則

富規則一般為了精確控制,用得比較多,所以這裡將重點講解

1)富規則常用的options

```bash firewall-cmd

--list-rich-rules --列出富規則

--add-rich-rule=    --使用富規則語言新增富規則

--remove-rich-rule=     --移除富規則

--query-rich-rule= --查詢某條富規則是否存在

--list-rich-rules --列出指定區域中的所有富規則

--list-all 和 --list-all-zones --也能列出存在的富規則 ```

2)富規則language語法

規則的幾乎每個單一元素都能夠以option=value形式來採用附加引數,參考firewalld.richlanguage

```bash rule

[source]

[destination]

service|port|protocol|icmp-block|masquerade|forward-port

[log]

[audit]

[accept|reject|drop] ``` 格式:

```bash rule [family="ipv4|ipv6"]

source address="address[/mask]" [invert="True"]

destination address="address[/mask]" invert="True"

service name="service name"

port port="port value" protocol="tcp|udp"

protocol value="protocol value"

forward-port port="port value" protocol="tcp|udp" to-port="port value

" to-addr="address"

log [prefix="prefix text"] [level="log level"] [limit value="rate/duration"]

accept | reject [type="reject type"] | drop ```

3)一些常用配置規則

1、規則排序

一旦向某個區域(一般是指防火牆)中添加了多個規則, 規則的排序便會在很大程度上影響防火牆的行為。對於所有區域, 區域內規則的基本排序是相同的。

  • 為該區域設定的任何埠轉發和偽裝規則。
  • 為該區域設定的任何記錄規則。
  • 為該區域設定的任何允許規則。
  • 為該區域設定的任何拒絕規則。

2、測試和除錯

```bash 為了便於測試和除錯 幾乎所有規則都可以與超時一起新增到執行時配置。

當包含超時的規則到防火牆時,計時器便針對該規則開始倒計時。

一旦規則的計時器達到零秒,便從執行時配置中刪除該規則。

通過在啟用規則的firewall-cmd的結尾新增--timeout=即可向執行時規則中新增超時。 ```

3、使用富規則進行日誌記錄

```bash 除錯或監控防火牆時,記錄已接受或已拒絕的連線很有用。

firewalld可以通過兩種方法來實現此目的記錄到syslog, 或者將訊息傳送到由auditd管理的核心audit子系統。 ``` 使用富規則記錄到syslog的基本語法為:

```bash log [prefix="" [level=] [limit value=""]

其中:

可以是emerg 、 alert 、 crit 、 error 、 warning 、 notice 、 info或debug之一。

" 可以是s(表示秒)、m(表示分鐘)、h(表示小時)或d(表示天)之一。

例如:limit value=3/m會將日誌訊息限制為每分鐘最多三條。

limit value = 3/m 這裡是有BUG 的,常常時間控制會不精準。 ```

4、批量加埠

```bash

用這樣的形式

port port=4000-5234

firewall-cmd --permanent --zone=vnc --add-rich-rule='rule family=ipv4 source address=192.168.182.0/24 port port=7900-7905 protocol=tcp accept' ``` 用於記錄到審計子系統的基本語法為:

bash audit [limit value="<RATE/DURATION>"]

【溫馨提示】速率限制的配置方式與syslog記錄相同。

使用富規則進行記錄的某些示例:

```bash

1.接受從work區域到SSH的新連線, 以notice級別且每分鐘最多三條訊息的方式將新連線記錄 到syslog。

firewall-cmd --permanent --zone=work --add-rich-rule='rule service name="ssh" log prefix="ssh" level="notice" limit va1ue="3/m" accept

2.在接下來五分鐘內, 將拒絕從預設區域中子網2001:db8::/64到DNS的新IPv6連線,

並且拒絕的連線將記錄到audit系統,且每小時最多一條訊息。

firewall-crud --add-rich-rule='rule family=ipv6 source address="2001:db8::/64" service name=" dns" audit limit va1ue="1/h" reject'--timeout=300 ```

5、示例

```bash firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.11/32 reject'

firewall-cmd --permanent --zone=public --add-rich-rule='rule service name=ftp limit value=1/m accept'

firewall-cmd --permanent --zone=public --add-rich-rule='rule protocol value=esp drop'

firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=172.17.10.0/24 service name=ssh reject'

firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 port port=7900-7905 protocol=tcp accept' ``` 針對ssh 連結記錄至日誌中,每分鐘3次

bash firewall-cmd --permanent --zone=work --add-rich-rule='rule service name=ssh log prefix="ssh " level=notice limit value="3/m" accept' 用於除錯,規則在300秒後失效,防止規則設定錯誤導致網路連線斷開

bash firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.0.11/32 service name=ssh reject' --timeout=300 新增富規則,只允許172.25.0.10/32訪問,並且記錄日誌,日誌級別為notice,日誌字首為"NEW HTTP ",限制每秒最多3個併發 ,要求持久化生效

bash firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=172.25.0.10/32 service name=http log level=notice prefix="NEW HTTP " limit value="3/s" accept' firewall-cmd --reload

七、firewalld的NAT和埠轉發

1)網路地址轉換(NAT)

```bash firewalld支援兩種型別的網路地址轉換(NAT) 偽裝和埠轉發。可以在基本級別使用常規

frewall-cmd規則來同時配置這兩者,更高階的轉發配置可以使用富規則來完成。

這兩種形式的NAT會在傳送包之前修改包的某些方面如源或目標。 ```

2)偽裝(偽裝只能和ipv4一起用,ipv6不行)

偽裝是一種形式的網路地址轉換(NAT)

3)配置偽裝

要使用常規的firewall-cmd命令為區域配置偽裝,使用下列語法:

bash firewall-cmd --permanent --zone=<ZONE> --add-masquerade

這將偽裝滿足以下條件的任何包從該區域的源(介面及子網)中定義的客戶端傳送到防火牆且未定址到防火牆自身的包,即該區域源的資料包的目標IP不是防火牆自身的IP,都將對映成防火牆的IP。

要在更大程度上控制要進行偽裝的客戶端,還可以使用富規則。

bash firewall-cmd --permanent --zone=<ZONE> --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 masquerade'

4)埠轉發

```bash 另一種形式的NAT是埠轉發。

通過埠轉發指向單個埠的流量將轉發到相同計算機上的不同埠或者轉發到不同計算機上的埠。

此機制通常用於將某個伺服器隱藏在另一個計算機後面,或者用於在備用埠上提供對服務的訪問許可權。

常見配置是將埠從防火牆計算機轉發到已在防火牆後面偽裝的計算機,即這種通過目標埠轉發的方式需要開啟偽裝(masquerade) ``` 使用常規fircwall-cmd命令配置埠轉發,可以使用firewalld提供的埠轉發語法:

bash firewall-cmd --permanent --zone=<ZONE> --add-forward-port=port=<PORTNUMBER>:proto=<PROTOCOL>[:toport=<PORTNUMBER>][:toaddr=<IPADDR>] toport=和toaddr 兩部分均可選,但需要至少指定這兩者之一 。

```bash

例如, 對於來自public區域的客戶端,以下命令會將防火牆上通過埠22/TCP傳入的連線轉發到IP地址為192.168.182.147的計算機上的埠22/TCP;待驗證

firewall-cmd --permanent --zone=public --add-forward-port=port=22:proto=tcp:toport=22:toaddr=192.168.182.147 ``` 要在更大程度上控制埠轉發規則,可以將以下語法與富規則配合使用來實現埠轉發,這也是我們推薦使用的方式

bash forward-port port=<PORTNUM> protocol=tcp|udp [to-port=<PORTNUM>] [to-addr=<ADDRESS>] 以下示例使用富規則將來自work區域中192.168.182.0/24且傳入到埠80/TCP的流星轉發到防火牆計算機自身上面的和埠8080/TCP:

bash firewall-cmd --permanent --zone=work --add-rich-rule='rule family=ipv4 source address=192.168.182.0/24 forward-port port=80 protocol=tcp to-port=8080' 其實這裡是指傳統的目標地址對映,實現外網訪問內網資源

bash firewall-cmd --zone=external --add-masquerade firewall-cmd --permanent --zone=public --add-forward-port=port=513:proto=tcp:toport=132:toaddr=192.168.182.149 firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.182.0/24 forward-port port=80 protocol=tcp to-port=8080'

八、firewalld自定義區域和服務

1) 自定義的區域

參照/lib/firewalld/zones/public.xml檔案,在/lib/firewalld/zones/下面新建你需要的區域名以.xml結尾,內容格式參照public.xmltrusted.xml等檔案即可。

```bash

Internal.xml

Internal

For use on internal networks. You mostly trust the other computers on the networks

to not harm your computer. Only selected incoming connections are accepted.

```

2)自定義服務

自定義服務可以讓防火牆配置更為簡便,能夠直接使用服務名來進行策略配置

參照/usr/lib/firewalld/services/ssh.xml,在/usr/lib/firewalld/services/下面新建你需要的服務名以.xml結尾,內容格式參照ssh.xmlsamba.xml檔案中的內容即可。

```bash

samba.xml

Samba

This option allows you to access and participate in Windows file and printer sharin

g networks. You need the samba package installed for this option to be useful.

```

九、Firewalld應急命令(一鍵斷網)

```bash

關閉應急模式

firewall-cmd --panic-off

開啟應急模式阻斷所有網路連線

firewall-cmd --panic-on

檢視應急模式的狀態

firewall-cmd --query-panic ```