💡 实战经验
永远先放行 SSH,最后改默认策略
不管用 UFW 还是 firewalld,第一步永远是 ufw allow 22/tcp 或 firewall-cmd --add-service=ssh。然后才改默认策略为 deny。顺序反了你就被锁在门外了。
ufw enable 之前先开另一个终端
SSH 连着服务器执行 ufw enable,如果 SSH 规则没写对——恭喜你,连接断了,进不去了。开两个终端,一个改规则,一个验证 ufw status 确认 SSH 仍然放行。
Docker 和 UFW/firewalld 是两条平行线
Docker 直接操作 iptables,完全绕过了 UFW 和 firewalld。你在 UFW 里封了 8080 端口,但 Docker 容器的 8080 仍然对外开放。要控制 Docker 端口,优先在 DOCKER-USER 链里操作。禁用 Docker 的 iptables 管理属于高级方案,会影响端口映射、NAT 和容器网络,除非你准备自己维护这些规则,否则不要作为默认做法。
规则测试用临时规则
不确定一条规则是否会影响正常服务?先用临时规则测试:ufw deny 3306/tcp 测试完 ufw delete deny 3306/tcp。firewalld 里不加 --permanent 就是临时的,重启自动消失。
日志是排错的眼睛
防火墙默默丢了包,你不知道为什么。出问题时第一件事开日志:ufw logging high 或 firewall-cmd --set-log-denied=all。看到日志里的 DROP 记录,才能定位是哪条规则在作怪。