跳至內容

Uncomplicated Firewall

出自 Arch Linux 中文维基

來自項目主頁

Ufw(即 Uncomplicated Firewall 的縮寫)是一個管理網絡防火牆的程序。它提供了一個命令行界面,並旨在簡單(uncomplicated)易用。
注意:注意 UFW 可以使用 iptablesnftables 作為防火牆後端。此外,由於 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(一個 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(例如 OpenVPNWireGuard),可以將 /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.rulesetc/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 中的規則。

禁用 UFW 日誌[編輯 | 編輯原始碼]

禁用 UFW 日誌可以讓 UFW 停止填充內核(dmesg)和消息日誌:

# ufw logging off

UFW 與 Docker[編輯 | 編輯原始碼]

Docke 在默認狀態下會編寫 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 應用程式的預設設置。其依賴於軟件包 pythonufw 以及 GTK 支持。

參考[編輯 | 編輯原始碼]