Apache htaccess中的简单速率限制

Apache htaccess中的简单速率限制,apache,.htaccess,apache2.4,Apache,.htaccess,Apache2.4,假设我有一个登录名表单: <form action="index.php" method="post"><input type="password" name="pwd"><input type="submit" /> 我知道应该使用iptables或fail2ban进行适当的速率限制,但不必走这么远,我们能做一些简单的事情吗,就在.htaccess: 如果在最后一分钟内有>=10个对此页面的请求,则将IP限制为24小时 这样的事情只能用.htacc

假设我有一个登录名
表单

<form action="index.php" method="post"><input type="password" name="pwd"><input type="submit" />

我知道应该使用
iptables
fail2ban
进行适当的速率限制,但不必走这么远,我们能做一些简单的事情吗,就在
.htaccess

  • 如果在最后一分钟内有>=10个对此页面的请求,则将IP限制为24小时

这样的事情只能用
.htaccess
(或
apache2.conf
)来完成,而不能使用其他第三方工具(Apache模块就可以了)

我强烈建议不要在您建议的级别上解决这个问题。我宁愿选择应用程序层,因为最终很可能是失败的登录尝试,您希望限制

由于我们仍然受到IPV4和NAT的困扰,您将不知道在一个IP地址后面隐藏了多少不同的合法浏览器


出现故障时,应用程序可以触发
fail2ban
iptables
活动。然而,在分布式攻击和僵尸网络的时代,我怀疑这会带来很大的不同。在您投入大量时间之前,我建议您检查日志,看看这是否是一种常见(或者更确切地说是最常见)的攻击路径。

我强烈建议不要在您建议的级别上解决此问题。我宁愿选择应用程序层,因为最终很可能是失败的登录尝试,您希望限制

由于我们仍然受到IPV4和NAT的困扰,您将不知道在一个IP地址后面隐藏了多少不同的合法浏览器


出现故障时,应用程序可以触发
fail2ban
iptables
活动。然而,在分布式攻击和僵尸网络的时代,我怀疑这会带来很大的不同。在您投入大量时间之前,我建议您检查日志,看看这是否是一种常见(或者更确切地说是最常见)的攻击路径。

如果您确实需要一种方法来“速率限制”某个特定IP,并且您需要一个Apache模块,那么这可能适合您:

mod_evasive是一个模块,用于检测网络上可能的攻击模式,类似于IPS(入侵防御系统)
关于IPS的基本解释

要设置模块,请运行

sudo apt-get install libapache2-mod-evasive 
然后使用以下命令激活模块:

sudo a2enmod evasive 
通过运行来验证安装

 sudo apachectl -M | grep evasive
预期输出:evasive20_模块(共享)
现在,我们为apache模块创建一个新文件夹,以便它可以向其中写入日志

sudo mkdir /var/log/mod_evasive
sudo chown www-data:root /var/log/mod_evasive 
让我们编辑mod_evasive的配置。我用这个例子

sudo nano /etc/apache2/mods-available/evasive.conf
请注意:切勿在/apache2/mods enabled/use/apache2/mods available/中编辑模块配置。上面提供的示例是正确的
这是一个示例配置:

 <IfModule mod_evasive20.c> 
 DOSHashTableSize 3097 
 DOSPageCount 2 
 DOSSiteCount 50 
 DOSPageInterval 1 
 DOSSiteInterval 1 
 DOSBlockingPeriod 10 
 DOSEmailNotify email@yourdomain.com 
 DOSSystemCommand "echo +%s > /proc/net/xt_recent/badguys" or block them with iptables "su root -c '/sbin/iptables -A INPUT -s %s -j DROP'" ##command that will be sent to the system - %s = attackers ip
 DOSLogDir "/var/log/mod_evasive" 
 DOSWhitelist 127.0.0.1
 </IfModule>

最后,使用

 sudo systemctl restart apache2

要将模块限制在一个位置,请使用

<Directory /var/www/test/>
  <IfModule moduleLimitedToTest>
   ... do something with module
  </IfModule>
</Directory>

... 对模块做些什么
有关如何使用容器的更多信息,请参见。您可以将其放入站点/virtualhost配置中。这是可以解释的。

尽管我强烈推荐与Olaf Kock相同的东西。

如果您确实需要一种方法来“限制”某个特定IP,并且您需要一个Apache模块,那么这可能适合您:

mod_evasive是一个模块,用于检测网络上可能的攻击模式,类似于IPS(入侵防御系统)
关于IPS的基本解释

要设置模块,请运行

sudo apt-get install libapache2-mod-evasive 
然后使用以下命令激活模块:

sudo a2enmod evasive 
通过运行来验证安装

 sudo apachectl -M | grep evasive
预期输出:evasive20_模块(共享)
现在,我们为apache模块创建一个新文件夹,以便它可以向其中写入日志

sudo mkdir /var/log/mod_evasive
sudo chown www-data:root /var/log/mod_evasive 
让我们编辑mod_evasive的配置。我用这个例子

sudo nano /etc/apache2/mods-available/evasive.conf
请注意:切勿在/apache2/mods enabled/use/apache2/mods available/中编辑模块配置。上面提供的示例是正确的
这是一个示例配置:

 <IfModule mod_evasive20.c> 
 DOSHashTableSize 3097 
 DOSPageCount 2 
 DOSSiteCount 50 
 DOSPageInterval 1 
 DOSSiteInterval 1 
 DOSBlockingPeriod 10 
 DOSEmailNotify email@yourdomain.com 
 DOSSystemCommand "echo +%s > /proc/net/xt_recent/badguys" or block them with iptables "su root -c '/sbin/iptables -A INPUT -s %s -j DROP'" ##command that will be sent to the system - %s = attackers ip
 DOSLogDir "/var/log/mod_evasive" 
 DOSWhitelist 127.0.0.1
 </IfModule>

最后,使用

 sudo systemctl restart apache2

要将模块限制在一个位置,请使用

<Directory /var/www/test/>
  <IfModule moduleLimitedToTest>
   ... do something with module
  </IfModule>
</Directory>

... 对模块做些什么
有关如何使用容器的更多信息,请参见。您可以将其放入站点/virtualhost配置中。这是可以解释的。

尽管我强烈推荐与Olaf Kock相同的产品。

谢谢您的回答。如问题中所述,我知道
fail2ban
和其他类似的技术更好,但只是想了解更多关于Apache的可能性,我们如何能够在Apache级别上完全做到这一点?我的第一句话就说明了这一点:“我强烈建议不要在您提议的级别上解决这个问题”。其余部分解释此建议谢谢您的回答。如问题中所述,我知道
fail2ban
和其他类似的技术更好,但只是想了解更多关于Apache的可能性,我们如何能够在Apache级别上完全做到这一点?我的第一句话就说明了这一点:“我强烈建议不要在您提议的级别上解决这个问题”。其余部分解释此建议谢谢@devnull。什么是IPS?您能否发布一个示例
.htaccess
代码来解释如何使用
mod_evasive
进行这样的利率限制?不客气!您不需要任何.htaccess代码。mod_evasive是一个具有自己配置的apache模块。我刚刚更新了我的答案,并提供了详细的步骤说明。非常感谢您提供的详细答案!是否可以仅针对特定目录/测试/而不是整个网站执行此操作?(这就是我提到htaccess的原因)谢谢@devnull。什么是IPS?您能否发布一个示例
.htaccess
代码来解释如何使用
mod_evasive
进行这样的利率限制?不客气!您不需要任何.htaccess代码。mod_evasive是一个具有自己配置的apache模块。我刚刚更新了我的答案,并提供了详细的步骤说明。非常感谢您提供的详细答案!有可能吗