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 可以看清顺序。 |
| Docker | Docker 可能直接修改防火墙规则,容器发布端口时需要单独确认。 |
| reject 与 deny | deny 丢弃数据包,reject 会返回拒绝。日常多用 allow 和 deny。 |
| 云安全组 | 云厂商安全组在 UFW 之外,两边都放行才通。 |