Skip to content

使用 Fail2ban 防止密码暴力破解

在这篇文章中

如果您使用密码登录服务器,攻击者可能会尝试自动猜测密码——这被称为**暴力破解攻击**。最好的保护方式是使用**基于密钥的身份验证**(无需密码)。但如果出于某种原因您仍在使用密码,则应添加额外的安全措施。最简单且最有效的工具之一是 Fail2ban

Fail2ban 是一个监控日志(服务器活动记录)的程序。如果有人连续多次尝试登录失败,Fail2ban 会**自动屏蔽其 IP 地址**一段时间。

安装 Fail2ban

Ubuntu / Debian:

sudo apt update
sudo apt install fail2ban -y

CentOS / Rocky Linux:

sudo yum update
sudo yum install epel-release
sudo yum install fail2ban

为了正常运行,必须安装防火墙。您可以安装例如 iptables

Ubuntu / Debian:

sudo apt install iptables

CentOS / Rocky Linux:

sudo yum install iptables-services

安装完成后,启用 Fail2ban 开机自启:

sudo systemctl enable fail2ban

在 Ubuntu 上,Fail2ban 会立即保护 SSH:默认情况下,如果在 10 分钟内出现 5 次登录失败,它将屏蔽该 IP 10 分钟。

如何正确配置 Fail2ban

主要设置存储在 /etc/fail2ban/jail.conf 中,并分为多个部分。
[DEFAULT] 部分设置适用于所有服务的通用规则。
各个服务(例如 SSH、Apache Web 服务器或 FTP)在其各自的部分中拥有自己的参数——例如 [sshd][apache‑auth][vsftpd] 等。

我们不建议直接修改此文件中的基础设置。相反,请创建您自己的配置文件——jail.local

sudo nano /etc/fail2ban/jail.local

您可以创建一个空文件——Fail2ban 会使用默认值填充任何未指定的选项。

SSH 保护配置示例

以下是 jail.local 文件的一个简单示例:

[DEFAULT]
ignoreip = 123.45.67.89


[sshd]
enabled = true
maxretry = 3
findtime = 120
bantime = 43200

这意味着:

  • 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] 部分添加:

    port = 2222
    

  • 如果您使用 UFW 或 firewalld 而不是 iptables,请指定:

  • 对于 UFW:action = ufw
  • 对于 firewalld:action = firewallcmd-ipset

但在大多数情况下,您可以保留所有默认设置——Fail2ban 会自动选择适当的屏蔽方法。

应用设置

保存文件后,重启 Fail2ban:

sudo systemctl restart fail2ban

如何验证一切正常工作

  1. 检查 SSH 屏蔽状态:

    sudo fail2ban-client status sshd
    
    您将看到被屏蔽的 IP 地址列表。

  2. 查看 Fail2ban 日志:

    sudo tail /var/log/fail2ban.log
    

  3. 检查 iptables 屏蔽情况(如果使用):

    sudo iptables -L
    

提示:不要通过故意从您自己的 IP 输入错误密码来测试保护——您可能会意外屏蔽自己!最好稍等片刻:机器人通常在服务器启动后的第一小时内开始攻击。

备注

Fail2ban 是一种额外的安全措施,但**最好不要为 SSH 使用密码**。设置 SSH 密钥登录——它更安全且更方便。始终将您的 IP 添加到 ignoreip 中,以免意外屏蔽自己。

question_mark
Is there anything I can help you with?
question_mark
AI Assistant ×