ufw默认关闭,启用前须执行sudo ufw enable;默认策略为双向放行,应设为sudo ufw default deny incoming且allow outgoing;端口规则建议写明协议如80/tcp;删规则需用编号或完整匹配。

UFW没开,所有规则都白设
很多人配完 ufw allow 22 就以为 SSH 安全了,一执行 ufw status 却看到 Status: inactive——防火墙压根没运行,规则只是躺在配置里睡觉。UFW 默认就是关闭的,这是 Ubuntu 的安全设计,不是 bug。
- 先确认状态:
sudo ufw status,不是ufw status(少sudo会提示权限不足或返回空) - 安装后不启用 = 没装,执行
sudo ufw enable才真正生效;系统会警告“可能断开连接”,这说明它真在干活 - 如果用 SSH 远程操作,务必在
enable前确保allow ssh或allow 22已添加,否则可能被锁在外面
默认策略定错,等于开门迎客
刚启用 UFW 时,它的默认行为是:允许所有入站(incoming),拒绝所有出站(outgoing)?错。实际是双向放行——这很危险,尤其对服务器。
- 正确起点是:
sudo ufw default deny incoming(拒所有进) +sudo ufw default allow outgoing(允所有出) - 别手快输成
ufw default allow,它等价于default allow incoming,会把 80/443/22 全暴露出去,哪怕你没显式allow -
ufw default deny是简写,但只作用于incoming,不会影响outgoing或routed,不必担心本机发请求失败
端口和服务名混用,规则可能不生效
ufw allow http 和 ufw allow 80 看似一样,但背后查的是不同文件:/etc/services。一旦该文件被改过、或服务名映射缺失(比如自定义 Nginx 监听 8080),http 就可能找不到对应端口。
- 生产环境建议直接写端口号+协议:
sudo ufw allow 80/tcp、sudo ufw allow 443/tcp、sudo ufw allow 3306/tcp - SSH 如果改了端口(比如 2222),绝不能写
ufw allow ssh,得写sudo ufw allow 2222/tcp - UDP 服务如 DNS 要明确写:
sudo ufw allow 53/udp,只写53默认只开 TCP
删规则不是“撤销上一步”,得看编号或完整匹配
执行 ufw allow 80 后想撤回,ufw delete allow 80 不一定成功——UFW 内部记录的是带协议、方向、IP 段的完整规则,不是简单关键词匹配。
- 先看当前规则列表:
sudo ufw status numbered,每条规则前有编号(如[1]) - 按编号删最稳:
sudo ufw delete 1 - 或者用完整描述删:
sudo ufw delete allow 80/tcp(注意协议必须一致) - 误删后不用重装,
ufw reload不会清空规则,只是重新加载;真正清空要用ufw reset(慎用)
iptables 或上 nftables。别硬塞。










