当我们发现网站上有异常行为时,我会通过将 IP 地址添加到 Apache 配置中来阻止它们,如下所示:
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
Deny from 1.1.1.1
Deny from 2.2.2.2
# and so on...
</Directory>
这很快就会变得难以处理,那么有没有标准的方法来处理这个问题呢?也许将禁止的 IP 列表移动到一个文件中?
谢谢
答案1
我会将所有拒绝的内容放入一个文件中:
# /etc/apache2/banned_ips.conf
Deny from 1.1.1.1
Deny from 2.2.2.2
然后将其包含在您的虚拟主机中:
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
include /etc/apache2/banned_ips.conf
# and so on...
</Directory>
答案2
如果您发现这些 IP 的行为不太好,那么在防火墙级别阻止它们可能比在 Apache 中阻止它们更好,这样可以节省 Apache 的一些负载。这种方法的缺点之一是会从您的 Apache 日志中丢失这些“攻击”(尽管这可能是一件好事,而不是坏事)。
如果您使用某种防火墙,那么它肯定会有一种添加坏 IP 的简单方法。如果您的 Web 服务器中没有防火墙,则应尝试在系统中安装一个:我建议在 Linux 中使用 shorewall,或者如果您只想阻止对 Web 服务器的访问,可以使用简单的 iptables 脚本。
答案3
这里有几个选项...
mod_security
Apache 的 mod_security 似乎是显而易见的选择,因为它可以直接与 IPTables 集成并在 TCP/IP 级别(而不是用户空间)阻止用户。
请参阅此处以获取解释http://spamcleaner.org/en/misc/modsec2ipt.html
csf/iptables 防火墙
我倾向于配置像 CSF 这样的软件防火墙 - 它可以通过速率限制/阻止滥用 IP 来增加另一层保护。
失败2ban
它需要一些配置,但您可以用它做一些非常聪明的事情。http://www.fail2ban.org/wiki/index.php/Apache
你现在的方式
另外,要评论你的原始帖子,你可以在允许/拒绝指令的一行上设置多个 IP,请参阅http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html
最后,如果您要继续使用您的方法 - 您可以使用相同的语法(减去标签)在 .htaccess 级别进行阻止
例如。
order allow,deny
allow from all
deny from 1.1.1.1 2.2.2.2 3.3.3.3/24
您当前的方法似乎不可扩展,并且依赖于您判断真实/恶意流量的能力 - 因此强烈建议使用上述自动化解决方案。