现象描述
服务器端口被系统拦截通常表现为客户端无法建立TCP/UDP连接,而服务器端服务进程正常监听。常见原因包括防火墙规则、安全组策略、SELinux限制或系统资源耗尽。以下为系统性排查方法。
排查步骤
1. 检查本地防火墙
使用iptables或firewalld查看当前规则是否丢弃了目标端口的流量。
- 对于iptables:执行
iptables -L -n -v,检查INPUT、FORWARD链中是否有DROP或REJECT规则。 - 对于firewalld:执行
firewall-cmd --list-all,确认服务或端口是否未在allow列表。 - 临时放行测试:
iptables -I INPUT -p tcp --dport -j ACCEPT,若连接成功,则为防火墙拦截。
2. 检查云安全组/网络ACL
若服务器部署在阿里云、腾讯云、AWS等平台,需登录控制台检查安全组入方向规则。确保目标端口已添加允许规则,且来源IP(或0.0.0.0/0)正确。同时检查网络ACL的入站/出站规则。
3. 检查SELinux或AppArmor
Linux系统安全模块可能阻止进程监听或接受连接。
- 查看SELinux状态:
getenforce,若为Enforcing,则可能触发avc拒绝。 - 检查审计日志:
ausearch -m avc -ts recent 或 grep "" /var/log/audit/audit.log。 - 临时关闭测试:
setenforce 0,若问题解决,则需要调整SELinux策略或添加端口上下文。
4. 确认服务监听状态
使用ss -tlnp或netstat -tlnp查看服务进程确实在0.0.0.0:端口或[::]:端口监听。若仅监听127.0.0.1,则外部无法访问,需修改服务配置绑定到公网IP或0.0.0.0。
5. 检查系统资源限制
系统文件描述符限制或端口范围限制也可能导致连接异常。
- 查看当前限制:
ulimit -n(文件描述符),确保足够。 - 检查本地端口范围:
cat /proc/sys/net/ipv4/ip_local_port_range,确保客户端源端口可用。 - 查看连接数:
ss -s,确认未达到上限。
总结
按照以上步骤逐层排查,从最可能的本地防火墙开始,再检查云安全组、SELinux、监听绑定和资源限制。每调整一项后立即用telnet或nc -vz测试连通性,可快速定位拦截原因。