Uncomplicated Firewall
來自項目主頁:
- Ufw(即Uncomplicated Firewall的縮寫),是一個管理網絡防火牆的程序。它提供了一個命令行界面,並旨在簡單(uncomplicated)易用。
nft
接受iptables語法(例如在/etc/ufw/before.rules
中),因此使用UFW管理規則的用戶無需學習怎麼對iptables或者nftables進行底層調用。安裝[編輯 | 編輯原始碼]
啟動並啟用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
僅當第一次使用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
使用以下命令來查看額外信息(包括默認策略):
# ufw status verbose
但這依然限制於用戶指定的規則。為了查看所有設置的規則,可以使用:
# ufw show raw
或者手冊中列出的其他報告。由於這些報告也總結了流量情況,其輸出有些難以閱讀,為了方便閱讀,你可以使用另一種檢查接受流量的方法:
# iptables -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
Adding other applications[編輯 | 編輯原始碼]
The PKG comes with some defaults based on the default ports of many common daemons and programs. Inspect the options by looking in the /etc/ufw/applications.d
directory or by listing them in the program itself:
# ufw app list
If users are running any of the applications on a non-standard port, it is recommended to simply make /etc/ufw/applications.d/custom
containing the needed data using the defaults as a guide.
Example, deluge with custom tcp ports that range from 20202-20205:
[Deluge-my] title=Deluge description=Deluge BitTorrent client ports=20202:20205/tcp
Should you require to define both tcp and udp ports for the same application, simply separate them with a pipe as shown: this app opens tcp ports 10000-10002 and udp port 10003:
ports=10000:10002/tcp|10003/udp
One can also use a comma to define ports if a range is not desired. This example opens tcp ports 10000-10002 (inclusive) and udp ports 10003 and 10009
ports=10000:10002/tcp|10003,10009/udp
Deleting applications[編輯 | 編輯原始碼]
Drawing on the Deluge/Deluge-my example above, the following will remove the standard Deluge rules and replace them with the Deluge-my rules from the above example:
# ufw delete allow Deluge # ufw allow Deluge-my
Query the result via the status command:
# ufw status
Status: active To Action From -- ------ ---- Anywhere ALLOW 192.168.0.0/24 SSH ALLOW Anywhere Deluge-my ALLOW Anywhere
Black listing IP addresses[編輯 | 編輯原始碼]
It might be desirable to add ip addresses to a blacklist which is easily achieved simply by editing /etc/ufw/before.rules
and inserting an iptables DROP line at the bottom of the file right above the "COMMIT" word.
/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
Rate limiting with ufw[編輯 | 編輯原始碼]
ufw has the ability to deny connections from an IP address that has attempted to initiate 6 or more connections in the last 30 seconds. Users should consider using this option for services such as SSH.
Using the above basic configuration, to enable rate limiting we would simply replace the allow parameter with the limit parameter. The new rule will then replace the previous.
# 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
中的規則。
關閉UFW日誌[編輯 | 編輯原始碼]
關閉UFW日誌可以讓UFW停止填充內核(dmesg)和消息日誌:
# ufw logging off
UFW 與 Docker[編輯 | 編輯原始碼]
Docke在默認狀態下會編寫iptables規則並忽視ufw規則,這可能會造成一些安全隱患。一種解決方案是使用ufw-docker腳本。
ufw-docker install
來自動修復iptables規則。這個腳本也能幫你管理Docker相關的ufw規則,詳細參見ufw-docker help
。GUI前端[編輯 | 編輯原始碼]
如果你使用KDE,你可以直接在系統設置 > 防火牆對ufw進行管理。
Gufw[編輯 | 編輯原始碼]
gufw包 是一個為 Ufw 提供的 GTK 前端,旨在使 Linux 防火牆的管理儘可能簡單易用。它具有常見埠和 p2p 應用程式的預設設置。其依賴於軟體包python包, ufw包,以及GTK支持。
See also[編輯 | 編輯原始碼]
- Ubuntu UFW documentation
- ufw(8)
- Add blocklists to ufw using ipsets: https://github.com/poddmo/ufw-blocklist