设置 Fail2ban 以保护 Apache 免受 DDOS 攻击

Apache 是世界上使用最广泛和最受欢迎的 Web 服务器之一,因此保护您的网站和用户免受暴力攻击非常重要。 Fail2ban是一款用Python编写的开源入侵防御软件。 Fail2Ban 不断分析各种服务的日志文件(如 Apache、ssh、postfix...),如果检测到恶意攻击,则会在防火墙上创建规则,以在指定的时间内阻止黑客 IP 地址。 Fail2Ban 还通过电子邮件通知系统管理员其活动。

在本文中,我将解释如何安装fail2ban并配置它来监视您的Apache日志是否存在恶意身份验证失败尝试。

要求

  • 安装了 Apache 的 Ubuntu 服务器 14.04
  • Apache配置密码认证

首先,确保 Apache 服务器正在运行并且启用了密码身份验证。

接下来,您可以通过运行以下命令来安装 Fail2ban:

sudo apt-get update
sudo apt-get install fail2ban

为 Apache 配置fail2ban

fail2ban 将其配置文件“jail.conf”保存在“/etc/fail2ban/”目录中。它包含一组针对各种服务的预定义过滤器,建议您不要编辑此文件。您需要通过创建“/etc/fail2ban/jail.local”文件来启用预定义的 Apache Jails:

要创建新的“jail.local”文件,请运行:

sudo nano /etc/fail2ban/jail.local

添加以下内容:

[apache]
enabled  = true
port     = http,https
filter   = apache-auth
logpath  = /var/log/apache2/*error.log
maxretry = 3
findtime = 600
ignoreip = 192.168.1.227

[apache-noscript]
enabled  = true
port     = http,https
filter   = apache-noscript
logpath  = /var/log/apache2/*error.log
maxretry = 3
findtime = 600
ignoreip = 192.168.1.227

[apache-overflows]
enabled  = true
port     = http,https
filter   = apache-overflows
logpath  = /var/log/apache2/*error.log
maxretry = 2
findtime = 600
ignoreip = 192.168.1.227

[apache-badbots]
enabled  = true
port     = http,https
filter   = apache-badbots
logpath  = /var/log/apache2/*error.log
maxretry = 2
findtime = 600
ignoreip = 192.168.1.227

保存并关闭文件,然后重新启动fail2ban以使更改生效。

sudo /etc/init.d/fail2ban restart

您可以使用以下命令验证 Fail2Ban 在 iptables 中添加的规则:

sudo iptables -L

输出将如下所示:

笔记:您可以找到下面描述的每个监狱的详细信息:

  • [apache]:此监狱用于阻止失败的登录尝试。
  • [apache-noscript]:此监狱用于阻止正在网站上搜索要执行的脚本的远程客户端。
  • [apache-overflows]:此监狱用于阻止尝试请求可疑 URL 的客户端。
  • [apache-noscript]:此监狱用于阻止在网站上搜索要执行的脚本的远程客户端。
  • [apache-badbots]:该监狱用于阻止恶意机器人请求。

笔记:您可以在下面找到每条规则的详细信息。

  • enabled:此选项表示 Apache 保护已开启。
  • port:该选项指定fail2ban监控的服务。
  • filter:此选项引用位于的配置文件/etc/fail2ban/filter.d/目录。
  • logpath:该选项指定日志文件的位置。
  • bantime:此选项指定远程主机将被服务器阻止的秒数。
  • maxretry:此选项指定在禁止时间长度内阻止远程主机之前尝试登录失败的次数。
  • ignoreip:此选项允许您将某些 IP 地址列入白名单以防止阻止。

检查 Fail2ban 禁止状态

一旦监狱被激活,你可以使用以下命令检查fail2banfail2ban-client命令:

sudo fail2ban-client status

您可以看到您启用的所有监狱的列表。

要查看特定监狱(如 apache、apache-badbots)的状态,请运行以下命令:

sudo fail2ban-client status apache

输出如下所示:

您还可以手动设置禁止或取消禁止的 IP 地址。

例如,要使用 apache 监狱禁止 IP 地址 (192.168.1.20):

sudo fail2ban-client set apache banip 192.168.1.20

要使用 apache 监狱取消禁止 IP 地址 (192.168.1.21):

sudo fail2ban-client set apache unbanip 192.168.1.21

测试 Fail2Ban

测试你的fail2ban是否按预期工作非常重要。现在,在远程计算机上,打开 Web 浏览器并输入您的域的 URL(或服务器的 IP 地址)。当 Apache 提示进行身份验证时,请重复输入错误的用户名和密码。达到限制后,您应该被阻止并且无法访问该网站。

使用以下命令检查状态fail2ban-client命令:

sudo fail2ban-client status apache

您将看到您的 IP 地址被该网站阻止。

结论

现在,您已经有了足够的知识来配置fail2ban。使用fail2ban 是阻止洪泛(暴力攻击)的好且简单的方法。这也是限制 Apache Web 服务器上收到的错误请求数量的好方法。