防火墙如何查看开放端口?
在Linux系统中,查看防火墙开放端口最直接有效的方式是依据所启用的防火墙服务调用对应命令——若使用firewalld,则执行`firewall-cmd --list-ports`可快速获知当前默认区域已放行的TCP/UDP端口列表;若采用iptables,则需结合`iptables -L -n -v`与`ss -tuln`交叉验证规则策略与实际监听状态;Ubuntu等发行版常用ufw时,`ufw status`即可清晰呈现允许通行的端口及协议类型。Windows平台则可通过PowerShell的`Get-NetTCPConnection -State Listen`或图形化“高级安全Windows Defender防火墙”中的入站规则进行逐项核查。所有操作均基于系统原生工具链,无需额外依赖,且结果均可在官方文档与主流Linux发行版手册中查证,具备高度可复现性与技术一致性。
一、Linux系统下firewalld防火墙端口核查流程
执行`firewall-cmd --list-ports`仅显示当前默认区域(通常是public)已永久或临时开放的端口,但若需全面掌握策略配置,应优先运行`firewall-cmd --list-all`,该命令输出包含服务列表、端口段、富规则及目标策略,能明确识别是否通过服务名(如http、ssh)间接放行端口。对于多区域部署场景,使用`firewall-cmd --list-all-zones`可逐区比对,避免因区域切换导致端口策略遗漏。若需验证某特定端口(如8080)是否生效,务必组合执行`firewall-cmd --query-port=8080/tcp`与`ss -tuln | grep ':8080'`,前者确认防火墙策略允许,后者验证对应服务进程确实在监听,二者缺一不可。
二、iptables环境下的端口状态双维度验证
iptables本身不直接管理“端口开放”概念,而是通过链式规则控制数据包流向。因此必须分层检查:先用`iptables -L INPUT -n -v`定位INPUT链中ACCEPT规则对应的端口及协议,再用`ss -tuln`确认内核层面是否有进程绑定该端口。特别注意,若规则中含`--dport 3306`但MySQL未启动,则端口在防火墙层面“允许”,实际网络不可达。此时需同步排查`systemctl status mysql`服务状态,并确认`/etc/my.cnf`中bind-address未设为127.0.0.1导致外部无法连接。
三、Windows平台端口核查的实操要点
PowerShell命令`Get-NetTCPConnection -State Listen | Select-Object LocalAddress,LocalPort,AppliedSetting`可导出完整监听清单,其中AppliedSetting字段明确标识该端口是否由Windows Defender防火墙规则启用。图形界面操作中,进入“高级安全Windows Defender防火墙”→“入站规则”,需筛选“已启用”且“配置文件”匹配当前网络类型(域/专用/公用)的规则,右键属性查看“协议和端口”页签中的具体端口范围。若发现某端口在netstat中显示监听却无对应入站规则,说明该服务可能绕过防火墙或运行于回环地址,需进一步用`netsh interface portproxy show v4tov4`排查端口转发配置。
四、跨平台通用辅助验证手段
无论何种系统,`nmap -sT -p- 127.0.0.1`可执行本地全端口扫描,结果与防火墙命令比对可发现策略未覆盖的意外开放端口;`lsof -iTCP -sTCP:LISTEN -P -n`则精准列出各进程绑定的TCP端口及PID,便于追溯服务来源。所有操作均建议以root或Administrator权限执行,确保结果完整性。
综上,端口核查本质是策略配置与运行状态的双重校验,脱离任一维度都可能导致误判。




