Ubuntu 22.04服务器端口拦截排查求助
这种摸不清过往配置的老服务器确实很让人头大,我给你梳理几个实用的排查方向,一步步来定位问题:
先确认端口监听状态与进程占用
先用ss -tulpn命令查看全系统的端口监听情况,这个工具比netstat更高效,能清晰看到每个端口对应的进程PID和名称。确保你打算使用的新端口没有被隐藏进程悄悄占用——有些后台服务可能会绑定一些不常用的端口,自己都没察觉。排查nftables(Ubuntu 22.04默认防火墙)
你提到iptables没规则,但Ubuntu 22.04默认已经切换到nftables作为防火墙后端了,iptables很多时候只是兼容层接口。赶紧跑一下nft list ruleset看看有没有隐藏的过滤规则,不少情况下默认配置会对非常用端口做限制,只是你没注意到它的存在。用tcpdump抓包验证数据包是否到达
在服务器上执行tcpdump -i any port 你的目标端口,然后从外部机器或者本地发起连接请求。如果能抓到数据包但服务没响应,那问题大概率出在你启动的服务本身;如果完全抓不到包,那要么是数据包在网络传输途中被上游防火墙拦截了(比如IDC的防火墙),要么是服务器内部有其他过滤机制。深挖/proc/net下的系统网络状态
你提到想从/proc/net入手,这些文件能帮你看到底层网络细节:- 查看
/proc/net/nf_conntrack:这里记录了所有正在跟踪的连接状态,能帮你判断数据包是否被连接跟踪模块处理; - 检查
/proc/sys/net/ipv4/conf/all/rp_filter:如果这个值是1(严格反向路径过滤),可能会拦截一些非预期来源的数据包,可以临时改成0试试:echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter; - 查看
/proc/net/filter:这里能看到内核层面的过滤规则,说不定能找到iptables/nftables没显示的隐藏规则。
- 查看
检查AppArmor权限限制
Ubuntu默认启用了AppArmor,它会给进程做细粒度的权限管控,比如限制某些应用只能监听特定端口。用aa-status查看当前生效的AppArmor配置,再看看/var/log/syslog里有没有类似apparmor="DENIED"的日志,这可能是端口被拦截的原因。本地端口连通性测试
先在服务器上用nc -l 目标端口启动一个简单的监听服务,然后用nc localhost 目标端口尝试本地连接。如果本地能通但外部连不上,那基本可以确定是网络出口的问题(比如上游防火墙、路由规则);如果本地都连不通,那肯定是服务器内部的机制在拦截。
备注:内容来源于stack exchange,提问作者Secto Kia

