在CentOS系统中,开放端口的查询是一项常见且重要的操作,无论是配置Web服务、数据库服务,还是进行安全审计,准确了解当前系统的端口开放情况都是必不可少的,本文将详细介绍在CentOS系统中查询开放端口的多种方法,包括使用firewalld、iptables等工具,并解释相关的概念和注意事项。

理解端口与防火墙的基本概念
在深入探讨查询方法之前,首先需要明确几个基本概念,端口是计算机与外部通信的出入口,每个端口对应一种服务或应用程序,在CentOS系统中,防火墙负责控制网络流量的进出,决定哪些端口可以开放,哪些端口需要关闭,CentOS 7及更高版本默认使用firewalld作为防火墙管理工具,而CentOS 6及更早版本则使用iptables,了解这些工具的基本原理,有助于更好地查询和管理端口。
使用firewalld查询开放端口
firewalld是CentOS 7及更高版本的默认防火墙管理工具,支持动态管理规则而无需重启服务,要查询firewalld的开放端口,可以通过以下几种方式实现。
查看所有开放的端口和服务
使用firewall-cmd命令可以方便地查询当前防火墙的配置,执行以下命令可以查看所有永久开放的端口和服务:
sudo firewall-cmd --list-ports sudo firewall-cmd --list-services
第一条命令会显示所有开放的端口号,例如80/tcp、443/tcp;第二条命令则显示开放的服务名称,例如http、https,如果需要查看当前运行的规则(包括临时规则),可以添加--running参数。
查看特定区域(Zone)的开放端口
firewalld将网络划分为不同的区域(如public、home、work等),每个区域可以有不同的规则,要查看特定区域的开放端口,可以使用以下命令:
sudo firewall-cmd --zone=public --list-ports
如果需要查看所有区域的配置,可以使用--get-active-zones命令先确定当前活动的区域,然后针对具体区域进行查询。
查询端口是否属于某个服务
端口是以服务的形式添加到防火墙中的,要查询某个端口对应的服务名称,可以使用以下命令:
sudo firewall-cmd --info-service=http
这将显示http服务的详细信息,包括包含的端口和协议。

使用iptables查询开放端口
对于CentOS 6或某些特殊配置的CentOS 7系统,可能仍使用iptables作为防火墙工具。iptables是基于规则的防火墙,查询其开放端口需要直接查看规则链。
查看所有iptables规则
执行以下命令可以查看iptables的所有规则:
sudo iptables -L -n -v
-L表示列出规则;-n表示以数字形式显示地址和端口,避免DNS解析;-v表示显示详细信息,如数据包数量和字节数。
在输出中,ACCEPT表示允许通过的流量,DROP或REJECT表示拒绝,重点关注ACCEPT规则对应的端口和协议。
查看特定链(Chain)的规则
iptables的规则分为不同的链(如INPUT、OUTPUT、FORWARD),如果只想查看进入本机的流量规则(INPUT链),可以使用以下命令:
sudo iptables -L INPUT -n -v
查询端口是否被iptables规则允许
如果只想快速检查某个端口是否开放,可以使用以下命令:
sudo iptables -L INPUT | grep <端口号>
检查80端口是否开放:
sudo iptables -L INPUT | grep 80
如果输出中包含ACCEPT且目标端口为80,则表示该端口已开放。
使用ss或netstat查询监听端口
除了防火墙工具,还可以使用ss或netstat命令查询系统中正在监听的端口,这些命令显示的是应用程序层面的监听状态,可能与防火墙规则不完全一致。

使用ss命令查询监听端口
ss是netstat的替代工具,功能更强大且速度更快,执行以下命令可以查看所有监听的TCP和UDP端口:
sudo ss -tulnp
-t表示TCP端口;-u表示UDP端口;-l表示只显示监听的端口;-n表示以数字形式显示;-p显示占用端口的进程ID和名称。
使用netstat命令查询监听端口
如果习惯使用netstat,可以执行以下命令:
sudo netstat -tulnp
输出结果中,LISTEN状态表示端口正在监听等待连接。
综合查询与注意事项
在实际操作中,可能需要结合多种方法来全面了解端口开放情况,先使用ss或netstat查看哪些端口正在监听,然后使用firewalld或iptables确认这些端口是否被防火墙允许,需要注意以下几点:
- 防火墙与监听状态的区别:防火墙开放端口仅允许流量通过,但应用程序是否在该端口监听需要另外确认。
- SELinux的影响:如果启用SELinux,可能会阻止某些端口的服务,即使防火墙允许,可以使用
semanage port命令查询SELinux管理的端口。 - 临时与永久规则:
firewalld的规则分为运行时规则和永久规则,修改时需要明确使用--permanent参数。
相关问答FAQs
解答:这种不一致可能由多种原因导致。firewall-cmd --list-ports显示的是防火墙允许的端口,而ss -tulnp显示的是应用程序实际监听的端口,如果防火墙允许某个端口,但应用程序未在该端口监听,则后者不会显示,SELinux可能会阻止应用程序绑定到某些端口,即使防火墙允许。firewalld的服务(如http)可能包含多个端口,而ss命令会显示所有监听的端口,包括防火墙未明确允许的。
问题2:如何确认某个端口是否被防火墙和应用程序同时允许?
解答:要全面确认端口的开放状态,可以分两步进行,使用firewall-cmd --list-ports或iptables -L INPUT -n -v检查防火墙是否允许该端口,使用ss -tulnp | grep <端口号>检查是否有应用程序在该端口监听,如果两者都显示端口开放,则说明端口已正确配置,如果防火墙允许但应用程序未监听,需要检查应用程序的配置;如果应用程序监听但防火墙未允许,则需要添加防火墙规则。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复