UFW 简易防火墙管理工具“食用指南”
简单介绍一下 UFW,全称是 Uncomplicated Firewall ,是 Debian 类 GNU / Linux 发行版默认防火墙工具。相比于直接操作 iptabels ,UFW 工具对不熟悉防火墙概念的初学者更加友好,同时支持 IPv4 和 IPv6 。
(づ●─●)づ<()>
以 Ubuntu 22.04.03 TLS 为例,下载和安装 UFW,在命令行中执行:
sudo apt install ufw
等待 UFW 及其相关的依赖包下载、安装完成……
注意:安装完成后,先别着急启动服务,在此之前还得调整现有的防火墙规则,如果是服务器上没有放通SSH端口的情况下,直接启动可能导致服务器失联。
安装完成后,可以通过以下命令启动 UFW 服务:
sudo ufw enable
也可以通过以下命令关闭 UFW 服务:
sudo ufw disable
。。。 ╲(  ̄ ︶  ̄ )╱ 。。。
默认情况下, UFW 默认策略设置为阻止所有传入流量并允许所有传出流量,效果与以下设置相同:
sudo ufw default allow outgoing
sudo ufw default deny incoming
允许防火墙传入 SSH 连接,可以使用以下命令:
sudo ufw allow ssh
syntax: sudo ufw [opt] [app]
如果你已经提前了解到 SSH 服务默认监听的是 22 号端口的话,等效命令如下:
sudo ufw allow 22
syntax: sudo ufw [opt] [port]
如果为了安全考虑,你的 SSH 服务不再使用默认的端口,则需要手动指定相应的端口除此之外,UFW 服务还可以根据 TCP / UDP 协议来过滤某个端口的数据包:
sudo ufw allow 233/tcp
sudo ufw allow 666/udp
syntax: sudo ufw [opt] [port/proto]
与之对应的是,想要过滤某个端口的传入数据包:
sudo ufw deny 233
syntax: sudo ufw [opt] [port/proto]
现在可以使用以下命令查看当前已设置的规则:
sudo ufw status # show firewall status
sudo ufw status verbose # show verbose firewall status
sudo ufw status numbered # show firewall status as numbered list of RULES
如果需要删除某一个规则,只需要在原始规则之前加上 Delete 就可,或者按照编号删除规则:
sudo ufw delete allow ssh
sudo ufw delete deny 233
sudo ufw delete [number]
如果不知道当前规则编号,请见上一条第三项灰色注释:
sudo ufw status numbered
善用帮助命令与文档,能够解决 99% 的问题:
ufw --help
man ufw
下面加深一下难度,操作特定范围的端口规则:
sudo ufw allow 233:322
syntax: sudo ufw [opt] [start_port:end_port]
你甚至还可以设置指定的协议规则:
sudo ufw allow 233:322/tcp
syntax: sudo ufw [opt] [start_port:end_port/proto]
某些特殊的情况下,需要允许或禁止特定的 IP 连接服务器的所有端口:
sudo ufw allow from 192.168.1.233
syntax: sudo ufw [opt] from [ip]
高级一点的还有,对某特定范围的 IP 进行操作:
sudo ufw allow from 192.168.1.1/24
sudo ufw [opt] from [ip/mask]
允许特定的 IP 连接特定端口:
sudo ufw allow from 192.168.1.233 to any port 233
syntax: sudo ufw [opt] from [ip] to any port [port]
进一步可以指定协议:
sudo ufw allow from 192.168.1.233 to any port 233 proto tcp
syntax: sudo ufw [opt] from [ip] to any port [port] proto [proto]
这些高级规则配置归根结底是一些基本配置命令的组合应用。再来举一些复杂的例子:
sudo ufw deny from 192.168.1.233 to any port 80
sudo ufw allow from 192.168.1.1/24 to any port 80 proto tcp
sudo ufw limit from 192.168.1.1/24 to any port 8080
熟悉基础规则的话,只需要将复杂规则拆分就能很好地理解实际作用。UFW 默认启用了 IPv6 设置,相关的配置文件位于:
/etc/default/ufw
查看配置内容,找到 ipv6 = yes,如果在平时使用的过程中不需要用到 IPv6 的规则,可以使用编辑该配置将其改为 no,重启服务后生效。之前有提到一条命令 sudo ufw allow ssh ,让人不解的是 UFW 是怎么知道 SSH 服务具体绑定哪些端口的呢?其实一些主流的服务都会有默认绑定的端口,只要这个服务名声在外、用户群体庞大,那么默认端口也就约定俗成了。UFW 内置了一些应用服务配置,无需用户详细了解一些主流服务需要的端口信息,只要用户自己没有修改默认端口配置,就可以快速使用 UFW 命令进行操作,使用以下命令查看 UFW 可用的内置应用服务信息:
> sudo ufw app list
Available applications:
AIM
Bonjour
CIFS
DNS
Deluge
IMAP
IMAPS
IPP
KTorrent
Kerberos Admin
Kerberos Full
Kerberos KDC
Kerberos Password
LDAP
LDAPS
LPD
MSN
MSN SSL
Mail submission
NFS
OpenSSH
POP3
POP3S
PeopleNearby
SMTP
SSH
Samba
Socks
Telnet
Transmission
Transparent Proxy
VNC
WWW
WWW Cache
WWW Full
WWW Secure
XMPP
Yahoo
qBittorrent
svnserve
种类繁多,任君挑选!另外,在此基础上补充一条常用的规则:
sudo ufw allow ssh from 192.168.1.1/24
syntax: sudo ufw [opt] [app] from [ip]
UFW 工具的强大之处既在于它的简单易用,也在于操作的灵活性,得到了 iptables 的真传。