Apache 2.4.x ip 黑名单

Posted

技术标签:

【中文标题】Apache 2.4.x ip 黑名单【英文标题】:Apache 2.4.x ip blacklist 【发布时间】:2014-06-03 04:11:54 【问题描述】:

我正在寻找一种在 Apache 2.4.x 中将 IP 地址列入黑名单的简单方法。我的网站将尝试非法操作的 IP 地址记录到文本文件中。我想在 Apache 中使用这个文本文件来拒绝对这个 ip 列表的所有虚拟主机的所有访问。最好的方法是什么(最简单且资源消耗最少的方法)? 找到this,但这仅适用于 2.2.. 不确定这如何适用于 2.4.. 干杯。

编辑:这是一个运行 apache x64 的 windows x64 机器

【问题讨论】:

如何将 apache mod_rewrite 列入黑名单 - perishablepress.com/… 无论如何 - ips 应该在防火墙中被阻止,而不是 apache2 如果他们需要阻止特定 apache 文件夹中的特定 ip,那你就大错特错了。 【参考方案1】:

@vastlysuperiorman 说得对,csf/lfd 在这方面做得最好。不幸的是,它们只能在 linux 上运行。

This free utilitypromises to provide the same functionality:动态监控访问尝试并自动阻止 IP 地址。如果出现误报,您可以使用命令解除阻止。当然值得做空。

另一种方法是创建一个 VM(如果您的平台支持虚拟化)部署一个非常小的规格 linux 机器,并将其用作代理。这应该很容易实现。顺便说一句,为什么不只使用linux? .. :-)

(这应该是对 @vastlysuperiorman 帖子的评论,但我没有足够的 SO 代表来评论其他人的帖子)

Edited to suggest a possible apache 2.4 based solution:

在apache中翻译2.2和2.4之间的ACL指令

2.2 语法

order Deny,Allow
include conf/IPList.conf
Allow from all

2.4 语法

DocumentRoot /some/local/dir

<Directory /some/local/dir/>
   <RequireAll>
      Require all granted
      Include conf/IPList.conf
   </RequireAll>
</Directory>

#this will also work
<Location />
   <RequireAll>
      Require all granted
      Include conf/IPList.conf
   </RequireAll>
</Directory>

# conf/IPLIst.com is actually in /etc/apache2/conf/IPList.conf 
#   (ie, paths are relative to where apache is installed.  
#    I guess you can also use the full path to the list.

在 conf/IPList.conf 中,您将有单独的行,其中包含如下条目

不需要 ip 10.10.1.23 不需要 ip 192.168.22.199 不需要 ip 10.20.70.100

使用 mod-rewrite 和 IP 列表进行封禁

要使重定向到另一个页面起作用,您需要将 RewriteRule 保留在您要保护的基本 URL 之外。 例如,重定向在 DocumentRoot 上的 Directory 指令或“/”上的 Location 指令下不起作用,因为禁令会影响我们要显示的状态页面。 因此,最好将其保留在 Directory 或 Location 指令之外,或链接到另一个未受保护的 Web 服务器上的状态页面。
#Required set of rewrite rules
RewriteEngine on
RewriteMap    hosts-deny  txt:/etc/apache/banned-hosts
RewriteCond   $hosts-deny:%REMOTE_ADDR|NOT-FOUND !=NOT-FOUND [OR]
RewriteCond   $hosts-deny:%REMOTE_HOST|NOT-FOUND !=NOT-FOUND
RewriteRule   ^  /why-am-i-banned.html

##  inside our banned hosts file, we have:
## /etc/apache2/banned-hosts (maintain the format .. its not just a plain text file)
## 

193.102.180.41 -
192.168.111.45 -
www.example.com -
www.sumwia.net -

# inside our status page, could be html as below or a plain text file with '.txt' extension
#/var/www/html/why-am-i-banned.html
#
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <title>Why is my IP banned?</title>
</head>
<body>
<h2>Why is my IP address banned?</h2>
<p>
To manage spammers and for other security needs, our server automatically blocks      
suspicious IP address.  If however you reckon your IP address has been blocked 
wrongfully, please contact us.
</p>
</body>
</html>

当然,您可以解析日志文件并根据需要填充 conf/IPList.conf 或 /etc/apache2/banned-hosts ..

作为短期解决方案

允许您使用 2.2 语法的替代方法是安装 mod_access_compat 模块并继续使用已弃用的 2.2 样式“拒绝,允许”指令。但这仅作为短期解决方案是可取的,因为该模块只是用于帮助过渡,并且可能会在 apache 2.4 的未来版本中消失

【讨论】:

感谢您的意见,我会看看,但这个解决方案对我来说不是很好,因为它基本上是由软件防火墙而不是 Web 服务器级别处理的,因为我可能会喜欢重定向到一个页面:您因非法操作而被禁止,如果您认为这是一个错误,请给我发邮件等等等等。所以我真的很想看到 Apache 2.4 的解决方案... 好的,很公平。然后你将不得不专注于基于 modrewrite 的解决方案。看看this question .. 和perhaps, this .. 和this also looks useful 是的,第一个链接在我的消息中,实际上希望有一个 2.4 版本... apache 2.2 和 2.4 没有太大区别,那么你需要翻译成 2.4 的语法吗?接受答案的例子还是 RewriteMap 的例子? 拒绝,允许在 2.4 中发生了变化,因为我对此不太擅长,但可以接受的答案..【参考方案2】:

我也没有看到从 Apache 内部动态阻止访问的好方法。有一些“hacky”方法:您可以设置一个环境变量以包含 IP 列表,然后将模块与 $REMOTE_ADDR 和 env 函数一起使用,但这有点牵强。 Details on the Expression Parser

但是,我使用了几个有助于保护 Apache 服务器的轻量级模块。

ConfigServer 防火墙 (CSF/LFD) 是适用于 linux 系统的绝佳解决方案。它提供了一种管理 iptables 的简单方法,并且可以设置为进行暴力检测和阻止。信息here


编辑: 将以下行添加到 /etc/csf/csf.deny 以包含您的自定义 IP 阻止列表:

Include /var/www/example.deny

或者,更新您的脚本以直接将 IP 地址附加到 csf.deny:

echo $badIP >> /etc/csf/csf.deny

或使用 CSF 命令行选项(首选):

csf -d 10.20.30.40

CSF 自述文件here


mod_security 是我最喜欢的 Apache/nginx 模块之一。它检测危险的 GET 和 POST 请求并相应地阻止访问。如果设置正确,它将触发 CSF 阻止经常违反规则的 IP 地址。详情here

【讨论】:

感谢您的评论,但我已经知道并使用 mod_sec,我正在寻找一个实用的答案,例如,如何在 mod_sec 中进行操作,否则...... 使用 csf 对您来说可能是一个不错的选择。如果您的站点已经包含将 IP 地址写入文件的脚本,您可以简单地将地址附加到 /etc/csf/csf.deny。这可以通过直接附加该行来完成,或者通过在命令行上运行命令csf -d 10.20.30.40 来完成。或者,您可以将 Include /var/www/example.deny 添加到 csf.deny 以包含您的自定义阻止列表。我的答案相应地进行了编辑。 我必须阅读这个,因为我不知道 csf。感谢您的消息,将尽快发表评论:) 是的,看起来不错,但我忘了说,这是一个 windows 盒子:( 啊……对不起。这就是我没有发布更普遍的回复所得到的。

以上是关于Apache 2.4.x ip 黑名单的主要内容,如果未能解决你的问题,请参考以下文章

Apache访问控制

仅限 Apache 2.4 白名单 Cloudflare

如何在负载均衡器 Laravel 后面的 nginx 中将远程 IP 地址列入白名单

Powershell检测邮箱IP/出口IP是否被列入spamhaus等黑名单

Springboot拦截器实现IP黑名单

Apache Pig 如何在加载功能中加入白名单或黑名单?