sudo ufw status verboseUbuntu 系常用前端,列出放行 / 拒绝的端口规则。
约 1433 字大约 5 分钟
2026-05-14
“服务起来了、端口也在监听,外面就是连不上”——排查到这一步,防火墙是头号嫌疑。Linux 的防火墙有好几套门面(ufw、firewalld、iptables/nftables),再加上云服务器还有一层安全组。这篇帮你理清它们的关系,以及怎么安全地动它。
理解防火墙在“控制流量是否放行”,弄清 ufw / firewalld / iptables 的关系,知道云安全组是独立的另一层,掌握安全改规则的原则。
sudo ufw status verboseUbuntu 系常用前端,列出放行 / 拒绝的端口规则。
sudo firewall-cmd --list-allRHEL / CentOS 系常用前端,按 zone 列出规则。
sudo nft list ruleset看 nftables 实际生效的完整规则集,前端最终都落到这里。
ss -lntp改防火墙前,先排除“其实是服务根本没监听”。
防火墙就是一套规则:对每个进出的数据包,按规则判断“放行”还是“丢弃”。所以它造成的现象很特征化——服务一切正常,但连接要么超时(包被默默丢弃),要么很快被拒。如果 ss -lntp 显示服务确实监听着,本机 curl 127.0.0.1:端口 也通,唯独外部连不上,防火墙的嫌疑就很大。
容易让人困惑的是有好几个工具,其实它们是前端和后端的关系:
| 工具 | 角色 | 常见于 |
|---|---|---|
ufw | 简化前端,命令好记 | Ubuntu / Debian |
firewalld | 带 zone 概念的前端 | RHEL / CentOS / Fedora |
iptables / nftables | 真正干活的底层引擎 | 所有发行版 |
ufw allow 80 这条命令,最终是被翻译成底层 iptables/nftables 规则生效的。所以别同时用多个前端去配同一台机器——规则会打架。排查时,前端命令(ufw status)看不明白,就用 nft list ruleset 看底层实际生效了什么。
如果机器在云上(阿里云、AWS 等),还有一层安全组——它在你的机器之外,由云平台控制。这意味着:
ufw status 看规则全是放行的,外部还是连不上 → 可能是云安全组没放行两层都得放行,少一层都不通。排查云服务器“连不上”,机器内防火墙和云控制台的安全组要分别检查。
防火墙是最容易“一条命令把自己锁在门外”的地方——尤其在远程机器上:
sleep 300 && 恢复规则 的兜底),改完没问题再取消。iptables-save、nft list ruleset 把当前规则存下来,出错能还原。远程改防火墙 = 高危操作
在 SSH 连着的远程机器上改防火墙规则,一条命令就可能让你彻底连不进去——而且你没法再连进去修。雷区:① 默认策略改成 DROP 之前,务必确认放行 SSH 的规则已经存在且正确;② 不要关掉当前 SSH 会话,把它当救命绳;③ 改之前 iptables-save > backup 备份;④ 高风险变更挂一个定时自动回滚。把“改防火墙”和“改 fstab、改路由”归为同一类:错了代价是失去机器访问权。
| 误区 | 更稳妥的做法 |
|---|---|
| 外部连不上就直接断定是防火墙 | 先 ss -lntp 确认服务在监听、本机能连,再怀疑防火墙 |
| 云服务器只查机器内的防火墙 | 云安全组是独立的另一层,两层都要放行 |
| 同时用 ufw 和 iptables 手动配规则 | 选一个前端,规则混用会互相打架 |
| 远程机器上随手改防火墙规则 | 先备份、留活动会话、确认 SSH 已放行,再动手 |
版权归属:Shuo Liu