Uncomplicated Firewall - Arch Linux 中文维基

跳至內容

# Uncomplicated Firewall

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 Uncomplicated Firewall，最近一次同步於 2025-08-06，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- iptables
- sshguard

來自項目主頁：

  Ufw（即 Uncomplicated Firewall 的縮寫）是一個管理網絡防火牆的程序。它提供了一個命令行界面，並旨在簡單（uncomplicated）易用。

注意：注意 UFW 可以使用 iptables包 或 nftables包 作為防火牆後端。此外，由於 `nft` 接受 iptables 語法（例如在 `/etc/ufw/before.rules` 中），因此使用 UFW 管理規則的用戶無需學習怎麼對 iptables 或者 nftables 進行底層調用。

## 安裝

安裝軟體包 ufw包。

啟動並啟用 `ufw.service` 使其開機自啟。注意，如果 `iptables.service`（或者其 ipv6 部分）也被啟用了，`ufw.service` 將不會生效。

## 基本配置

以下是一個非常簡單的配置示例，它將會默認拒絕所有連接，允許來自 192.168.0.1-192.168.0.255 區域網內的所有連接，允許所有目標為 Deluge（英語：Deluge）（一個 BitTorrent 客戶端）的連接，並啟用了來自任何地方的 SSH 連接速率限制：

    # ufw default deny
    # ufw allow from 192.168.0.0/24
    # ufw allow Deluge
    # ufw limit ssh

要想允許一個埠而不是任何地方進行連接，請參考下面的例子。這三條命令分別允許埠 51312 的 UDP 和 TCP 連接，允許埠 51313 的 UDP 連接，和允許範圍從 51312 到 51314 埠的連接：

    # ufw allow 51312
    # ufw allow 51312/udp
    # ufw allow 51312:51314

僅當首次安裝後第一次使用 UFW 時需要執行:

    # ufw enable

注意：請確保 `ufw.service` 已經被啟用。

最後,使用以下命令確認更改已被應用:

    # ufw status

    Status: active
    To                         Action      From
    --                         ------      ----
    Anywhere                   ALLOW       192.168.0.0/24
    Deluge                     ALLOW       Anywhere
    SSH                        LIMIT       Anywhere

注意：狀態報告僅限於用戶添加的規則。在大多數情況下不會有什麼問題，但最好還是了解一下內置規則是否存在。這些規則包括允許 UPNP、AVAHI 和 DHCP 回復的過濾器。具體信息請參考 ufw README 的「Default ruleset」一節。

使用以下命令來查看額外信息（包括默認策略）：

    # ufw status verbose

但這依然限制於用戶指定的規則。為了查看所有設置的規則，可以使用：

    # ufw show raw

或者手冊中列出的其他報告。由於這些報告也總結了流量情況，其輸出有些難以閱讀，為了方便閱讀，你可以使用另一種檢查傳入流量的方法：

    # iptables -S | grep ACCEPT
    # ip6tables -S | grep ACCEPT

請注意，只要你還在使用 `ufw` 來管理 `iptables`，就不要將後者啟用。

注意：如果你在 `/etc/sysctl.d/*` 中設置了特殊的網絡環境變量，請相應更新 `/etc/ufw/sysctl.conf` 中的內容（因為此配置會覆蓋默認配置）。

## 轉發策略

如果你需要使用 VPN（例如 OpenVPN 或 WireGuard），可以將 `/etc/default/ufw` 中的 DEFAULT_FORWARD_POLICY 變量從 "DROP" 調整到 "ACCEPT"，以便無論用戶如何設置如何都能轉發所有數據包。要針對特定接口（例如 wg0）進行轉發，用戶可以在 *filter 塊中添加以下行：

    /etc/ufw/before.rules

    # End required lines

    -A ufw-before-forward -i wg0 -j ACCEPT
    -A ufw-before-forward -o wg0 -j ACCEPT

你可能還需要取消以下行的注釋：

    /etc/ufw/sysctl.conf

    net/ipv4/ip_forward=1
    net/ipv6/conf/default/forwarding=1
    net/ipv6/conf/all/forwarding=1

## 添加其他應用

軟體包還提供了一些常見守護進程和程序的默認埠配置。可以通過查看 `/etc/ufw/applications.d` 目錄下的文件或使用如下指令查看：

    # ufw app list

如果用戶正在使用非標準埠運行任何應用程式，建議創建 `/etc/ufw/applications.d/custom` 文件，並按照默認配置做模板添加所需的數據。

警告：如果用戶修改了任何由軟體包提供的規則集，這些修改將在第一次更新 ufw 軟體包時被覆蓋。這就是為什麼建議將自定義應用程式規則放在外面的原因！

例如，使用自定義的 TCP 埠範圍 20202-20205 進行 deluge 下載：

    [Deluge-my]
    title=Deluge
    description=Deluge BitTorrent client
    ports=20202:20205/tcp

如果需要為同一應用程式定義 TCP 和 UDP 埠，只需使用豎線進行分隔，如下所示：該應用程式打開 TCP 埠 10000-10002 和 UDP 埠 10003：

    ports=10000:10002/tcp|10003/udp

還可以使用逗號來定義埠。此示例打開 TCP 埠 10000-10002（包括埠 10000 和 10002）以及 UDP 埠 10003 和 10009：

    ports=10000:10002/tcp|10003,10009/udp

## 刪除應用

根據上面的 Deluge/Deluge-my 示例，以下操作將刪除標準的 Deluge 規則，並用上面示例中的 Deluge-my 規則替換它們：

    # ufw delete allow Deluge
    # ufw allow Deluge-my

通過 status 指令查詢結果：

    # ufw status

    Status: active
    To                         Action      From
    --                         ------      ----
    Anywhere                   ALLOW       192.168.0.0/24
    SSH                        ALLOW       Anywhere
    Deluge-my                  ALLOW       Anywhere

## IP位址黑名單

將 IP 地址添加到黑名單可能是一個可取的做法，可以簡單地編輯 `/etc/ufw/before.rules` 文件，在文件底部在 "COMMIT" 的上方插入一個 iptables DROP 行來輕鬆實現。

    /etc/ufw/before.rules

    ...
    ## blacklist section
    # block just 199.115.117.99
    -A ufw-before-input -s 199.115.117.99 -j DROP
    # block 184.105.*.*
    -A ufw-before-input -s 184.105.0.0/16 -j DROP

    # don't delete the 'COMMIT' line or these rules won't be processed
    COMMIT

## 連接速率限制

ufw 有能力拒絕來自在過去 30 秒內嘗試建立 6 次或更多連接的 IP 地址的連接。用戶應該考慮在 SSH 之類的服務中使用這個選項。

利用上述基本配置，要啟用速率限制，我們只需用 limit 參數替換 allow 參數。然後新規則將取代先前的規則。

    # ufw limit SSH

    Rule updated

    # ufw status

    Status: active
    To                         Action      From
    --                         ------      ----
    Anywhere                   ALLOW       192.168.0.0/24
    SSH                        LIMIT       Anywhere
    Deluge-my                  ALLOW       Anywhere

## 用戶規則

所有的用戶規則都儲存在 `etc/ufw/user.rules` 和 `etc/ufw/user6.rules` 中，分別用於 IPv4 與 IPv6。

## 技巧和竅門

### 禁用遠程 ping

在以下文件中將 `ACCEPT` 改為 `DROP`：

    /etc/ufw/before.rules

    # ok icmp codes
    ...
    -A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT

如果你正在使用 IPv6, 請一同更改 `/etc/ufw/before6.rules` 中的規則。

### 禁用 IPv6 處理

將 `/etc/default/ufw` 中的 `IPV6=yes` 改為 `IPV6=no`，然後重新加載規則（`ufw reload`）。這樣會移除原有 IPv6 規則，並且不再生成新的 IPv6 規則。

### 禁用 UFW 日誌

禁用 UFW 日誌可以讓 UFW 停止填充內核（dmesg）和消息日誌：

    # ufw logging off

### UFW 與 Docker

Docker 在默認狀態下會編寫 iptables 規則並忽視 ufw 規則，這可能會造成一些安全隱患。一種解決方案是使用 https://github.com/chaifeng/ufw-docker 。

提示：你可以安裝 ufw-dockerAUR，並通過執行 `ufw-docker install` 來自動修復 iptables 規則。這個腳本也能幫你管理 Docker 相關的 ufw 規則，詳細參見 `ufw-docker help`。

## GUI 前端

如果你在使用 KDE Plasma，可以安裝 plasma-firewall包，然後直接在 Wi-Fi & Networking > Firewall 中調整防火牆配置。

### Gufw

gufw包 是一個用於 Ufw 的 GTK 前端，旨在使 Linux 防火牆的管理儘可能簡單易用。它具有常見埠和 p2p 應用程式的預設設置。其依賴於軟體包 python包，ufw包 以及 GTK 支持。

## 參考

- Ubuntu UFW 文檔
- ufw(8)
- 使用 ipsets 為 ufw 添加屏蔽列表：https://github.com/poddmo/ufw-blocklist

分類：​

- 防火牆

Uncomplicated Firewall
新增話題