技术笔记

UFW 基本操作

UFW(Uncomplicated Firewall)是 Ubuntu 和 Debian 上常用的防火墙前端,本质是把 iptables 或 nftables 包成更直接的命令。

1. 安装与启停

sudo apt update && sudo apt install ufw
sudo ufw status
sudo ufw status verbose
sudo ufw status numbered
sudo ufw enable
sudo ufw disable
sudo ufw reload

在远程机器上启用前,先放行 SSH,否则可能把自己锁在外面。

sudo ufw allow OpenSSH
sudo ufw allow 22/tcp
sudo ufw enable

2. 默认策略

sudo ufw default deny incoming
sudo ufw default allow outgoing

3. 放行和拒绝

按端口:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 22/tcp
sudo ufw deny 23/tcp
sudo ufw allow 10000:10100/udp

按服务名:

sudo ufw app list
sudo ufw app info OpenSSH
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'

按来源地址:

sudo ufw allow from 203.0.113.10 to any port 22 proto tcp
sudo ufw allow from 192.168.1.0/24
sudo ufw deny from 198.51.100.20
sudo ufw allow in on eth0 to any port 80 proto tcp

出站规则:

sudo ufw allow out 53
sudo ufw allow out 443/tcp

4. 删除规则

sudo ufw status numbered
sudo ufw delete 3
sudo ufw delete allow 80/tcp

5. 常用场景

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 2222/tcp
sudo ufw allow from 203.0.113.10 to any port 22 proto tcp
sudo ufw deny log from 198.51.100.0/24

6. 日志

sudo ufw logging on
sudo ufw logging medium
sudo ufw logging high
sudo ufw logging off
sudo journalctl -u ufw -n 50

日志通常位于 /var/log/ufw.log。有的系统会把规则记录写到内核日志。

7. 重置

sudo ufw reset

规则文件位于 /etc/ufw/,包括 user.rules 和 user6.rules。重置会清空规则,执行前需要确认当前连接不会中断。

8. 最小模板

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

容易忽略的点

点说明
IPv6默认通常也管理 IPv6,可查看 /etc/default/ufw 中的 IPV6=yes。
规则顺序UFW 按顺序匹配,更具体的规则应靠前。status numbered 可以看清顺序。
DockerDocker 可能直接修改防火墙规则,容器发布端口时需要单独确认。
reject 与 denydeny 丢弃数据包,reject 会返回拒绝。日常多用 allow 和 deny。
云安全组云厂商安全组在 UFW 之外,两边都放行才通。