UFW(Uncomplicated Firewall)是 Ubuntu 和 Debian 上 iptables 的简化前端。它的命令很直观,适合不想记复杂 iptables 语法的人。下面这份教程覆盖 UFW 的日常配置、常见问题和排查方法。
UFW 常用命令速查
| 操作 | 命令 | 说明 |
|---|---|---|
| 查看状态 | ufw status verbose | 看当前规则 |
| 放行端口 | ufw allow 80/tcp | 放行 HTTP |
| 拒绝端口 | ufw deny 3306 | 拒绝外部访问 MySQL |
| 限制尝试 | ufw limit 22 | 防暴力破解 |
| 删除规则 | ufw delete allow 80 | 移除规则 |
| 重置 | ufw reset | 清空所有规则 |
安装与启用
大多数 Ubuntu 系统已经预装 UFW。先检查状态:
sudo ufw status verbose
如果没安装:
sudo apt install ufw
配置默认策略
服务器通常只需要对外提供几个服务,所以默认拒绝入站、允许出站:
sudo ufw default deny incoming
sudo ufw default allow outgoing
放行必要端口
启用防火墙前,必须先放行 SSH,否则会被锁在外面:
# 如果 SSH 在默认 22 端口
sudo ufw allow 22/tcp
# 如果改了 SSH 端口
sudo ufw allow 2222/tcp
# Web 服务
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 启用
sudo ufw enable
按应用名放行
UFW 内置了一些常见应用的配置文件:
sudo ufw app list
sudo ufw allow 'Nginx Full'
sudo ufw allow 'OpenSSH'
这种方式比记端口号方便,也更容易维护。
删除规则和重置
查看带编号的规则:
sudo ufw status numbered
删除某条规则:
sudo ufw delete 3
如果规则搞乱了,直接重置:
sudo ufw reset
限制连接频率
UFW 本身不支持 rate limiting,但可以调用 iptables 的 recent 模块。更简单的做法是用 UFW 的 limit 命令(针对 SSH):
sudo ufw limit 22/tcp
这会限制每 30 秒内同一 IP 最多 6 次新连接。
排查连接问题
如果启用 UFW 后某个服务访问不了:
- 检查规则:
sudo ufw status verbose - 确认端口放行正确
- 临时禁用 UFW 测试:
sudo ufw disable - 查看系统日志:
sudo tail -f /var/log/ufw.log
IPv6 支持
UFW 默认同时管理 IPv4 和 IPv6。如果你的服务只监听 IPv4,需要在 /etc/default/ufw 里确认 IPV6=yes 是开启的。如果有专门的 IPv6 规则需求,可以在 /etc/ufw/before6.rules 里手动添加。
更多服务器安全教程,请访问 fenij.com。
常见问题
问:UFW 和 iptables 是什么关系?
答:UFW 是 iptables 的前端。你执行的 ufw 命令最终会被翻译成 iptables 规则。可以用 sudo iptables -L -v -n 查看底层规则。
问:启用 UFW 后 Docker 容器访问异常?
答:Docker 会绕过 UFW 直接操作 iptables。需要在 /etc/default/docker 里设置 DOCKER_OPTS="--iptables=false",或者手动管理 Docker 的 iptables 规则。
问:UFW 支持端口范围吗?
答:支持。sudo ufw allow 60000:61000/tcp 可以放行一段端口,适合被动模式的 FTP 或某些 P2P 应用。