别裸奔了!给你的 VPS 装个 fail2ban 防止 SSH 暴力破解
很多朋友买了便宜的 VPS,跑跑代理或者建个站就不管了。殊不知,公网上的服务器就像没有围墙的院子,只要你开着 SSH 默认的 22 端口,分分钟就有成千上万次暴力破解尝试撞上门来。今天不聊复杂的防火墙规则,也不谈高大上的态势感知,就给大家安利一个老牌、简单但极其有效的工具——fail2ban。
为什么要用 fail2ban?
简单来说,fail2ban 就是一个“看门大爷”。它会扫描你的系统日志(比如 /var/log/auth.log),一旦发现有人在短时间内频繁尝试输入错误的密码或者 SSH 密钥,大爷就会立刻调取系统的防火墙(通常是 iptables 或 nftables),把那个 IP 拉黑封禁一段时间。
对于只有 1G 内存甚至更低配置的小鸡来说,遭遇大规模 SSH 暴力破解会瞬间占满 CPU 和 I/O,导致网站卡顿甚至无法连接。装上 fail2ban,能过滤掉绝大多数“脚本小子”的骚扰,降低系统资源消耗,更重要的是——它心里踏实。
安装步骤:两行命令搞定
绝大多数主流 Linux 发行版都直接收编了这个工具,安装非常简单。
在 Debian/Ubuntu 系统上:
sudo apt update
sudo apt install fail2ban
在 CentOS/RHEL 系统上:
sudo yum install epel-release
sudo yum install fail2ban
安装完成后,记得启动服务并设为开机自启:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
执行安装命令的终端界面示例
配置:别动主配置文件
新手最容易犯的错就是直接去编辑 /etc/fail2ban/jail.conf。记住,千万不要改这个文件!软件一更新,你的修改就会被覆盖。正确的做法是创建一个本地配置文件 jail.local,它会覆盖主文件里的默认设置。
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
核心配置详解
打开 jail.local 后,你可以看到很多段落。这里重点说一下几个关键参数的调优建议:
-
[DEFAULT] 段落
bantime: 封禁时长,默认是 10分钟。为了更清净,建议改成 3600(1小时)或者 86400(1天)。当然,如果你担心误封自己,可以先设短一点测试。findtime: 在这个时间段内(比如 600 秒)达到失败次数就封禁。maxretry: 最大允许失败次数。一般来说 3 到 5 次比较合理,输错 5 次密码肯定不是手滑了。destemail: 接收报警邮件的地址。sender: 发件人地址。action: 默认动作通常是%(action_)s(只封禁),如果你想要收到邮件通知,可以改成%(action_mwl)s。
-
[sshd] 段落
- 这部分是专门保护 SSH 服务的,默认是
enabled = true,确认它没被关掉就行。如果你改了 SSH 端口,记得在这里添加port = 你的端口号,否则它可能只监控 22 端口的日志。
- 这部分是专门保护 SSH 服务的,默认是
改完配置记得重载
修改完配置文件,一定要让它生效:
sudo systemctl reload fail2ban
# 或者使用 fail2ban-client 命令
sudo fail2ban-client reload
你随时可以用这个命令查看当前谁被关进小黑屋了:
sudo fail2ban-client status sshd
这还不够?再来点“组合拳”
虽然 fail2ban 很强,但也不能全指望它。为了极致的安全,建议配合以下操作:
- 修改默认端口:不要用 22,改成一个五位数的高端口,能避开 90% 的全网扫描。
- 禁止 root 远程登录:在
/etc/ssh/sshd_config里设置PermitRootLogin no,平时只敢用普通用户登录,需要 root 权限时再sudo -i。 - 使用 SSH 密钥登录:关闭密码认证(
PasswordAuthentication no),只允许密钥登录。绝大多数爆破都是针对弱密码的,没密码字典,他们也就无计可施了。
Fail2ban 作为防火墙保护服务器的安全概念示意图
总结
安全是个系统工程,但没有行动永远是不安全的。对于我们这种手里攥着几台廉价 VPS 的小站长来说,花两分钟装个 fail2ban,绝对是性价比最高的安全投入。别等到服务器变肉鸡了才想起来去查日志,现在就动手吧!

评论已关闭