首页 > Sysadmin > 正文

Linux 查看防火墙开放端口四法

huyuanwen 2026-10-30 Sysadmin

查端口先分两层:一是防火墙规则层面放行了哪些端口,二是系统监听层面的 socket 状态。本文覆盖 firewalld、ufw、iptables、ss 四类工具,命令均在 WSL Ubuntu 24.04 验证。

先用 ss 看监听 socket

ss -tulnp

ss 是 netstat 的现代替代,直接读内核 netlink,输出更快。-t 显示 TCP,-u 显示 UDP,-l 只看监听态,-n 不解析服务名,-p 显示进程名。WSL 实测:默认监听端口含 systemd-resolve 的 53、chrony 的 323,输出稳定 [1]。

ss -tulnp | grep ':22'

按端口过滤也很方便;grep 是客户端行为,不影响内核统计。

firewalld:list-ports / list-all

firewall-cmd --list-ports
firewall-cmd --list-all

--list-ports 只输出端口列表,格式为 端口/协议;--list-all 还会显示区域、服务、协议、富规则,信息更全 [2]。运行时与永久配置分开,改完需 --permanent 才写入磁盘 [3]。

WSL 实测:新装 firewalld 后区域为 public,默认放行 ssh 和 dhcpv6-client;--list-ports 初始为空,添加 8080/tcp 后立即返回 8080/tcp,删除后恢复空。

ufw:status verbose

ufw status verbose

ufw 是 Ubuntu/Debian 默认的简化前端,status 显示激活状态,verbose 会列出每条规则的编号、方向、动作、端口 [4]。numbered 参数可展示序号,方便 ufw delete <编号> 回滚 [6]。

WSL 实测:新装后状态为 inactive;ufw allow 8080/tcp 后再查,输出里出现 8080/tcp ALLOW;删除后恢复 inactive。

iptables:直接查链

iptables -L -n
iptables -L INPUT -n --line-numbers

iptables 操作内核 netfilter 四张表,最常用 filter 表。-L 列出链,-n 显示数字端口,--line-numbers 显示规则序号,方便删除 [5]。默认策略为 ACCEPT 时,空链如下:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

WSL 实测:默认三条链均为空;插入 -p tcp --dport 9090 -j ACCEPT 后,INPUT 链出现规则 1,删除后恢复空。

回滚与排错

现象 原因 处理
firewall-cmd 报错 not running 服务未启动 systemctl start firewalld
ufw status 显示 inactive 规则未启用 ufw enable
ss 看不到某端口 进程未监听或监听在 127.0.0.1 用 `ss -tlnp grep <端口>` 确认
iptables 规则不生效 插入到非默认表 加 -t filter 显式指定

桌面/开发机优先用 firewalld 或 ufw;服务器脚本和容器环境直接用 ss;需要 NAT、mangle 等多表精细控制时上 iptables。

局限性

  • 本文 WSL 实测环境为 Ubuntu 24.04;RPM 系 firewalld 版本与 zone 行为可能有差异。
  • iptables 在部分新内核上被 nftables 后端替代,语法兼容但底层不同。
  • 容器环境(Docker)会插入自定义链,iptables -L 输出可能比宿主机多。

—

草稿待审 — netstat 命令、firewalld 富规则、ufw 高级匹配基于文档核查,尚未实际执行。


参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测,个别条目(未装工具/安装类命令)仅核对官方文档,未实际执行。