怎样测试Linux防火墙端口
- Linux
- 2025-06-12
- 6
外部测试:验证端口对外暴露状态
适用场景:从其他设备或互联网检测防火墙是否开放指定端口。
方法1:使用 telnet(基础连通性测试)
telnet <目标服务器IP> <端口号> # 示例:测试 192.168.1.100 的 80 端口 telnet 192.168.1.100 80
- 结果解读:
- 连接成功 → 显示 Connected to... 或空白光标(端口开放)。
- 连接失败 → Connection refused(服务未运行)或超时(防火墙拦截)。
方法2:使用 nc(netcat,支持TCP/UDP)
nc -zv <目标IP> <端口号> # TCP测试 nc -zvu <目标IP> <端口号> # UDP测试 # 示例:测试TCP 22端口 nc -zv 192.168.1.100 22
- 结果解读:
- succeeded! → 端口开放。
- 无响应或报错 → 端口被阻。
方法3:使用 nmap(高级扫描,需安装)
nmap -p <端口号> <目标IP> # 示例:扫描80和443端口 nmap -p 80,443 192.168.1.100
- 关键输出:
- open → 端口开放。
- filtered → 防火墙拦截。
- closed → 服务未监听。
安全提示:扫描他人服务器前需获授权,避免触发安全警报。
本地测试:检查防火墙规则与监听状态
适用场景:在服务器本机验证防火墙配置和服务状态。
步骤1:确认服务监听端口
ss -tuln | grep <端口号> # 推荐(现代系统) netstat -tuln | grep <端口号> # 示例:检查22端口 ss -tuln | grep ':22'
- 关键字段:
- LISTEN → 服务正常运行。
- 无输出 → 服务未启动或配置错误。
步骤2:检查防火墙规则
-
Firewalld(CentOS/RHEL):
-
UFW(Ubuntu/Debian):
ufw status numbered | grep <端口号> # 示例:检查443端口 ufw status | grep 443
-
iptables(通用):
iptables -L -n -v | grep <端口号> # 示例:检查3306端口 iptables -L INPUT -n -v | grep ':3306' - 若本地成功但外部失败 → 防火墙拦截。
-
外部无法访问但本地正常
- 检查防火墙规则是否开放端口(firewall-cmd --add-port=80/tcp)。
- 确认云服务商安全组(如AWS/Azure)允许该端口流量。
-
服务监听但连接超时


- 验证防火墙是否放行:firewall-cmd --list-all。
- 排查网络设备(路由器/交换机)的ACL限制。
-
UDP端口检测无响应
- UDP协议无握手过程,使用 nc -zvu 结合服务日志验证(如DNS服务的 dig @IP)。
-
误拦截合法流量
- 临时禁用防火墙测试(生产环境慎用): systemctl stop firewalld # Firewalld ufw disable # UFW
- 调试后需立即恢复并修正规则。
- 最小化开放端口:仅暴露必要端口(如SSH/HTTP/HTTPS)。
- 日志监控:启用防火墙日志(journalctl -u firewalld)分析异常连接。
- 端口伪装:使用非标准端口(如修改SSH默认22端口)降低扫描风险。
- 自动化工具:
- 定期扫描:nmap -p- -T4 <IP>(全端口扫描)。
- 配置审计:lynis audit system 检查防火墙配置。
安全实践建议
测试Linux防火墙端口需结合外部探测(telnet/nc/nmap)与本地验证(ss/firewall-cmd/ufw),定期检查端口状态、更新防火墙规则并遵循最小权限原则,可显著提升系统安全性,对于关键业务,建议使用入侵检测系统(如Fail2ban)增强防护。
引用说明:本文方法基于Linux主流发行版(CentOS 7+、Ubuntu 20.04+)验证,参考工具手册包括:nmap官方文档、Firewalld Wiki、UFW社区指南。
步骤3:模拟本地连接
telnet localhost <端口号> # 测试本机服务 curl -v http://localhost:<端口> # HTTP服务测试 # 示例:测试本地MySQL(3306) telnet localhost 3306
常见问题与解决方案