一、firewalld防火墻有幾個區域,每個區域有什么作用,每個區域添加或刪除規則有什么影響?
firewalld 是 Linux 系統中動態管理防火墻的工具,其核心功能是通過 區域(Zones) 和 服務(Services) 來控制網絡流量的訪問權限。
Firewalld使用區域來管理不同的網絡接口和流量。每個區域有不同的規則集,根據接口的信任級別分配不同的區域。常見的區域包括public、trusted、internal、external、dmz、work、home等。每個區域有不同的預定義規則,適用于不同的網絡環境。public區域通常用于公共網絡,信任度最低,只允許必要的服務;而trusted區域信任所有流量。
在某個區域中添加服務或端口會允許相應的流量,而刪除則會阻止。同時,需要提到區域之間的優先級和規則覆蓋的問題,比如一個接口只能屬于一個區域,所以規則的改變會影響該接口的流量。再比如,將公共接口放在public區域,并限制SSH訪問,而內部網絡可能使用home或work區域,允許更多服務。
1、firewalld 的默認區域
firewalld 默認提供 9 個區域,每個區域對應不同的網絡信任級別和用途:
區域名稱 信任級別 適用場景 默認允許的服務/端口
public 低 公共網絡(如互聯網) SSH、DHCPv6 Client、dhcpv6(僅限 IPv6)
trusted 最高 信任所有流量(內部網絡或物理直連設備) 所有流量
internal 中 內部網絡(如企業內網) SSH、HTTP、HTTPS、Samba
external 中 對外暴露的網關或路由器(NAT 轉發) SSH、HTTP、HTTPS
dmz 低 隔離區(對外公開的服務器,如 Web 服務器) SSH、HTTP、HTTPS
work 中 工作網絡(同事或合作伙伴) SSH、HTTP、HTTPS、CUPS(打印服務)
home 中 家庭網絡 SSH、HTTP、HTTPS、Samba、FTP
block 無 阻止所有傳入連接 無
drop 無 丟棄所有傳入連接(無響應) 無
2、每個區域的作用
(1) public(公共網絡)
用途:默認區域,用于面向互聯網的接口(如服務器公網網卡)。
特點:僅允許預定義的少量服務(如 SSH、DHCPv6)。
典型場景:Web 服務器、數據庫服務器的公網接口。
(2)trusted(信任區域)
用途:信任所有流量,通常用于內部網絡或物理直連設備。
特點:允許所有入站和出站流量。
典型場景:內部實驗室網絡、跳板機。
(3)internal(內部網絡)
用途:企業內網或家庭網絡,信任部分流量。
特點:允許 SSH、HTTP/HTTPS、Samba 等服務。
典型場景:企業內部服務器的私有接口。
(4)external(外部網絡)
用途:對外暴露的網關或路由器(如 NAT 轉發)。
特點:允許 SSH、HTTP/HTTPS,通常用于 NAT 和端口轉發。
典型場景:家庭路由器的 WAN 接口。
(5)dmz(隔離區)
用途:對外公開的服務器(如 Web 服務器),但與其他內部網絡隔離。
特點:僅允許 SSH、HTTP/HTTPS。
典型場景:DMZ 中的 Web 服務器公網接口。
(6)work(工作網絡)
用途:同事或合作伙伴的網絡,信任程度中等。
特點:允許 SSH、HTTP/HTTPS、CUPS(打印服務)。
典型場景:辦公室內部網絡。
(7)home(家庭網絡)
用途:家庭網絡,信任程度較高。
特點:允許 SSH、HTTP/HTTPS、Samba、FTP。
典型場景:家庭NAS或家庭服務器。
(8)block/drop(阻斷/丟棄)
用途:完全禁止網絡訪問(用于隔離或調試)。
特點:無服務或端口開放,直接阻斷所有流量。
典型場景:臨時禁用網絡接口。
3、區域規則的影響
1. 添加規則
允許服務/端口:
例如,在 public 區域添加 http 服務,會開放 TCP 80 端口。
firewall-cmd --zone=public --add-service=http --permanent
影響:公網接口的 HTTP 流量被允許,可能增加攻擊面。
刪除規則:
例如,從 public 區域刪除 ssh 服務:
firewall-cmd --zone=public --remove-service=ssh --permanent
影響:公網接口的 SSH 連接被拒絕,需通過其他區域或端口訪問。
2. 區域切換
接口綁定區域:
例如,將網卡 eth0 分配到 dmz 區域:
firewall-cmd --zone=dmz --change-interface=eth0
影響:eth0 接口的流量將遵循 dmz 區域的規則(僅允許 SSH/HTTP/HTTPS)。
3. 規則優先級
區域優先級:
firewalld 按區域優先級(從高到低)處理流量,高優先級區域的規則覆蓋低優先級區域。
例如,若網卡同時屬于 public 和 trusted 區域(通常不會),以更高優先級的規則為準。
4.操作建議及驗證規則
默認區域選擇:
服務器公網接口:使用 public 區域,僅開放必要服務(如 SSH、HTTP/HTTPS)。
內部網絡接口:使用 internal 或 trusted 區域,開放更多服務。
避免直接使用 trusted 或 drop:
trusted 區域無限制,可能暴露敏感服務。
drop 區域會直接斷開現有連接,需謹慎操作。
備份配置:
修改前導出當前配置:
firewall-cmd --runtime-to-permanent
cp /etc/firewalld/zones/*.xml /backup/
#驗證規則
查看當前區域規則:
firewall-cmd --zone=public --list-all
測試連接:
telnet <your-server-ip> 80 # 測試 HTTP 是否開放
總結
區域的核心作用:根據網絡信任級別,預定義允許的流量規則。
規則操作影響:
添加規則:開放流量,可能引入風險。
刪除規則:阻斷流量,可能導致服務不可用。
最佳實踐:
按網絡環境選擇合適的區域(如公網用 public,內網用 internal)。
通過富規則(Rich Rules)進一步細化訪問控制(如 IP 白名單)
二、文件 /etc/firewalld/zones/public.xml
firewalld使用區域(zones)和服務(services)來管理網絡流量。每個區域有不同的規則,服務則是預定義的規則集合,允許特定的端口和協議。
public.xml屬于public區域,通常是默認區域,適用于公共網絡,如互聯網.
直接刪除或注釋掉或者不包含該服務。無論哪種情況,結果都是public區域不再允許SSH流量。這會導致通過public區域(比如外部網絡接口)的SSH連接被拒絕,除非有其他規則允許,比如富規則或直接添加的端口。
但需要注意,如果在另一個區域(如internal)中啟用了ssh服務,并且接口被分配到該區域,則SSH仍然可用。
此外,如果手動打開了22端口(比如通過),即使沒有服務條目,端口仍然開放。因此,去掉服務條目并不一定完全禁止SSH,還要看其他配置。
服務條目和直接端口開放的差異。服務條目更易于管理,因為它們使用預定義的端口和協議,而手動添加端口需要更多維護。
如果用戶刪除了服務條目,但后續更新firewalld時重新生成配置,可能會恢復該條目,導致變化被覆蓋。
還需要考慮潛在的影響,比如如果用戶依賴public區域的SSH訪問,去掉服務條目會導致無法遠程連接,必須通過其他方式(如本地控制臺)恢復配置,建議謹慎操作,確保有備用訪問方式或者在修改前備份配置文件。
總結來說,涵蓋以下幾點:
作用:允許SSH流量通過public區域。
去掉后的影響:public區域不再允許SSH,可能導致遠程連接失敗。
其他可能允許SSH的情況:其他區域、手動端口開放等。
操作建議:備份配置,檢查其他區域設置,確認是否有替代規則。
操作建議
(1) 修改前確保有備用訪問方式
在刪除 <service name="ssh"/> 前,確保已配置其他訪問途徑(如密鑰認證、跳板機或本地控制臺)。
(2) 替代方案:限制而非完全禁用
僅允許特定 IP 訪問 SSH:
使用富規則替代直接刪除服務,例如:
<!-- 在 public.xml 中添加 -->
<rule family="ipv4">
<source address="192.168.1.0/24"/>
<service name="ssh"/>
</rule>
(3) 檢查其他區域配置
確認服務器的其他網絡接口是否分配到了其他區域(如 trusted),這些區域可能仍允許 SSH。
(4)驗證
查看當前生效的規則:
firewall-cmd --zone=public --list-all
輸出中若無 services: ssh,則表示 SSH 服務已從 public 區域移除。
測試 SSH 連接:
從外部設備嘗試連接,確認是否被拒絕。