Linux端口暴露检查教程:使用ss与Nmap发现多余服务
服务器安装数据库、面板或监控工具后,部分服务可能自动监听公网地址。如果没有及时检查,管理后台、数据库和内部接口就可能被外部访问。
端口检查应同时从服务器内部和外部网络进行。内部检查负责确认哪些进程正在监听,外部扫描则用于验证防火墙和云安全组是否真正生效。
一、查看服务器监听端口
使用ss查看TCP和UDP监听状态:
sudo ss -lntup
常用参数含义如下:
l:只显示监听端口n:直接显示端口数字t:显示TCPu:显示UDPp:显示对应进程
如果只检查TCP端口,可以执行:
sudo ss -lntp
重点关注监听地址:
127.0.0.1:3306
0.0.0.0:3306
[::]:3306
127.0.0.1只允许本机访问;0.0.0.0通常表示监听所有IPv4接口;[::]表示监听IPv6接口,部分系统也可能同时接受IPv4连接。
二、查找端口对应的进程
假设发现8080端口,可执行:
sudo lsof -nP -iTCP:8080 -sTCP:LISTEN
也可以通过进程ID查看程序路径:
sudo readlink -f /proc/进程ID/exe
sudo systemctl status 服务名称
不要在不了解用途的情况下直接结束进程。它可能属于网站、监控、备份或其他业务服务。
三、从外部扫描服务器
在另一台已经获得授权的设备上运行:
nmap -sT -Pn 服务器IP
检查指定端口:
nmap -sT -Pn -p 22,80,443,3306,6379 服务器IP
只应扫描自己管理或已经获得授权的服务器。外部扫描结果可以帮助发现云安全组、系统防火墙和服务监听配置之间的差异。
四、处理多余开放端口
确认某个服务不需要外部访问时,可以采取以下措施:
- 停止并禁用不再使用的服务。
- 将服务监听地址改为
127.0.0.1或内网地址。 - 使用系统防火墙限制来源IP。
- 删除云安全组中的多余规则。
- 重新执行内部检查和外部扫描。
数据库、Redis、Docker API和管理面板不应在没有访问控制的情况下直接暴露。
五、建立定期检查
建议在以下时间重新检查端口:
- 新安装软件后
- 修改防火墙后
- 系统升级后
- 网站迁移后
- 发生安全事件后
- 每月例行巡检时
可以将端口清单与服务负责人、用途和允许来源一起记录,便于后续审计。
常见问题
1、服务器内部显示监听,为什么外部无法访问?
系统防火墙、云安全组、路由或服务访问控制可能已经拦截。需要从外部网络验证实际暴露情况。
2、修改默认端口能提高安全吗?
可以减少部分自动扫描,但不能代替身份认证、防火墙、来源限制和软件更新。
3、发现陌生端口应该立即关闭吗?
不建议。先确认对应进程、软件包和业务用途,再制定停用和回滚方案。