内容纲要

🗂 | 查看 Linux 专题可浏览更多内容


UFW (Uncomplicated Firewall) 是一个用于管理 NetFilter 防火墙的程序,从名字 (Uncomplicated) 就可以看出来它的最大特点就是使用简单。

安装

以 Debian 谱系为例,使用 APT 安装:

sudo apt update
sudo apt install ufw

使用

制定规则

UFW 的规则有多简单呢,比如想要放行 SSH 所使用的默认 22 端口的入站请求:

sudo ufw allow 22

或者说想要指定协议,如用于 DNS 查询 (UDP 协议) 的 53 端口的入站请求:

sudo ufw allow 53/udp

如果不记得具体端口号也可以使用服务名称,如:

sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https

也可能你对于服务的名称及其使用的端口都不太了解,那么可以查看:

less /etc/services

策略

UFW 有 4 种策略:

  • allow:允许
  • deny:拒绝
  • reject:拒绝,与 deny 不同的是 reject 会向请求者返回一条消息,说明请求被阻止
  • limit:速率限制,如果 IP 地址试图在 30 秒内启动 6 个或更多连接,UFW 将拒绝连接,如使用在 SSH 服务上

示例

一些使用示例:

# deny 53 端口
sudo ufw deny 53

# 阻止指定 IP
sudo ufw deny from 1.2.4.8
# 允许指定 IP-CIDR
sudo ufw allow from 10.0.0.0/8
sudo ufw allow from 172.16.0.0/12
sudo ufw allow from 192.168.0.0/16

# 仅允许指定 IP 访问指定端口
sudo ufw allow from 192.168.1.1 any port 8080
# 再加上协议
sudo ufw allow from 192.168.1.1 any port 8080 proto tcp

# 阻止 SMTP 的出站请求
sudo ufw reject out smtp

# 允许指定范围的端口及协议
sudo ufw allow 9000:9002/udp

出站及入站默认策略

⚠️ 注意:需要注意是否将 SSH 服务添加了允许入站的规则,否则你就连不上 SSH 服务了

# 默认允许所有数据出站
sudo ufw default allow outgoing

# 默认禁止所有数据入站
sudo ufw default deny incoming

管理 UFW 状态

# 查看 UFW 状态
sudo ufw status

# 重载配置并开启 UFW
sudo ufw enable

# 关闭 UFW
sudo ufw disable

# 重载配置
sudo ufw enable

管理规则

带序号格式查看 UFW 状态及规则列表:

sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere                  
[ 2] 80/tcp                     ALLOW IN    Anywhere                  
[ 3] 443                        ALLOW IN    Anywhere                  
[ 4] 8080/tcp                   ALLOW IN    Anywhere                  
[ 5] 8443                       ALLOW IN    Anywhere                  
[ 6] 22/tcp (v6)                ALLOW IN    Anywhere (v6)             
[ 7] 80/tcp (v6)                ALLOW IN    Anywhere (v6)             
[ 8] 443 (v6)                   ALLOW IN    Anywhere (v6)             
[ 9] 8080/tcp (v6)              ALLOW IN    Anywhere (v6)             
[10] 8443 (v6)                  ALLOW IN    Anywhere (v6)

删除规则

删除规则可以这样:

sudo ufw delete allow 8080

但现在通过列表可以使用序号删除:

sudo ufw delete 4
sudo ufw delete 9

日志

# 开启日志,off 为关闭
sudo ufw logging on

# 设置日志等级,默认为 low
sudo ufw logging [ low | medium | high ]

然后就可以查看 UFW 的日志了,如:

sudo tail -f /var/log/ufw.log

重置 UFW

禁用并清空设置:

sudo ufw reset