所有的 HomeLab 玩家或者买过廉价 VPS 的人肯定都在某个下午突然发现:自己的服务器硬盘疯狂读写,打开日志 /var/log/auth.log 一看,每秒钟都有上百个来自不知名国家的 IP 正在用字典疯狂暴力爆破你的 SSH root 账户密码。
这在 2025 年绝不是什么新鲜事,甚至它们都已经不用自己写脚本,全靠云端的肉鸡僵尸网络在无差别地扫段(遍历全网所有 IPv4 地址)。
为了应对这种不仅恶心而且占用大量日志和系统资源的流氓行为,除了我们老生常谈的“关掉密码登录,只用带有 RSA 或 Ed25519 密钥认证”之外,你至少还需要一位能自动给你建立黑名单防火墙的保安大爷——这Fail2ban。
传统大门的卫士:Fail2ban 基础魔法
Fail2ban 的逻辑简单却极度有效:
- 它潜伏在你的服务器后台,死死盯着你的各个日志文件(比如 SSH 日志、Nginx 访问日志)。
- 它懂得看脸(正则匹配那些典型的报错“密码错误”或“没有权限”)。
- 如果 5 分钟内,同一个 IP 连续因为输错密码失败了 3 次,它就直接去底层的
iptables或firewalld里下达一条封杀令:这孙子,拉黑 24 小时!
安装和配置极其简单:
在 Debian 系中直接 apt install fail2ban,然后新建一个 /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 600
bantime = 86400
只需这样几行,那些毫无技术含量的爆破机器人就会在 3 次尝试后,收到一个冷冰冰的 Connection Refused,并彻底从你的带宽世界里消失一整天。
与时俱进的高玩:联动 Cloudflare 封杀一切!
但这还不够。在 2025 年,哪怕把流氓 IP 挡在 iptables,这也是在耗费你本机的极小部分连接资源。既然我们很多站点的域名都套了 Cloudflare 的 CDN 和 WAF,何不直接在机房之外就把这些攻击者拦死?
Fail2ban 提供了一个极其赛博朋克的动作(Action):cloudflare。
- 去你的 Cloudflare 后台,生成一个可以操作你域名防火墙(WAF)的 API Token。
- 编辑 Fail2ban 的 Action 文件,把这个 Token 塞进去。
- 当 Fail2ban 后台发现有人疯狂扫描你暴露的 Nginx 后门或者探针时。
- 它不会通知本机的 iptables,而是直接调用 Cloudflare 的开放 API!
- 下一秒,在全球 Cloudflare 所有边缘节点上,这名攻击者的 IP 被彻底标注为“恶意”。只要他想碰你网站,在浏览器里弹出来的连握手的机会都没有了。
“隐身”与“伪装”的哲学
最后,如果你在出海服务器上跑了一些敏感的、大流量的高级探针或者代理协议。仅仅防爆破是不够的。
你必须要懂得通过类似于 WebSocket 加 TLS 或者 XTLS 这类底层加密,把这些流量完完全全地裹在一层普通的 HTTPS 数据包里。同时在你的 Nginx 前面设置一条 Fallback 回落:如果探针或审查机器不知道握手密码访问了过来,它应该看到的是哪怕一个正经的英文菜谱网页,而不是一个带错误提示的 JSON 数据。
在这个肉眼难辨敌友的暗黑森林里, Fail2ban 大爷在门口查验,Cloudflare 御林军在长城外部守卫,再配上完美的内网流量混淆术,你的小服务器才能在互联网上坚如磐石。