简介

Ubuntu 的默认防火墙配置工具是 ufw 。为简化 iptables 防火墙配置而开发, ufw 提供了一种用户友好的方法来创建基于 IPv4 或 IPv6 主机的防火墙。默认情况下,UFW 处于禁用状态

基本用法

开启/关闭

1
2
sudo ufw enable
sudo ufw disable

检查状态

1
sudo ufw status
1
sudo ufw status verbose

输出:

可以看到,默认拒绝入站、转发,允许出站

有一些例外情况,可以用命令sudo ufw show raw查看

修改默认规则

拒绝入站:

1
sudo ufw default deny incomin

允许出站:

1
sudo ufw default allow outgoing

放行/禁止端口

放行53/tcp

1
sudo ufw allow 53/tcp

放行53/udp

1
sudo ufw allow 53/udp

放行53/tcp,53/udp

1
sudo ufw allow 53

拒绝53/tcp

1
sudo ufw deny 53/tcp

拒绝53/udp

1
sudo ufw deny 53/udp

拒绝53/tcp,53/udp

1
sudo ufw deny 53

放行1001/udp到1005/udp

1
sudo ufw allow 1001:1005/udp

删除规则

1
2
3
4
5
sudo ufw allow 80/tcp
sudo ufw delete allow 80/tcp

sudo ufw deny 80/tcp
sudo ufw delete deny 80/tcp

通过服务名

ufw/etc/services读取要查看获取服务列表

1
2
# 查看服务列表
less /etc/services

允许ssh:

1
sudo ufw allow ssh   # 等价于 sudo ufw allow 22/tcp

编号(常用于删除操作)

查看带编号的规则:

1
2
3
4
sudo ufw status numbered

# 删除特定规则(假设规则编号为 3)
sudo ufw delete 3

日志

启用日志:

1
sudo ufw logging on

禁用日志:

1
sudo ufw logging off

查看日志:

1
sudo cat /var/log/ufw.log

实时查看日志:

1
2
sudo less /var/log/ufw.log
sudo tail -f /var/log/ufw.log

日志记录等级:

  • 开(low):记录按照定义的策略阻止或允许的所有数据包。
  • 开(medium):同上,此外还包含不匹配策略的数据包。
  • 开(high):记录所有速率限制和无速率限制。
  • 开(完整):记录所有数据包,不限制速率。

进阶用法

网络接口

允许连接到特定的网络接口:

1
ufw allow in on eth0 from 1.2.3.4 to any port 3306

IP规则

允许特定ip访问:

1
sudo ufw allow from 1.2.3.4

允许某网段访问:

1
sudo ufw allow from 192.168.1.0/24

允许特定端口、IP 地址和协议允许:

1
sudo ufw allow from 192.168.1.0/24 to any port 22 proto tcp

允许所有 IPv6 流量到 UDP 端口 8090:

1
sudo ufw allow from ::/0 to any port 8090 proto udp

拒绝ping(icmp)

编辑/etc/ufw/before.rules并删除以下行:

1
2
3
4
5
6
# ok icmp codes
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT

或将 “ACCEPT” 改为 “DROP”

1
2
3
4
5
6
# ok icmp codes
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j DROP
-A ufw-before-input -p icmp --icmp-type source-quench -j DROP
-A ufw-before-input -p icmp --icmp-type time-exceeded -j DROP
-A ufw-before-input -p icmp --icmp-type parameter-problem -j DROP
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP

导入/导出规则

导出:

1
sudo ufw status numbered > ufw-rules.txt

导入:

1
sudo ufw status numbered < ufw-rules.txt

解决 UFW 和 Docker 冲突的问题

ufw-docker