很多人在购买 VPS 后,经常会好奇一个问题:
我的服务器有没有被别人扫描?
实际上,只要你的 VPS 有公网 IP,几乎每天都会被扫描。
常见的扫描包括:
- SSH 暴力破解
- Web 漏洞扫描
- 全端口扫描(nmap / masscan) 本文整理几种 简单有效的方法,查看服务器是否被扫描。
一、查看 SSH 被暴力破解情况
SSH 是最容易被攻击的服务。
在 Debian / Ubuntu 上可以通过日志查看失败登录:
journalctl -u ssh | grep "Failed password"
如果服务器被扫,你会看到类似:
Failed password for root from 185.xxx.xxx.xxx port 52341 ssh2
Failed password for admin from 45.xxx.xxx.xxx port 41211 ssh2
统计攻击 IP:
journalctl -u ssh | grep "Failed password" | awk '{print $11}' | sort | uniq -c | sort -nr | head
示例输出:
120 185.xxx.xxx.xxx
85 45.xxx.xxx.xxx
60 103.xxx.xxx.xxx
说明这些 IP 尝试登录你的服务器最多。
二、查看服务器当前连接
可以使用 ss 查看服务器当前 TCP 连接:
ss -tn
例如:
ESTAB 0 0 87.xxx.xxx.xxx:58364 87.xxx.xxx.xxx:22
ESTAB 0 0 87.xxx.xxx.xxx:46888 172.67.xx.xx:443
含义:
| 项目 | 含义 |
| Local Address | 你的 VPS |
| Peer Address | 对方服务器 |
| ESTAB | 已建立连接 |
如果看到大量陌生 IP 连接,可能正在被扫描。
三、查看服务器开放端口
先确认自己的服务器到底开放了哪些端口:
ss -tulnp
示例:
tcp LISTEN 0 128 0.0.0.0:22
tcp LISTEN 0 128 0.0.0.0:80
tcp LISTEN 0 128 0.0.0.0:443
说明服务器开放:
- 22 → SSH
- 80 → HTTP
- 443 → HTTPS 这些端口都会被扫描。
四、使用 tcpdump 查看端口扫描
如果想实时查看扫描,可以抓包:
安装工具:
apt install tcpdump
抓取 SYN 包:
tcpdump -i any -nn 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack == 0'
如果有人扫描端口,会看到类似:
IP 185.xxx.xxx.xxx.52341 > your-ip.22: Flags [S]
IP 185.xxx.xxx.xxx.52341 > your-ip.80: Flags [S]
IP 185.xxx.xxx.xxx.52341 > your-ip.443: Flags [S]
这就是典型的端口扫描行为。
五、统计连接最多的 IP
可以快速查看连接你服务器最多的 IP:
ss -ant | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
输出示例:
150 185.xxx.xxx.xxx
80 45.xxx.xxx.xxx
60 103.xxx.xxx.xxx
这些通常就是扫描你服务器的 IP。
六、如何防止 VPS 被扫描
被扫描其实是正常现象,但可以减少攻击风险。
1 安装 Fail2ban
Fail2ban 可以自动封禁暴力破解 IP:
apt install fail2ban -y
systemctl enable fail2ban
systemctl start fail2ban
查看封禁状态:
fail2ban-client status sshd
2 修改 SSH 端口
编辑 SSH 配置:
nano /etc/ssh/sshd_config
修改:
Port 22
例如:
Port 22222
然后重启:
systemctl restart ssh
3 禁止 root 密码登录
建议使用 SSH Key 登录。
PermitRootLogin prohibit-password
或者:
PermitRootLogin no
总结只要 VPS 暴露公网 IP:
- 每天都会被扫描
- SSH 每天几百次尝试很正常
- 不需要过度担心 只要做好:
- Fail2ban
- SSH Key 登录
- 关闭不必要端口 服务器基本是安全的。