服务器端口扫描风险,如何自查暴露端口
服务器端口扫描风险的本质,是攻击者用工具批量探测你的公网 IP,一旦发现开放的高危端口(如 22、3306、6379),就可能尝试暴力破解或直接利用漏洞。
本文面向零基础运维,教你用几条命令和防火墙配置,完成暴露端口的自查与收敛,最终能独立判断哪些端口该关、哪些该限制来源。
先看监听列表,弄清哪些端口真的在对外
登录服务器后,第一件事不是急着关端口,而是先看清现状。ss 是 Linux 上查看网络连接的工具,比老旧的 netstat 更快。
执行以下命令列出所有正在监听的 TCP 和 UDP 端口:
ss -tulnp
参数含义:-t 只看 TCP,-u 只看 UDP,-l 只看监听状态,-n 显示数字端口,-p 显示对应进程。
重点看两列:
- Local Address 显示
0.0.0.0:端口或[::]:端口,表示监听所有网卡,公网可直接访问。 - Local Address 显示
127.0.0.1:端口,表示只监听本机,外部无法连接,这类通常风险较低。
如果看到 0.0.0.0:3306(MySQL)或 0.0.0.0:6379(Redis),而它们本应只被本机应用访问,这就是需要处理的暴露端口。
从外部视角确认暴露范围
服务器本地看到监听,不等于公网一定可达,中间可能还有云安全组或机房防火墙。
要确认攻击者眼中的你,需要从外部扫描。
最直接的方法是用另一台公网机器执行 nmap。
如果手头没有,也可以用在线端口扫描服务,但注意不要扫描非自己拥有的 IP。
nmap -sT -p 1-10000 你的服务器公网IP
-sT 表示用 TCP 连接方式扫描,不需要 root 权限。
输出中 open 的端口就是从公网真实可达的。
这一步能帮你区分两类问题:
- 本地监听且公网 open:必须优先处理。
- 本地监听但公网 filtered 或 closed:说明安全组已拦截,风险暂时可控,但仍建议收敛监听地址。
按风险等级关闭或限制高危端口
常见高危端口包括 22(SSH)、3306(MySQL)、6379(Redis)、27017(MongoDB)、9200(Elasticsearch)。
处理方式分三种,按优先级选择。
第一种:改监听地址,只允许本机访问。
适合数据库、缓存这类只被本机应用调用的服务。
以 Redis 为例,编辑配置文件:
vim /etc/redis/redis.conf
找到 bind 127.0.0.1,确保没有写成 0.0.0.0。
改完重启服务:
systemctl restart redis
MySQL 则在配置中设置 bind-address = 127.0.0.1。
这样即使防火墙有疏漏,外部也无法直连。
第二种:用防火墙限制来源 IP。
如果确实需要远程访问,比如 SSH,建议只放行自己的固定 IP。
以 firewalld 为例:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="你的IP" port port="22" protocol="tcp" accept'
firewall-cmd --reload
使用 ufw 的系统可以执行:
ufw allow from 你的IP to any port 22 proto tcp
第三种:云平台安全组收口。
登录云厂商控制台,进入安全组或防火墙规则,把入方向规则中 0.0.0.0/0 的高危端口删除或改为指定 IP。
安全组是公网流量的第一道闸,优先级高于系统防火墙。
容易踩坑的地方
- 只改防火墙,不改监听地址。 安全组或防火墙规则一旦被误删,服务立刻全网暴露,双保险更稳妥。
- 忘了 UDP 端口。
ss -tulnp里的-u就是提醒你 UDP 同样要查,DNS、SNMP 等服务常走 UDP。 - 扫描时误伤自己。 部分云厂商会对高频扫描行为做告警甚至封禁,自查请控制频率,只扫自己的 IP。
- 改完不验证。 关端口后一定要从外部重新扫一次,确认状态从
open变为filtered或closed。
验证修复结果与日常复查
处理完成后,回到外部机器重新执行:
nmap -sT -p 22,3306,6379 你的服务器公网IP
期望结果是这些端口不再显示 open。
同时在服务器上执行 ss -tulnp,确认监听地址已变为 127.0.0.1 或服务已停止。
建议养成每月复查一次的习惯,重点关注新装软件带来的新监听端口。
如果服务器数量较多,可以写一个简单脚本定期采集 ss -tulnp 输出并对比变化。
常见疑问
问:关闭端口会不会影响业务?
只看监听地址和来源限制,通常不影响本机应用调用。
真正需要确认的是:有没有外部客户端直连这个端口。
如果不确定,先限制来源 IP 观察几天,再决定是否完全关闭。
问:用了安全组还需要系统防火墙吗?
需要。
两者作用层级不同,安全组管公网入口,系统防火墙管主机层面。
多层防护可以避免单一配置失误导致全网暴露。
问:端口扫描算违法吗?
未经授权扫描他人服务器可能违反相关法律法规。
自查只应针对自己拥有或获得书面授权的 IP,且控制扫描频率。
问:22 端口必须改吗?
不必强行改端口号,改端口只能减少自动化扫描命中,不能替代密钥登录和来源限制。
更有效的做法是禁用密码登录、只允许密钥认证,并限制来源 IP。