AWS上有许多EC2服务器,在负载平衡器(ELB)后面运行apache。 每隔一段时间,一些IP地址会滥用EC2服务器上托pipe的API并导致拒绝服务。 我无法访问负载平衡器,所以我需要在服务器级别阻止访问。
我根据负载平衡器提供的X-Forwarded-For头来改变apache访问日志来显示IP(否则它只显示负载平衡器的IP),所以我可以识别这些IP并阻止它们(再次指定X- Forwarded-For)类似于:
<Directory api_dir> SetEnvIF X-FORWARDED-FOR "1.1.1.1" DenyIP Order allow,deny allow from all deny from env=DenyIP </Directory>
但是,这仍然意味着我需要手动处理每个攻击,并且我的服务器因此遭受了一些停机时间。
推荐的方式是自动阻止重复HTTP调用的攻击,而不是基于IP,而是基于来自负载均衡器的Forwarded-For头。
你可以用mod_evasive和mod_rpaf结合来做到这一点 。
前者允许你通过IP地址进行限制(例如阻止DOS攻击),后者允许你将X-FORWARDED-FOR地址显示为IP,正如在这个问题的答案的评论中所讨论的那样。
(如果mod_rpaf不适合你,你必须破解mod_evasive的来源。)
我写了一篇关于如何使用OSSEC (一种基于FOSS主机的入侵检测系统)的Apache 2.4的扩展博客文章 。 这是TLDR:
Require not ip 1.2.3.4到上述目录。 command和active-responseconfiguration块的设置,如果触发器阻塞IP地址10分钟6级或以上的警报。 local_rules.xml定义文件添加一些自定义规则,用于logging到您的Apache访问日志中的HTTP请求,当与Y 时间段内的 X 频率匹配时,将触发上述主动响应(例如,在10秒内超过50次,滥用)。 如果您还没有使用OSSEC(或其他一些HIDS),我会尽力推荐它 – 它非常容易设置,并提供了很多function。 DigitalOcean为Ubuntu 14.04提供了一个很好的OSSEC安装教程 (即使对于其他Linux,您也可以很好地遵循)。 您可以在每台服务器上以“本地”模式安装,以便开始使用,之后再重新安排,以使用其独特的客户端 – 服务器体系结构。
另外请注意,每次将IP添加到阻止列表时,此技术都要求自动重新启动Apache,对于某些阻止列表,这可能不是启动器。