使用 Fail2ban 防止密码暴力破解¶
在这篇文章中
如果您使用密码登录服务器,攻击者可能会尝试自动猜测密码——这被称为**暴力破解攻击**。最好的保护方式是使用**基于密钥的身份验证**(无需密码)。但如果出于某种原因您仍在使用密码,则应添加额外的安全措施。最简单且最有效的工具之一是 Fail2ban。
Fail2ban 是一个监控日志(服务器活动记录)的程序。如果有人连续多次尝试登录失败,Fail2ban 会**自动屏蔽其 IP 地址**一段时间。
安装 Fail2ban¶
Ubuntu / Debian:
CentOS / Rocky Linux:
为了正常运行,必须安装防火墙。您可以安装例如 iptables:
Ubuntu / Debian:
CentOS / Rocky Linux:
安装完成后,启用 Fail2ban 开机自启:
在 Ubuntu 上,Fail2ban 会立即保护 SSH:默认情况下,如果在 10 分钟内出现 5 次登录失败,它将屏蔽该 IP 10 分钟。
如何正确配置 Fail2ban¶
主要设置存储在 /etc/fail2ban/jail.conf 中,并分为多个部分。
[DEFAULT] 部分设置适用于所有服务的通用规则。
各个服务(例如 SSH、Apache Web 服务器或 FTP)在其各自的部分中拥有自己的参数——例如 [sshd]、[apache‑auth]、[vsftpd] 等。
我们不建议直接修改此文件中的基础设置。相反,请创建您自己的配置文件——jail.local:
您可以创建一个空文件——Fail2ban 会使用默认值填充任何未指定的选项。
SSH 保护配置示例¶
以下是 jail.local 文件的一个简单示例:
这意味着:
ignoreip— 您的“白名单”IP 地址。即使您输错密码,Fail2ban 也**永远不会屏蔽**它。在此处指定您的 IP(如果是静态 IP)。您可以添加多个地址,用空格分隔。enabled = true— 启用 SSH 保护。maxretry = 3— 最多允许 3 次登录失败。findtime = 120— 在过去 120 秒(2 分钟)内。bantime = 43200— 屏蔽 12 小时(43200 秒)。换句话说:如果某个 IP(非您的 IP)在 2 分钟内登录失败 3 次,它将被屏蔽 12 小时。
备注
根据所使用的系统,该部分可能是 [sshd]、[ssh] 或 [ssh‑iptables]——请在 jail.conf 中确认。
其他设置¶
-
如果您更改了 SSH 端口(例如从 22 改为 2222),请在
[sshd]部分添加: -
如果您使用 UFW 或 firewalld 而不是 iptables,请指定:
- 对于 UFW:
action = ufw - 对于 firewalld:
action = firewallcmd-ipset
但在大多数情况下,您可以保留所有默认设置——Fail2ban 会自动选择适当的屏蔽方法。
应用设置¶
保存文件后,重启 Fail2ban:
如何验证一切正常工作¶
-
检查 SSH 屏蔽状态:
您将看到被屏蔽的 IP 地址列表。 -
查看 Fail2ban 日志:
-
检查 iptables 屏蔽情况(如果使用):
提示:不要通过故意从您自己的 IP 输入错误密码来测试保护——您可能会意外屏蔽自己!最好稍等片刻:机器人通常在服务器启动后的第一小时内开始攻击。
备注
Fail2ban 是一种额外的安全措施,但**最好不要为 SSH 使用密码**。设置 SSH 密钥登录——它更安全且更方便。始终将您的 IP 添加到 ignoreip 中,以免意外屏蔽自己。