酱油哥
酱油哥
Published on 2023-09-26 / 10 Visits
0
0

【运维】UFW 简易防火墙管理工具“食用指南”

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 的真传。


Comment