+7 (7232) 91-95-12

帮助

保护 SSH 免受暴力破解攻击:Fail2ban 的应用

为了确保您的服务器免受暴力破解攻击(即攻击者尝试通过穷举法破解密码),建议配置并使用密钥认证,而非密码认证。

另一种防御方法是使用 Fail2ban 工具。Fail2ban 会分析服务器上运行的服务日志,并在发现可疑活动时锁定潜在攻击者的 IP 地址。Fail2ban 可用于保护多种服务,如 Apache、FTP、dovecot 等。

在本文中,我们将介绍 Fail2ban 的基本配置,以保护 SSH 服务免受暴力破解攻击。

要在 Ubuntu/Debian 系统上安装 Fail2ban,请执行以下命令:

sudo apt update
sudo apt install fail2ban -y

在 CentOS 上安装:

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

将 Fail2ban 添加到系统启动项中:

sudo systemctl enable fail2ban

在 Ubuntu 上,安装 Fail2ban 后,对 SSH 的保护将自动激活。默认情况下,如果在 10 分钟内记录到 5 次认证失败,Fail2ban 将锁定该 IP 地址 10 分钟。

工具的其他运行参数可以在设置中进行修改。

Fail2ban 配置文件

Fail2ban 的设置保存在配置文件 /etc/fail2ban/jail.conf 中。

设置分为多个部分。在 [DEFAULT] 部分指定了定义 Fail2ban 整体功能的通用参数,这些参数对大多数服务有效。特定服务的具体参数则在相应的版块中指定(例如 [sshd]、[apache-auth]、[vsftpd])。

建议不要直接修改 jail.conf 文件中的参数。相反,应在同一目录下创建一个新的 jail.local 文件。

您可以备份原始文件(如果您打算为多个服务而非仅为 SSH 配置 Fail2ban,这将非常方便):

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

您也可以创建一个同名的空文件并输入所需参数:

sudo touch /etc/fail2ban/jail.local

在新文件中,只需指定您想要更改的设置值即可。对于所有未单独指定的参数,Fail2ban 将使用默认值。

配置 SSH 保护

打开 jail.local 文件进行编辑:

sudo nano /etc/fail2ban/jail.local

以下是可以添加到文件中的设置示例:

[DEFAULT]
ignoreip = 95.111.123.21

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

这些设置意味着:如果除 ignoreip 中指定的地址外,任何 IP 地址在 2 分钟内出现 3 次登录失败,Fail2ban 将锁定该地址 12 小时。

在 DEFAULT 节中可以指定锁定时间 (bantime)、尝试次数 (maxretry) 等参数。但在本教程中,我们将为 SSH 在独立版块中定义大部分设置,而在 DEFAULT 部分仅指定 ignoreip 参数。

ignoreip 参数代表 IP 地址“白名单”,这些地址在连接失败时不会被锁定。您可以指定自己的 IP 地址(如果是静态地址)或您连接服务器时使用的地址。可以指定多个地址,用空格分隔,也可以使用子网掩码。

如果您不打算使用“白名单”,只需在行首添加 # 符号将其注释掉即可。

[sshd] 版块包含针对特定服务(即 SSH)的 Fail2ban 运行设置。请注意,根据系统的不同,该版块可能命名为 [sshd]、[ssh] 或 [ssh-iptables](可以在 jail.conf 文件中查看)。

如前所述,如果文件中缺少特定参数,Fail2ban 将使用默认值。因此,只需指定您想要修改的设置即可。

上述设置中包含以下参数:

  1. enabled:此必填参数定义该版块是否启用。要启用版块,值必须为 true(默认值)。请注意,在 CentOS 中,此参数默认可能被注释掉。如果您正在编辑主文件 jail.conf 的副本,请确保取消此行的注释(删除 # 符号)以激活该版块。

  2. bantime:此参数定义锁定的持续时间(以秒为单位),即对可疑 IP 地址执行封禁的时间周期。

  3. maxretry:此参数定义在 findtime 周期内允许的失败尝试次数,超过此次数后将执行封禁。

  4. findtime:此参数定义时间周期(以秒为单位),在此期间内,特定行为(在本例中为连接失败)必须重复发生达到指定次数 (maxretry) 才会触发封禁。

此外,这些设置中还可以指定其他参数,例如:

  • port:该服务使用的端口,在本例中为 SSH。如果 SSH 使用非标准端口(不是 22),必须在此处指定。如果使用标准端口,则无需指定此参数。

  • logpath:Fail2ban 分析的日志文件路径。默认情况下,这是 sshd 日志的标准路径。

  • action:锁定 IP 地址时执行的操作。默认情况下,通过修改 iptables 规则来锁定可疑 IP。

要完全封锁该 IP 的所有端口,可以使用:action = iptables-allports。如果服务器使用的是 firewalld 或 ufw,可以为 action 参数指定相应的值来配合它们过滤,如 firewallcmd-ipsetufw

要查看 /etc/fail2ban/action.d 目录的内容,可以使用以下命令:

ls /etc/fail2ban/action.d

这将允许您查看 Fail2ban 所有可用的操作配置文件。

在修改完文件后,请保存。然后重启 Fail2ban:

 

sudo systemctl restart fail2ban.service 

 

检查

配置完 Fail2ban 后,值得检查其运行情况。建议在保存设置几小时后再进行检查,以便获得更直观的结果。

要查看已锁定的 IP 地址列表,可以使用 iptables 命令:

sudo iptables -L

 

此外,您还可以查看 Fail2ban 的运行日志:

sudo tail /var/log/fail2ban.log

 

关于 Fail2ban 的状态和活动信息也可以通过其界面获取:

sudo fail2ban-client status sshd

 

这些步骤将使您能够确保使用 Fail2ban 配置的防御措施有效运行。

如有任何疑问,请联系我们