
Linux 系统中排查异常端口开放,核心是确认哪些端口正在监听、由哪个进程启动、是否在预期范围内。重点看非标准服务端口(如 22、80、443、3306 等常见端口之外)、监听在 0.0.0.0 或公网 IP 上的端口,以及无明确业务需求却长期开启的端口。
查看所有监听中的 TCP/UDP 端口
使用 ss(推荐,比 netstat 更快更可靠)或 netstat 查当前监听状态:
-
sudo ss -tuln:显示所有监听的 TCP(-t)和 UDP(-u)端口,数字形式(-n),不解析名称(-l表示 listening) -
sudo ss -tulpn:加-p显示对应进程(需 root 权限),能直接看到 PID 和程序名,是定位异常端口的关键一步 - 若系统无
ss,可用sudo netstat -tulnp替代(部分发行版需安装net-tools)
重点关注高风险监听配置
检查输出中以下几类情况:
-
监听地址为
0.0.0.0:或[::]::表示该端口对所有网络接口开放,包括公网——除非明确需要,否则应限制为127.0.0.1(仅本地) -
非标准端口且无已知服务绑定:例如
:5901(VNC)、:6379(Redis 默认未授权)、:27017(MongoDB)、:9200(Elasticsearch)等,若未部署对应服务却在监听,需警惕 -
进程名异常或路径可疑:如
./a.out、/tmp/.x、unknown、或路径含随机字符串,可能为恶意程序
进一步验证可疑进程
拿到 PID 后,深入检查其合法性:
-
ps -fp <pid></pid>:查看完整启动命令和用户 -
ls -la /proc/<pid>/exe</pid>:确认可执行文件真实路径(注意是否为 symlink) -
lsof -i :<port></port>:另一视角验证端口占用(需安装lsof) -
systemctl status <service_name></service_name>:若属系统服务,查其启用状态和配置文件位置(如/etc/systemd/system/xxx.service)
快速筛查与日常加固建议
减少人工遗漏,可配合简单脚本或策略:
- 定期运行
sudo ss -tulnp | grep -v '127.0.0.1\|::1'快速过滤掉仅本地监听项 - 用
firewall-cmd --list-ports(firewalld)或ufw status verbose(UFW)核对外围防火墙是否实际放行了这些端口 - 禁用不需要的服务:
sudo systemctl disable --now xxx.service - 修改服务配置,将
bind或listen地址设为127.0.0.1(如 Redis 的bind 127.0.0.1)










