出自 Arch Linux 中文维基

firewalld 是由紅帽開發的防火牆守護進程。 默認使用 nftables 。據項目主頁:

Firewalld 提供了一個動態管理的防火牆,支持使用區域來標識網絡連接/接口的可信等級。支持 IPv4、IPv6 防火牆設置、乙太網橋接和 IP sets。使用分離的運行時配置和永久設置。也提供了一個接口用來直接為服務或應用添加防火牆規則。

安裝

安裝 firewalld

使用

啟用啟動 firewalld.service.

你可以使用控制台工具 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 應為 tcpudp 之一。

關閉埠使用帶有相同的埠號和協議的 --remove-port 選項。

NAT 地址偽裝

此命令與 iptables -t nat -A POSTROUTING -j MASQUERADE 具有相同的效果:

# firewall-cmd --zone=public --add-masquerade

從版本 1.0.0 開始,如果想要 NAT 地址偽裝在不同的防火牆區域之間工作,您必須創建一個新的策略對象,用於過濾它們之間的流量:

# firewall-cmd --new-policy NAT_int_to_ext --permanent
# firewall-cmd --permanent --policy NAT_int_to_ext --add-ingress-zone internal
# firewall-cmd --permanent --policy NAT_int_to_ext --add-egress-zone public
# firewall-cmd --permanent --policy NAT_int_to_ext --set-target ACCEPT

埠轉發

如果你在路由器上配置了 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

不幸的是你必須鍵入完整的轉發聲明以移除它,只指定埠和協議是不行的。

Rich 規則

通過使用 Rich 規則,可以以一種易於理解的方式創建更複雜的防火牆規則。

要添加 Rich 規則:

# firewall-cmd [--zone=zone_name] [--permanent] --add-rich-rule='rich_rule'

其中 rich_rule 是一條豐富語言規則。

如果要允許來所有的連接自網絡 192.168.1.0/24NFS service

# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="nfs" accept'

要允許來自 192.168.2.3 到埠 1234/tcp 的連接:

# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.2.3" port port="1234" protocol="tcp" accept'

有關更多 Rich 規則語法,請參閱 firewalld.richlanguage(5)

要刪除 Rich 規則:

# firewall-cmd  [--zone=zone_name] [--permanent] --remove-rich-rule='rich_rule'

提示和技巧

埠或服務有效時間

使用 --timeout=value 可以設置服務或埠的有效時間。時間默認為秒,m 後綴代表分鐘, h 後綴代表小時。 例如:為 SSH 開放三小時的使用時間:

# firewall-cmd --add-service ssh --timeout=3h
注意: 超時選項與 --permanent 互斥。也就是說,超時只能是運行時配置,不可能持久化。

將運行時配置設為永久

你可以將運行時配置持久化(這意味著重啟後也會保留配置)

# firewall-cmd --runtime-to-permanent

檢查服務配置

/usr/lib/firewalld/services/ 存儲了默認支持的服務的配置文件,/etc/firewalld/services/ 存儲了用戶創建的服務文件。


移除程序/托盤圖標

托盤圖標與 firewalld 一起打包。其自啟動腳本位於 /etc/xdg/autostart/firewall-applet.desktop 可以被隱藏,參見 XDG Autostart#目錄。另一種方法是,通過將其添加到 /etc/pacman.conf 中的 NoExtract 來阻止該文件的安裝。

參閱