单纯就是想看看某个 IP 上跑了什么服务。
一个顺手:nmap -sV 118.196.xxx.xxx。
然后就发现了一个脏乱差的配景,也照见了自己运维上的漏洞。
扫描结果出来的时候,我心里咯噔了一下:
PORT STATE SERVICE 22/tcp open SSH 80/tcp open HTTP (Django/Waitress) 3389/tcp open RDP (Windows)
三个端口,三个问题:
SSH(22) — 开着,但没有做 IP 白名单。暴露在公网的 SSH,默认已经是被暴力破解的高危对象。
HTTP(80) — Django 应用通过 Waitress 跑着。HTTP,不是 HTTPS。没有证书、没有加密、一切明文传输。
RDP(3389) — 这个是最让人不安的。Windows 远程桌面直接暴露在公网,而且端口是默认的 3389。在 2025 年,RDP 暴露公网几乎等于"欢迎爆破"。
这个服务器不是我的,但看到这个配置的第一反应是——我自己的服务器是不是也有类似的问题?
回去检查了一圈:
# 原来没注意的设置 Port 22 # 默认端口,每天被扫几百次 PermitRootLogin yes # root 账户直接暴露
修复:
Port 高位数端口(如 62222) # 换端口,95% 的扫描脚本就废了 PermitRootLogin no # 禁止 root 登录 PasswordAuthentication no # 只允许密钥登录 Fail2Ban # 三次失败自动封 IP
换了端口之后,/var/log/auth.log 里的暴力尝试记录从每天几百条降到了零。
之前一直觉得"反正是个人博客/内部工具,HTTPS 无所谓"。
但仔细想想:如果登录表单没有加密,密码在公网上就是裸奔。何况我现在还在上面跑 Agent 系统、API 服务。
现状:Nginx + Let's Encrypt + certbot 效果:全站 HTTPS,自动续期 成本:0 元 投入时间:20 分钟
这件事最讽刺的地方是——运维了这么久,一直觉得"搞定 HTTPS"是个麻烦事,结果动手之后 20 分钟就搞完了。很多安全坑不是因为难,而是因为不想动。
Windows 的 RDP 暴露问题:如果非要用 RDP 远程管理,至少应该做到:
最保险的方案:关掉公网 RDP,通过 WireGuard/OpenVPN 进内网再连。
安全知识大家都知道——SSH 换端口、关密码登录、开 HTTPS。但知道和做到之间的 gap,往往是因为"先这样吧,回头再搞"。这个"回头"可能永远不来。
这次本来只是想看看一个陌生服务,结果最大的收获是发现自己的一堆漏洞。建议每个人都做一次:用 nmap 扫一下自己的公网 IP 暴露了哪些端口。 结果通常比预想的要多。
坏习惯:部署服务 → 能用就行 → 忘了 → 出事了才补救 好习惯:部署服务 → 做安全基线检查 → 定期自动扫描 → 告警处理
最便宜的防护措施 LIST:
以上全部加起来的时间成本:不到 1 小时。全部免费。
那个被扫的服务器后来怎么样了?我不知道,我也没义务通知对方——毕竟我只是路过看了一眼公网上公开暴露的服务。
但这个教训我记住了。
在问"为什么会被黑"之前,先问问自己:我锁门了吗?
这篇写出来不是为了装"我很懂安全",恰恰相反——这件事证明了我之前也不懂。分享出来只是想说:安全其实没那么难,难的是迈出第一步。
从关掉 SSH 密码登录开始吧。
本文作者:丘丘
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!