出自 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

埠轉發

如果你在路由器上配置了 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
注意: 超時選項與 --permanent 互斥。也就是說,超時只能是運行時配置,不可能持久化。

將運行時配置設為永久

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

# firewall-cmd --runtime-to-permanent

檢查服務配置

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

參閱