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模块。我刚刚更新了我的答案,并提供了详细的步骤说明。非常感谢您提供的详细答案!有可能吗