EQVPS

如何在 VPS 上设置 fail2ban 阻止暴力破解攻击

阻止针对你服务器的持续密码猜测:fail2ban 监控日志,自动封禁登录失败次数过多的 IP。安装它、启用 SSH jail、调整封禁规则——只需几条命令。

即使其他方面都已经锁紧,机器人也从不会停止对 22 端口的密码尝试——这是持续的背景噪音和负载。fail2ban 会监控你的日志,自动封禁登录失败次数过多的任何 IP,让攻击者尝试几次后就被挡在外面,而不是无休止地猜下去。安装很简单,日志垃圾信息却能大幅减少。

1. 安装 fail2ban

sudo apt update && sudo apt install -y fail2ban

2. 创建本地配置

不要直接编辑系统自带的 jail.conf——而是在 jail.local 中覆盖它:

sudo tee /etc/fail2ban/jail.local > /dev/null <<'EOF'
[DEFAULT]
# don't ban yourself — add your home/office IP
ignoreip = 127.0.0.1/8 ::1
bantime  = 1h
findtime = 10m
maxretry = 5

[sshd]
enabled = true
EOF

这会在 10 分钟内出现 5 次登录失败后,将该 IP 封禁一小时。把你自己的 IP 加到 ignoreip 里,这样打错一次密码也不会把你锁在外面。

3. 启动并设置开机自启

sudo systemctl enable --now fail2ban

4. 检查 SSH jail

sudo fail2ban-client status sshd

你会看到当前有多少个 IP 被封禁——短短几分钟内的数字往往会让人意外。

管理封禁

sudo fail2ban-client set sshd unbanip 1.2.3.4   # lift a ban
sudo fail2ban-client status                     # list all jails
sudo systemctl reload fail2ban                  # apply config changes

诚实的提醒

下一步

fail2ban 只是加固服务器的一层防护。把它和 SSH 密钥认证UFW 防火墙结合起来,并在对外暴露任何东西之前,走一遍完整的新 VPS 安全清单

常见问题

fail2ban 到底是做什么的?

它监控日志文件(比如 SSH 的认证日志),寻找同一个 IP 的重复失败记录,一旦某个 IP 超过阈值,就会添加一条临时的防火墙封禁。那些整天敲打 22 端口的机器人,尝试几次后就会被拦下,而不是无休止地猜下去。这是自动化的、持续生效的防护。

已经用了 SSH 密钥,还需要 fail2ban 吗?

它们解决的是不同的问题。SSH 密钥让猜测变得几乎不可能;fail2ban 则能减少无尽尝试带来的噪音和负载,并保护你暴露出去的其他服务(邮件、网页登录等)。只用密钥登录 SSH 时风险已经很低,但 fail2ban 是廉价的纵深防御,还能减少日志垃圾信息。

fail2ban 会误封我自己吗?

有可能——如果你自己把密码打错好几次,你会被封禁 bantime 那么久,之后自动解封。为了避免把自己锁在外面,把你自己的 IP 加到配置里的 'ignoreip',并记住服务商的控制台(EQVPS 就提供)总能让你重新进去。

怎么查看谁被封了,或者解封某个 IP?

用 'sudo fail2ban-client status sshd' 查看该 jail 及被封的 IP。要解除封禁:'sudo fail2ban-client set sshd unbanip 1.2.3.4'。要永久信任某个 IP,把它加到 ignoreip 里再重新加载。

bantime、findtime 和 maxretry 分别是什么?

maxretry 是允许的失败次数,findtime 是统计这些失败的时间窗口,bantime 是封禁持续的时长。例如 10 分钟内失败 5 次会触发 1 小时封禁。对付更执着的攻击者,可以把 bantime 调长(或设为更长的值)。

评论

暂无评论。来做第一个吧。

发表评论

评论在显示前会经过审核。