firewalld 是由紅帽開發的防火牆守護進程。 默認使用 nftables 。據項目主頁:
- Firewalld 提供了一個動態管理的防火牆,支持使用區域來標識網絡連接/接口的可信等級。支持 IPv4、IPv6 防火牆設置、乙太網橋接和 IP sets。使用分離的運行時配置和永久設置。也提供了一個接口用來直接為服務或應用添加防火牆規則。
安裝
使用
你可以使用控制台工具 firewall-cmd
來控制防火牆規則。
firewall-offline-cmd
可在 firewalld 未運行時進行配置,與 firewall-cmd
類似。
隨 firewalld包 帶的 firewall-config
命令提供了一個圖形界面。
配置
使用 firewall-cmd
可用於運行時更改配置
- 使用
--permanent
參數。這 不會 更改運行時配置直至防火牆服務重啟,或使用--reload
重載規則。 - 持久化規則可見:#將運行時配置設為永久
區域
區域是一系列可用於指定接口的規則。
要查看當前區域及其應用的接口,使用:
# firewall-cmd --get-active-zones
一些命令(例如 add/remove port/service) 需要指定區域/
區域可以通過 --zone=zone_name
參數傳遞。
若未指定一個確切的區域,則使用默認區域。
區域信息
你可以列出所有區域的配置:
# firewall-cmd --list-all-zones
或指定一個區域
# firewall-cmd --info-zone=zone_name
更改接口區域
# firewall-cmd --zone=zone --change-interface=interface_name
此處 zone
是你想分配給接口的區域。
使用 NetworkManager 管理區域
NetworkManager 能夠為不同的連接分配不同的區域。例如:將一個家庭 WiFi 分配到 "home" 區域, 將工作室 WiFi 分配到 "work" 區域,並將剩餘 WiFi 分配到 "public" 區域。
列出連接配置:
$ nmcli connection show
將 "myssid" 設置為 "home" 區域:
$ nmcli connection modify myssid connection.zone home
默認區域
默認區域將會被自動應用到新的接口上,查詢默認區域使用:
# firewall-cmd --get-default-zone
更改默認區域使用:
# firewall-cmd --set-default-zone=zone
服務
服務是為特定守護程序預配置的規則。例如匹配 SSH 的 服務 {{ic|ssh} 在被分配到一個區域後會開放 22 埠。
使用下面的命令列出所有可用的服務:
# firewall-cmd --get-services
查詢特定服務的信息:
# firewall-cmd --info-service service_name
從區域中添加或移除服務
添加一個服務到區域:
# firewall-cmd --zone=zone_name --add-service service_name
移除服務:
# firewall-cmd --zone=zone_name --remove-service service_name
埠
可以直接在指定區域上開放埠:
# firewall-cmd --zone=zone_name --add-port port_num/protocol
此處 protocol
應為 tcp
或 udp
之一。
關閉埠使用帶有相同的埠號和協議的 --remove-port
選項。
NAT 地址偽裝
此命令與 iptables -t nat -A POSTROUTING -j MASQUERADE
具有相同的效果:
# firewall-cmd --zone=public --add-masquerade
埠轉發
如果你在路由器上配置了 firewalld,而且還如上開啟了 NAT 地址偽裝,則通過 firewalld 設置埠轉發很簡單:
# firewall-cmd --zone=public --add-forward-port=port=12345:proto=tcp:toport=22:toaddr=10.20.30.40
這會將外部埠上的 12345/tcp 埠轉發到內部網絡 10.20.30.40 的 22 (標準 SSH) 埠。移除此埠轉發:
# firewall-cmd --zone=public --remove-forward-port=port=12345:proto=tcp:toport=22:toaddr=10.20.30.40
不幸的是你必須鍵入完整的轉發聲明以移除它,只指定埠和協議是不行的。
提示和技巧
埠或服務有效時間
使用 --timeout=value
可以設置服務或埠的有效時間。時間默認為秒,m
後綴代表分鐘, h
後綴代表小時。
例如:為 SSH 開放三小時的使用時間:
# firewall-cmd --add-service ssh --timeout=3h
將運行時配置設為永久
你可以將運行時配置持久化(這意味著重啟後也會保留配置)
# firewall-cmd --runtime-to-permanent
檢查服務配置
/usr/lib/firewalld/services/
存儲了默認支持的服務的配置文件,/etc/firewalld/services/
存儲了用戶創建的服務文件。