Linux服务器开放端口号的排查,核心就一条命令路径:先用ss -tulnp看清监听列表,再用lsof -i或fuser反查进程归属,最后对照防火墙规则确认放行策略。这篇文章把从查看到定位、从清理到加固的完整流程拆开讲透,全程用真实可执行的命令说话,不绕弯子。
查看端口监听的三个核心命令
ss命令:现代Linux系统的首选
ss是netstat的替代者,性能更好,输出更精准,在大多数主流发行版(CentOS 7+、Ubuntu 18.04+、Debian 9+)中默认预装。
ss -tulnp
参数拆解:
-t显示TCP连接-u显示UDP连接-l仅显示监听状态的端口-n跳过DNS解析,直接显示IP和端口号-p显示对应的进程PID和名称
执行后输出大致如下:
State Local Address:Port Process
LISTEN 0.0.0.0:22 users:(("sshd",pid=1234,fd=3))
LISTEN 0.0.0.0:80 users:(("nginx",pid=5678,fd=6))
LISTEN 127.0.0.1:3306 users:(("mysqld",pid=9012,fd=15))
读这一列输出的关键点:0.0.0:80表示所有网卡上都监听80端口,0.0.1:3306表示只对本机回环地址开放,外部无法访问,这两者的安全含义天差地别。
netstat命令:老牌工具依然能打
虽然netstat在部分新系统上需要额外安装(yum install net-tools或apt install net-tools),但它依然广泛存在于存量服务器中。
netstat -tulnp
参数含义与ss完全一致,输出格式也几乎相同,两者结果互为验证,排查时交叉使用更稳妥。
lsof命令:按端口反查进程
当你知道某个端口号,想知道是哪个程序在占用时,lsof最直接:
lsof -i:8080
输出示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 23456 root 35u IPv6 123456 0t0 TCP :8080 (LISTEN)
这一行信息说明:PID为23456的Java进程监听了8080端口,归属用户是root,如果端口被恶意程序占用,这里能直接看到启动用户和进程路径。
从端口定位到具体服务的完整链路
按端口找进程的实操组合
拿到端口号后,一套组合拳可以快速定位:
ss -tulnp | grep 8080 lsof -i:8080 fuser -v 8080/tcp
三条命令输出互为印证,fuser还能顺带查看该端口上活跃的连接数。
按进程找端口
反过来,知道服务名想查它监听了哪些端口:
ss -tulnp | grep nginx pidof nginx ls -l /proc/$(pidof nginx)/cwd
最后一条命令能直接显示进程的工作目录,方便确认是不是从非标准路径启动的异常程序。
查看远程连接状况
除了监听端口,已建立的远程连接同样值得关注:
ss -tunap | grep ESTAB netstat -tunap | grep ESTAB
大量来自异常IP的ESTABLISHED连接往往意味着服务被扫描或攻击,配合ss -s能看整体连接统计摘要,快速判断服务器是否处于异常高负载状态。
防火墙层面的端口核对
firewalld(CentOS/RHEL 7+)
查看当前放行的端口列表:
firewall-cmd --list-ports firewall-cmd --list-all
临时放行端口(重启失效):
firewall-cmd --add-port=8080/tcp
永久放行端口:
firewall-cmd --permanent --add-port=8080/tcp firewall-cmd --reload
ufw(Ubuntu/Debian)
ufw status numbered ufw allow 8080/tcp ufw delete 8080/tcp
iptables(传统方案)
iptables -L -n --line-numbers iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
核对端口时容易踩的坑是:服务监听在0.0.0但防火墙没放行,外部访问不通;或者防火墙放行了但服务只监听0.0.1,外部同样连不上,两边对照检查能避免误判。
异常端口排查与安全加固
从端口列表里识别风险
拿到完整端口列表后,优先关注三类异常:
- 非标准端口上的数据库服务(如3306、6379、27017出现在非常规端口)
- root用户启动的未知进程
- 高端口区间(10000以上)的陌生监听
处理方式建议直接查进程可执行文件路径和启动参数:
ls -l /proc/PID/exe cat /proc/PID/cmdline | tr '



