Linux如何查看端口是否被防火墙封禁

admin
在Linux中,查看端口是否被防火墙封禁需结合防火墙状态与规则检查,首先确认防火墙运行状态:使用systemctl status firewalld(Firewalld)或ufw status(UFW),若防火墙开启,则查看端口规则:Firewalld执行firewall-cmd --list-portsfirewall-cmd --list-rich-rules,UFW执行ufw status verbose,iptables则用iptables -L -n --line-numbers | grep 端口号,通过netstat -tulnss -tuln检查端口监听状态,若端口未监听且防火墙规则中存在禁用条目(如Firewalld的port=端口号:协议 protocol=tcp/udp),则判定为封禁,若防火墙未运行,端口通常不会被防火墙封禁。

在Linux系统中,防火墙是保障服务器安全的重要屏障,通过控制端口的访问权限来防止未授权访问,当某个端口无法被外部访问时,除了检查应用进程是否正常监听外,还需要确认是否被防火墙规则封禁,本文将介绍主流Linux防火墙工具(iptables、firewalld、ufw)的端口状态检查方法,并结合端口监听状态综合判断。

基础概念:防火墙封端口的原理

防火墙通过“规则链”控制端口流量,常见的封禁方式有两种:

  • DROP:直接丢弃数据包,不返回任何响应(外部看起来像端口未开启)。
  • REJECT:明确拒绝数据包,并返回“Connection refused”等响应(外部能判断端口存在但被拒绝)。

检查端口是否被防火墙封禁,本质是查看防火墙规则中是否存在针对该端口的DROP或REJECT规则。

Linux如何查看端口是否被防火墙封禁

使用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"
  • 若输出包含DROPREJECT,则说明该端口被防火墙封禁;
  • 若输出只有ACCEPT或无规则,则说明未被封禁(需结合其他规则判断)。

检查端口是否被“隐式拒绝”

iptables默认规则(policy)可能是DROPACCEPT,可通过以下命令查看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]),方便后续修改规则。

过滤特定端口的规则

文章版权声明:除非注明,否则均为xmsdn原创文章,转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码