在Linux中,查看端口是否被防火墙封禁需结合防火墙状态与规则检查,首先确认防火墙运行状态:使用systemctl status firewalld(Firewalld)或ufw status(UFW),若防火墙开启,则查看端口规则:Firewalld执行firewall-cmd --list-ports或firewall-cmd --list-rich-rules,UFW执行ufw status verbose,iptables则用iptables -L -n --line-numbers| grep 端口号,通过netstat -tuln或ss -tuln检查端口监听状态,若端口未监听且防火墙规则中存在禁用条目(如Firewalld的port=端口号:协议 protocol=tcp/udp),则判定为封禁,若防火墙未运行,端口通常不会被防火墙封禁。
在Linux系统中,防火墙是保障服务器安全的重要屏障,通过控制端口的访问权限来防止未授权访问,当某个端口无法被外部访问时,除了检查应用进程是否正常监听外,还需要确认是否被防火墙规则封禁,本文将介绍主流Linux防火墙工具(iptables、firewalld、ufw)的端口状态检查方法,并结合端口监听状态综合判断。
基础概念:防火墙封端口的原理
防火墙通过“规则链”控制端口流量,常见的封禁方式有两种:
- DROP:直接丢弃数据包,不返回任何响应(外部看起来像端口未开启)。
- REJECT:明确拒绝数据包,并返回“Connection refused”等响应(外部能判断端口存在但被拒绝)。
检查端口是否被防火墙封禁,本质是查看防火墙规则中是否存在针对该端口的DROP或REJECT规则。

使用iptables检查端口状态(适用于CentOS 6/7、RHEL 6/7等传统系统)
iptables是Linux内核的经典防火墙工具,通过filter表的INPUT链控制入站流量,检查步骤如下:
查看iptables规则(含端口信息)
iptables -L -n --line-numbers
-L:列出所有规则链;-n:以数字形式显示IP和端口(避免DNS解析延迟);--line-numbers:显示规则编号,方便定位。
输出示例中,重点关注INPUT链的规则,若出现类似以下规则,则端口可能被封禁:
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 # 允许80端口 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 # 封禁8080端口
过滤特定端口的规则
若端口较多,可通过grep精准过滤目标端口(如8080):
iptables -L INPUT -n | grep ":8080"
- 若输出包含
DROP或REJECT,则说明该端口被防火墙封禁; - 若输出只有
ACCEPT或无规则,则说明未被封禁(需结合其他规则判断)。
检查端口是否被“隐式拒绝”
iptables默认规则(policy)可能是DROP或ACCEPT,可通过以下命令查看INPUT链默认策略:
iptables -L INPUT -n | grep "policy"
若默认策略为DROP,则所有未明确ACCEPT的端口都会被拒绝(此时需添加ACCEPT规则开放端口)。
使用firewalld检查端口状态(适用于CentOS 7+/8、RHEL 7+/8、Fedora等)
firewalld是CentOS 7+、RHEL 7+等系统的新一代防火墙工具,支持区域(Zone)管理和动态规则更新,检查步骤如下:
查看firewalld运行状态
firewall-cmd --state
若输出为running,说明防火墙已启动;若为not running,则防火墙未开启(此时所有端口均可访问,无需检查封禁)。
查看已开放的端口
firewall-cmd --list-ports
输出格式为端口号/协议(如8080/tcp),若目标端口在此列表中,则说明未被封禁;若不在,则可能被封禁或未开放。
检查特定端口是否开放
直接查询目标端口(如8080/tcp)的开放状态:
firewall-cmd --query-port=8080/tcp
- 返回
yes:端口已开放; - 返回
no:端口未开放(可能被封禁); - 返回
error:防火墙未运行或参数错误。
查看服务的端口规则
若端口通过“服务”(Service)管理(如http服务默认对应80端口),可查看服务状态:
firewall-cmd --list-services
若目标服务(如custom-service)未在列表中,则其关联端口会被封禁。
查看详细规则(含区域和拒绝规则)
firewall-cmd --list-rich-rules
若输出包含port protocol="tcp" port="8080" reject,则说明8080端口被明确拒绝。
使用ufw检查端口状态(适用于Ubuntu、Debian等系统)
ufw(Uncomplicated Firewall)是Ubuntu、Debian等系统的简化防火墙工具,命令更直观,检查步骤如下:
查看ufw状态
ufw status
输出示例:
Status: active To Action From -- ------ ----- 80/tcp ALLOW Anywhere 8080/tcp DENY Anywhere
ALLOW:允许访问;DENY:拒绝访问(即封禁)。
查看带编号的详细规则
ufw status numbered
输出会显示规则编号(如[ 1]),方便后续修改规则。

