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