查询防火墙端口命令是网络管理和系统运维中常用的操作,用于检查防火墙规则、开放的端口以及网络连接状态,不同操作系统(如Linux、Windows、macOS)和防火墙工具(如iptables、firewalld、Windows Defender Firewall)提供的命令有所不同,以下将详细介绍各类系统中常用的查询命令及其使用方法。

Linux系统中的防火墙端口查询命令
Linux系统中最常用的防火墙工具是iptables和firewalld(CentOS 7+、RHEL 7+等发行版默认使用)。
使用iptables查询端口
iptables是Linux内核的经典防火墙工具,通过iptables -L命令可以列出所有规则,但需结合-n(以数字形式显示地址和端口)、--line-numbers(显示规则编号)等参数提高可读性。
sudo iptables -L -n --line-numbers # 列出所有规则,显示IP和端口 sudo iptables -L INPUT -n -v # 查看INPUT链的详细规则,包括流量统计
若需查询特定端口(如80端口)是否开放,可结合grep过滤:
sudo iptables -L INPUT -n | grep 80
使用firewalld查询端口
firewalld支持动态管理防火墙规则,查询命令更简洁。

sudo firewall-cmd --list-all # 查看所有规则和开放的端口 sudo firewall-cmd --list-ports # 仅列出开放的端口 sudo firewall-cmd --query-port=8080/tcp # 查询特定端口(8080/TCP)是否开放
若需查看服务的端口映射(如http服务对应80端口),可使用:
sudo firewall-cmd --list-services
使用ss/netstat查询端口连接状态
ss(推荐)和netstat命令用于查看网络连接状态,可结合防火墙规则判断端口是否被监听或连接。
ss -tulnp | grep 80 # 查看监听80端口的进程 netstat -tuln | grep 80 # 传统方式查看监听端口
Windows系统中的防火墙端口查询命令
Windows系统主要通过netsh命令行工具和PowerShell管理防火墙。
使用netsh命令
netsh advfirewall firewall show rule name=all # 显示所有防火墙规则 netsh advfirewall firewall show rule name="允许HTTP" # 查看特定规则(如“允许HTTP”) netsh advfirewall firewall show portprotocol=tcp localport=80 # 查询80端口的TCP规则
使用PowerShell命令
PowerShell提供了更强大的管理功能,
Get-NetFirewallRule | Format-Table Name, DisplayName, Enabled, LocalPort, RemotePort, Protocol # 列出所有规则 Get-NetFirewallRule -DisplayName "允许HTTPS" | Select-Object * # 查看特定规则详情 Get-NetFirewallPortFilter -Protocol TCP | Where-Object LocalPort -eq 443 # 查询443端口的TCP规则
使用Windows Defender Firewall GUI
通过控制面板“Windows Defender防火墙”>“高级设置”可图形化查看规则,但命令行方式更适合批量操作。
macOS系统中的防火墙端口查询命令
macOS默认使用pfctl(Packet Filter)管理防火墙,可通过以下命令查询:
sudo pfctl -sr # 显示防火墙规则 sudo pfctl -ss # 显示当前状态连接 sudo pfctl -a info 'port 80' # 查询80端口相关规则
lsof命令也可用于查看端口占用情况:
lsof -i :80 # 查看使用80端口的进程
常用查询命令对比表
| 系统/工具 | 命令示例 | 功能说明 |
|---|---|---|
| Linux (iptables) | sudo iptables -L -n |
列出所有防火墙规则 |
| Linux (firewalld) | sudo firewall-cmd --list-ports |
列出开放的端口 |
| Windows (netsh) | netsh advfirewall firewall show rule name=all |
显示所有防火墙规则 |
| Windows (PowerShell) | Get-NetFirewallRule |
列出所有规则,支持格式化输出 |
| macOS (pfctl) | sudo pfctl -sr |
显示防火墙规则 |
| 通用 (ss/netstat) | ss -tulnp |
查看端口监听状态及进程 |
相关问答FAQs
Q1: 如何判断防火墙是否阻止了特定端口的连接?
A: 可通过以下步骤排查:
- 使用查询命令(如
iptables -L INPUT -n或firewall-cmd --list-ports)检查端口是否在允许规则中; - 使用
telnet IP 端口或nc -zv IP 端口测试端口连通性; - 若被阻止,需添加允许规则(如
iptables -A INPUT -p tcp --dport 80 -j ACCEPT或firewall-cmd --add-port=80/tcp --permanent)。
Q2: 为什么查询结果显示端口开放,但外部仍无法访问?
A: 可能原因包括:
- 防火墙规则顺序问题(如iptables中拒绝规则位于允许规则之前);
- 服务未正确监听该端口(需用
ss -tulnp确认进程); - 网络设备(如路由器、交换机)的ACL规则拦截;
- 云服务器安全组未开放端口(需在云平台控制台检查)。
建议结合网络连通性测试和分层排查(本地防火墙→系统服务→网络设备)定位问题。
