TECH NOTES / 部署与运维

Linux 查看防火墙与开放端口

原笔记 2023-04-10 · 整理于 2026-10-05

查看端口时,先分清两个问题:有没有进程在监听,以及防火墙是否允许访问。这是两层不同的状态,只看其中一个容易误判。

以下命令适用于使用 firewalld 的 Linux 主机。操作规则前,先确认网卡所在的 zone;本文以 public 为例,不要直接套用到其他 zone。

1. 查看 firewalld 状态

bash
systemctl status firewalld
sudo firewall-cmd --state
sudo firewall-cmd --get-active-zones

如果发行版没有使用 firewalld,需要查询它实际使用的防火墙工具。排查连通性不需要先把整个防火墙关闭。

2. 查看放行规则与监听状态

bash
# 当前运行配置中的端口规则
sudo firewall-cmd --zone=public --list-ports

# 查看服务规则及其他配置;list-ports 不包含以 service 放行的端口
sudo firewall-cmd --zone=public --list-all

# 查询具体端口
sudo firewall-cmd --zone=public --query-port=8080/tcp

# 查看本机 TCP 监听状态
sudo ss -lntp

--query-port 返回 yes 表示存在对应端口规则,不能证明应用已经启动。反过来,ss 能看到监听,也不能证明远程机器能通过防火墙访问。云服务器还要检查平台安全组。

3. 持久化添加一个端口

bash
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --zone=public --query-port=8080/tcp

--permanent 修改持久配置,重新加载后进入运行配置。先确认没有其他需要保留的临时规则,再执行 reload。

不再需要时,移除对应规则并重新加载:

bash
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload

参考:firewalld 官方端口与服务配置说明。

文章配图