−25%

Windows 按年付费,截至 10 月 31 日。 查看套餐

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

诚实的提醒

  • 把你自己的 IP 加到 ignoreip,这样反复打错密码不会封禁你自己。如果真的被封了,等 bantime 结束,或者使用服务商的控制台——EQVPS 为每台 VPS 都提供了这个。
  • fail2ban 是对 SSH 密钥的补充,而不是替代。 密钥让猜测永远不可能成功;fail2ban 则消除噪音,并保护其他服务。
  • 按需调整: 更长的 bantime 能吓退执着的攻击者;但太激进则有可能误封正常但不稳定的连接。

下一步

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

如何在 VPS 上创建 sudo 用户并停用 root →

常见问题

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 调长(或设为更长的值)。

评论

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

发表评论

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