目錄
一:Firewalld防火墻的概述
(1)firewalld簡介
(2)firewalld&iptables的關系
(3)firewalld與iptables service的區別
1. ?規則管理方式?
2. ?默認策略與設計邏輯?
3. ?配置文件與持久化?
4. ?適用場景與兼容性?
5. ?底層實現與擴展性?
二:Firewalld網絡區域
三:Firewalld防火墻firewall——cmd命令設置
1、獲取預定義信息
2、區域管理
3、服務管理
4、端口管理
5、兩種配置模式
一:Firewalld防火墻的概述
(1)firewalld簡介
? ? 它的主要作用為包過濾機制提供匹配規則(或策略),通過各種不同的規則告訴net filter對來自指定源、前往指定目的或具有某些協議特征的數據包采取何種處理方式為了更加方便地組織和管理防火墻。
? ? firewalld提供了支持網站區域所定義的網絡鏈接以及接口安全等級的動態防火墻管理工具,其設計以?區域(Zone)?和?服務(Service)?為核心,簡化了傳統防火墻規則的配置流程。并且擁有兩種配置模式:短暫性配置與永久性配置,支持服務或應用程序直接添加防火墻規則接口。
(2)firewalld&iptables的關系
? ? firewalld自身并不具備防火墻的功能,而是和iptables一樣需要通過內核的net filter來實現。他們的作用都是用于維護規則,而真正使用規則干活的是內核的net filter,然而他們的結構以及使用方法并不相同。
? ? 系統提供了圖形化的配置工具firewall-config、system-config-firewall,提供命令行客戶端firewall-cmd,用于配置firewalld永久性或非永久性運行時間的改變:依次用iptables工具與執行數據包篩選的內核中的Netfilter通信。邏輯如下:
? ? iptables服務和firewalld都是通過iptables命令與內核netfilter進行交互的。在Euler系統中,我們仍然可以使用iptables命令來管理我們的防火墻。唯一不同的是當我們重啟服務器或重啟firewalld時,iptables命令管理的規則不會自動加載,反而會被firewalld的規則代替。?
(3)firewalld與iptables service的區別
1. ?規則管理方式?
- ?Firewalld?
- 采用動態規則管理,支持運行時修改單條規則,無需重啟服務即可生效(臨時規則),永久規則需配合?
--permanent
?參數保存?。 - 規則更新時不會中斷現有網絡連接?。
- 采用動態規則管理,支持運行時修改單條規則,無需重啟服務即可生效(臨時規則),永久規則需配合?
- ?iptables?
- 規則修改后需全量刷新(
iptables-restore
?或?service iptables restart
),導致現有連接可能中斷?。 - 所有規則通過鏈式結構(INPUT/OUTPUT/FORWARD 等)管理,需手動維護規則順序?。
- 規則修改后需全量刷新(
2. ?默認策略與設計邏輯?
- ?Firewalld?
- 默認拒絕所有流量,需顯式開放服務或端口(如 HTTP、SSH)?。
- 以?區域(Zone)?為核心,根據網絡接口或源 IP 自動匹配規則(如?
public
、trusted
),適用于多網絡環境切換?。
- ?iptables?
- 默認允許所有流量,需顯式拒絕不需要的訪問?。
- 基于?接口?和?鏈式規則?,直接控制具體端口或協議,適合精細化但復雜度高的場景?。
3. ?配置文件與持久化?
- ?Firewalld?
- 配置文件以 XML 格式存儲于?
/etc/firewalld/
,支持自定義服務模板和區域規則?68。 - 臨時規則與永久規則分離,需通過?
--reload
?同步配置?。
- 配置文件以 XML 格式存儲于?
- ?iptables?
- 規則保存于文本文件?
/etc/sysconfig/iptables
,直接編輯后需手動加載?。 - 所有規則修改需顯式保存(
service iptables save
)才能持久化?。
- 規則保存于文本文件?
4. ?適用場景與兼容性?
- ?Firewalld?
- 適合動態網絡環境(如頻繁切換信任區域)及追求配置便捷性的場景?。
- 默認集成于 CentOS/RHEL 7+ 等現代 Linux 發行版?。
- ?iptables?
- 兼容老舊系統(如 CentOS 6 及更早版本),適合需要復雜規則(如深度包檢測、自定義鏈)的場景?。
- 與 Firewalld 沖突,二者不可同時啟用?。
5. ?底層實現與擴展性?
- ?共同點?
- 均依賴內核的 Netfilter 框架,實際流量控制由內核模塊完成?。
- ?差異點?
- Firewalld 可通過直接接口(Direct Interface)調用 iptables 語法添加自定義規則?。
- iptables 提供更底層的控制,支持 NAT、流量整形等高級功能?。
二:Firewalld網絡區域
? ? firewalld將所有的網絡數據流量劃分為多個區域,從而簡化防火墻管理。根據數據包的源IP地址或傳入網絡接口等條件,將數據流量傳入相應區域的防火墻規則。對于進入系統的數據包,首先檢查的就是其源地址。邏輯如下:
- 若源地址關聯到特定的區域,則執行該區域所制定的規則。
- 若源地址未關聯到特定的區域,則使用傳入網絡接口的區域并執行該區域所指定的規則。
- 若網絡接口未關聯到特定的區域,則使用默認區域并執行該區域所制定的規則。
? ? 默認區域不是單獨的區域,而是指向系統上定義的某個其他區域。默認情況下,默認區域是public,但是系統管理員可以更改默認區域。以上匹配規則,按照先后順序,第一個匹配的規則勝出。
? ? 在每個區域中都可以配置其要打開或者關閉的一系列服務或端口,firewalld的每個預定義的區域都設置了默認打開的服務。預定義區域說明如下:
區域 | 默認策略規則 |
---|---|
trusted | 允許所有的數據包 |
home | 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh、mdns、ipp-client、amba-clent與dhcpv6-client服務相關,則允許流量 |
internal | 拒絕流入的流量,除非與流出的流量數相關;而如果流量與ssh、ipp-client與dhcpv6-client服務相關,則允許流量 |
work | 拒絕流入的流量。除非與流出的流量相關;而如果流量與ssh、dhcpv6-client服務相關,則允許流量 |
public | 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh、dhcpv6-client服務相關,則允許流量 |
external | 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh服務相關,則允許流量 |
dmz | 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh服務相關,則允許流量 |
block | 拒絕流入的流量,除非與流出的流量相關 |
drop | 拒絕流入的流量,除非與流出的流量相關 |
三:Firewalld防火墻firewall——cmd命令設置
1、獲取預定義信息
? ? firewal1-cmd 預定義信息主要包括三種:可用的區域、可用的服務以及可用的 ICMP 阻塞類型,具體的查看命令如下所示。
?
[root@localhost ~]# firewall-cmd --get-zones
work drop internal external trusted home dmz public block
[root@localhost ~]# firewall-cmd --get-service
RH-Satellite-6 amanda-client amanda-k5-client baculabacula-client cephceph-mondhcp
dhcpv6 dhcpv6-client dnsdocker-registry dropbox-lansyncfreeipa-ldap
... ... //省略部分內容
transmission-clientvdsmvnc-serverwbem-https xmpp-bosh xmpp-client xmpp-local
xmpp-server
[root@localhost ~]# firewall-cmd --get-icmptypes
... ... //省略部分內容
timestamp-request
? ? firewall-cmd --get-icmptypes 命令的執行結果中各種阻塞類型的含義分別如下:
阻塞類型 含義 destination-unreachable 目的地址不可達 echo-reply 應答回應(pong) parameter-problem 參數問題 redirect 重新定向 router-advertisement 路由器通告 router-solicitation 路由器征尋 source-quench 源端抑制 time-exceeded 超時 timestamp-reply 時間戳應答回應 timestamp-request 時間戳請求
2、區域管理
? ? 使用firewall-cmd命令可以實現獲取和管理區域,為指定區域綁定網絡接口等功能。區域管理選項說明如下:?
選項 | 說明 |
---|---|
--get-default-zone | 顯示網絡連接或接口的默認區域 |
--set-default-zone=<zone> | 設置網絡連接或接口的默認區域 |
--get-active-zones | 顯示已激活的所有區域 |
--get-zone-of-interface=<interface> | 顯示指定接口綁定的區域 |
--zone=<zone> --add-interface=<interface> | 為指定接口綁定區域 |
--zone=<zone> --change-interface=<interface> | 為指定的區域更改綁定的網絡接口 |
--zone=<zone> --remove-interface=<interface> | 為指定的區域刪除綁定的網絡接口 |
--list-all-zones | 顯示所有區域及其規則 |
[--zone=<zone>] --list-all | 顯示所有指定區域的所有規則 |
具體操作如下:
(1)顯示當前系統中的默認區域.
[root@localhost ~]# firewall-cmd --get-default-zone
public
(2)顯示默認區域的所有規則。
?
[root@localhost ]# firewall-cmd -list-all
public(active)target: default
icmp-block-inversion:no
interfaces:ens160
sources:
services:dhcpv6-client ssh
ports:
protocols:
masquerade:no
forward-ports:
sourceports:
icmp-blocks:rich rules:
(3)顯示網絡接口 ens160 對應區域。
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens160
public
(4)將網絡接口 ens160 對應區域更改為 internal 區域,
[root@localhost ~]# firewall-cmd --zone=internal --change-interface=ens160
The interface is under control of NetworkManager, setting zone to 'internal'. success
[root@localhost ~]# firewall-cmd --zone=internal --list-interfaces
ens160
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens160
internal
(5)顯示所有激活區域.
[root@localhost ~]# firewall-cmd--get-active-zones
internal
interfaces:ens160?
3、服務管理
? ? 為了方便管理,firewalld 預先定義了很多服務,存放在 /usr/lib/firewalld/services/ 目錄中,服務通過單個的 XML配置文件來指定。這些配置文件則按以下格式命名:service-name.xml,每個文件對應一項具體的網絡服務,如 ssh 服務等。service 配置具有以下優點:
- 通過服務名字來管理規則更加人性化;
- 通過服務來組織端口分組的模式更加高效。如果一個服務使用了若干個網絡端口,則服務的配置文件就相當于提供了到這些端口的規則管理的批量操作快捷方式。
? ? 下列為firewall-cmd命令區域中服務管理的常用選項:
參數 | 作用 |
---|---|
--get-default-zone | 查訪默認的區域名稱 |
--set-default-zone=<區域名稱> | 設置默認的區域,使其永久生效 |
--get-zones | 顯示可以的區域 |
--get-services | 顯示預定義的服務 |
--get-active-zones | 顯示當前正在使用的區域、來源地址和網卡名稱 |
--add-source= | 將源自此IP或子網的流量導向指定的區域 |
--remove-source= | 不再將源自此IP或子網的流量導向這個區域 |
--add-interface=<網絡名稱> | 將源自該網卡的所有流量都導向某個指定區域 |
--change-interface=<網卡名稱> | 將某個網卡與區域進行關聯 |
--list-all | 顯示當前區域的網卡配置參數、資源、端口以及服務等信息 |
--list-all-zones | 顯示所有區域的網卡配置參數、資源】端口以及服務等信息 |
--add-service=<服務名> | 設置默認區域允許該服務的流量 |
--add-port=<端口號/協議> | 設置默認區域允許該端口的流量 |
--remove-service=<服務號> | 設置默認區域不再允許該服務的流量 |
--remove-port=<端口號/協議> | 設置默認區域不再允許該端口的流量 |
--reload | 讓“永久生效”的配置規則立即生效,并覆蓋當前的配置規則 |
--panic-on | 開啟應急狀態模式 |
--panic-off | 關閉應急狀態模式 |
(1)為默認區域設置允許訪問的服務。
[root@localhost ~]# firewall-cmd --list-services //顯示默認區域內允許訪問的所有服務
dhcpv6-clientssh
[root@localhost ~]# firewall-cmd --add-service=http //設置默認區域允許訪問 http 服務
success
[root@localhost ~]# firewall-cmd --add-service=https //設置默認區域允許訪間 https 服務
success
[root@localhost ~]# firewall-cmd --list-services
dhcpv6-client ssh http https
?(2)為 internal 區域設置允許訪問的服務,
[root@localhost ~]# firewall-cmd --zone=internal --add-service=mysql //設置 internal 區域允許訪問 mysq1 服務
success
[root@localhost~]# firewall-cmd --zone=internal--remove-service=samba-client //設置 internal 區域不允許訪問 samba-client 服務
success
[root@localhost ~]# firewall-cmd --zone=internal --list-services //顯示 internal 區域內允許訪問的所有服務
ssh mdns dhcpv6-client mysql
4、端口管理
? ? 在進行服務配置時,預定義的網絡服務可以使用服務名配置,服務所涉及的端口就會自動打開。但是,對于非預定義的服務只能手動為指定的區域添加端口。例如,執行以下操作即可實現在 internal 區域打開 443/TCP 端口。
[root@localhost ~]# firewall-cmd --zone=internal--add-port=443/tcp
success
? ? 若想實現在 internal 區域禁止 443/TCP 端口訪問,可執行以下命令。
root@localhost ~]# firewall-cmd --zone=internal --remove-port=443/tcp
success
5、兩種配置模式
? ? 前面提到 firewall-cmd 命令工具有兩種配置模式:運行時模式表示當前內存中運行的防火墻配置,在系統或 firewalld 服務重啟、停止時配置將失效;永久模式表示重啟防火墻或重新加載防火墻時的規則配置,是永久存儲在配置文件中的。
firewa11-cmd 命令工具與配置模式相關的選項有三個:
- --reload:重新加載防火墻規則并保持狀態信息,即將永久配置應用為運行時配置。
- --permanent:帶有此選項的命令用于設置永久性規則,這些規則只有在重新啟動 firewalld 或重新加載防火墻規則時才會生效:若不帶有此選項,表示用于設置運行時規則。
- --runtime-to-permanent:將當前的運行時配置寫入規則配置文件中,使之成為永久性配置。