1. 防火牆簡介
動態防火牆后台程序
firewalld
提供了一個 動態管理的防火牆,用以支持網絡
“zones” ,以分配對一個網絡及其相關鏈接和界面一定程度的信任。它具備對 IPv4
和 IPv6
防火牆設置的支持。它支持以太網橋,並有分離運行時間和永久性配置選擇。它還具備一個通向服務或者應用程序以直接增加防火牆規則的接口。
2. 了解防火牆
一個圖像化的配置工具,
firewall-config,用於配置
firewalld
:它依次用 iptables工具 與執行數據包篩選的內核中的 Netfilter 通信,
使用圖像化的
firewall-config 工具,按下 Super 鍵進入活動總覽,點擊
firewall
,然后按下 Enter。firewall-config 工具就出現了。您將被提示輸入管理員密碼。
firewall-config 工具里有一個標記為 Configuration 的下拉菜單,可以在
由
firewalld
提供的是動態的防火牆服務,而非靜態的。因為配置的改變可以隨時隨地立刻執行,不再需要保存或者執行這些改變。現行網絡連接的意外中斷不會發生,正如防火牆的所有部分都不需要重新下載。
提供命令行客戶端,
firewall-cmd,用於進行永久性或非永久性運行時間的改變,正如在
man firewall-cmd(1)
所解釋的一樣。永久性改變需要按照 firewalld(1)
手冊頁的解釋來進行。注意, firewall-cmd
命令可以由 root
用戶運行,也可以由管理員用戶——換言之, wheel
群體的成員運行。在后一種情況里,命令將通過 polkit 進程來授權。
firewalld
的配置儲存在
/usr/lib/firewalld/
和
/etc/firewalld/
里的各種 XML 文件里,這樣保持了這些文件被編輯、寫入、備份的極大的靈活性,使之可作為其他安裝的備份等等。
其他應用程序可以使用 D-bus 和
firewalld
通信。
3. 比較 system-config-firewall 以及 iptables 的 firewalld
firewalld
和
iptables service 之間最本質的不同是:
-
iptables service 在
/etc/sysconfig/iptables
中儲存配置,而firewalld
將配置儲存在/usr/lib/firewalld/
和/etc/firewalld/
中的各種 XML 文件里,。要注意,當firewalld
在Red Hat Enterprise Linux上安裝失敗時,/etc/sysconfig/iptables
文件就不存在。 -
使用 iptables service,每一個單獨更改意味着清除所有舊有的規則和從
/etc/sysconfig/iptables
里讀取所有新的規則,然而使用firewalld
卻不會再創建任何新的規則;僅僅運行規則中的不同之處。因此,firewalld
可以在運行時間內,改變設置而不丟失現行連接。
4. 對網絡區的理解
基於用戶對網絡中設備和交通所給與的信任程度,防火牆可以用來將網絡分割成不同的區域。
NetworkManager 通知
firewalld
一個接口歸屬某個區域。接口所分配的區域可以由 NetworkManager 改變,也可以通過能為您打開相關 NetworkManager 窗口的 firewall-config 工具進行。
在
/etc/firewalld/
的區域設定是一系列可以被快速執行到網絡接口的預設定。列表並簡要說明如下:
-
drop
(丟棄) -
任何接收的網絡數據包都被丟棄,沒有任何回復。僅能有發送出去的網絡連接。
-
block
(限制) -
任何接收的網絡連接都被
IPv4
的 icmp-host-prohibited 信息和IPv6
的 icmp6-adm-prohibited 信息所拒絕。 -
public
(公共) -
在公共區域內使用,不能相信網絡內的其他計算機不會對您的計算機造成危害,只能接收經過選取的連接。
-
external
(外部) -
特別是為路由器啟用了偽裝功能的外部網。您不能信任來自網絡的其他計算,不能相信它們不會對您的計算機造成危害,只能接收經過選擇的連接。
-
dmz
(非軍事區) -
用於您的非軍事區內的電腦,此區域內可公開訪問,可以有限地進入您的內部網絡,僅僅接收經過選擇的連接。
-
work
(工作) -
用於工作區。您可以基本相信網絡內的其他電腦不會危害您的電腦。僅僅接收經過選擇的連接。
-
home
(家庭) -
用於家庭網絡。您可以基本信任網絡內的其他計算機不會危害您的計算機。僅僅接收經過選擇的連接。
-
internal
(內部) -
用於內部網絡。您可以基本上信任網絡內的其他計算機不會威脅您的計算機。僅僅接受經過選擇的連接。
-
trusted
(信任) -
可接受所有的網絡連接。
指定其中一個區域為默認區域是可行的。當接口連接加入了
NetworkManager,它們就被分配為默認區域。安裝時,
firewalld
里的默認區域被設定為公共區域。
如果你的系統上沒有安裝使用命令安裝
安裝firewalld 防火牆
yum install firewalld
開啟服務
systemctl start firewalld.service
關閉防火牆
systemctl stop firewalld.service
開機自動啟動
systemctl enable firewalld.service
關閉開機制動啟動
systemctl disable firewalld.service
使用firewall-cmd 命令
查看狀態firewall-cmd --state //running 表示運行
獲取活動的區域
firewall-cmd --get-active-zones
這條命令將用以下格式輸出每個區域所含接口:
<zone1>: <interface1> <interface2> ..<zone2>: <interface3> ..
獲取所有支持的服務
firewall-cmd --get-service
在不改變狀態的條件下重新加載防火牆:
firewall-cmd --reload
啟用某個服務
firewall-cmd --zone=public --add-service=https //臨時 firewall-cmd --permanent --zone=public --add-service=https //永久
開啟某個端口
firewall-cmd --permanent --zone=public --add-port=8080-8081/tcp //永久 firewall-cmd --zone=public --add-port=8080-8081/tcp //臨時
刪除某個端口
firewall-cmd --permanent --zone=public --remove-port=8080-8081/tcp
使用命令加載設置firewall-cmd --reload
新增一個zone,如新增 k8s,新增的配置文件會存放在 /etc/firewalld/zones 目錄下
firewall-cmd --new-zone=k8s --permanent
將網絡接口eth0 添加到k8s zones,一個zone 可以添加多個網絡接口,但是一個網絡接口只能加入一個 zone(一定要加ssh服務)
firewall-cmd --zone=k8s --add-interface=eth0
如網絡接口 eth0 已經存在其他zone,首先查找eth0 接口當前在那個zone(假設查詢在 publich zone),然后將 eth0 接口從所在的 zone 刪除
firewall-cmd --get-zone-of-interface=eth0 firewall-cmd --zone=public --remove-interface=eth0
查看開啟的端口和服務
firewall-cmd --permanent --zone=public --list-services //服務空格隔開 例如 dhcpv6-client https ss firewall-cmd --permanent --zone=public --list-ports //端口空格隔開 例如 8080-8081/tcp 8388/tcp 80/tcp
設置某個ip 訪問某個服務
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.4/24" service name="http" accept"
ip 192.168.0.4/24 訪問 http
刪除上面設置的規則
firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4" source address="192.168.0.4/24" service name="http" accept"
檢查設定是否生效
iptables -L -n | grep 21 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 ctstate NEW
執行命令firewall-cmd --list-all
顯示:
public (default) interfaces: sources: services: dhcpv6-client ftp ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
查詢服務的啟動狀態
firewall-cmd --query-service ftp yes firewall-cmd --query-service ssh yes firewall-cmd --query-service samba no firewall-cmd --query-service http no
自行加入要開放的 Port
firewall-cmd --add-port=3128/tcp firewall-cmd --list-all public (default) interfaces: sources: services: dhcpv6-client ftp ssh ports: 3128/tcp masquerade: no forward-ports: icmp-blocks: rich rules: