anthonymartin/aws_acl_fail2ban

此软件包包含一个脚本和fail2ban配置,允许您在使用AWS弹性负载均衡器(ELB)和Apache网络服务器时使用fail2ban。

v1.0.0 2016-09-17 20:09 UTC

This package is auto-updated.

Last update: 2024-09-11 03:18:08 UTC


README

此软件包包括一个脚本和fail2ban配置,允许您在使用AWS弹性负载均衡器(ELB)和Apache网络服务器时使用fail2ban。当在ELB这样的反向代理负载均衡器后面时,它有助于保护您的网站免受DoS和暴力破解攻击。在使用ELB与fail2ban时需要特别注意,因为ELB仅将客户端IP地址通过X-Forwarded-For头传递给服务器。遵循此指南将使您能够将ELB、Apache网络服务器和AWS ACL与fail2ban结合使用,以实现动态防火墙解决方案。

依赖项

  • AWS CLI必须安装,并且您的访问凭证必须按照AWS CLI文档中的说明设置(通过~/.aws/config或通过环境变量)。**如果有人想更新代码以使用AWS composer包,我相信这将使许多人更容易**
  • 必须在AWS中创建一个ACL并将其与您的负载均衡器和网络服务器关联
  • 确保您在AWS中为AWS CLI配置的凭证允许对ACL资源进行读写。
  • 您的Apache日志必须记录X-Forwarded-For头,而不是ELB IP地址。如何做到这一点的说明如下。

安装

  1. 推荐的安装方法是使用composer安装: composer require anthonymartin/aws_acl_fail2ban - 或者,您可以克隆或下载此存储库。
  2. 确保您的Apache配置和fail2ban配置正确。以下提供了一些帮助。

Apache配置

  1. 启用RemoteIP模块
  2. 更新Apache配置 - 下面的配置是我在/etc/apache2/apache2.conf中找到的配置。务必包括RemoteIPHeader并将LogFormat替换为下面的行。
  RemoteIPHeader X-Forwarded-For
  LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
  LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
  LogFormat "%h %l %u %t \"%r\" %>s %O" common
  LogFormat "%{Referer}i -> %U" referer
  LogFormat "%{User-agent}i" agent
  1. 运行 sudo service apache2 reload

fail2ban配置

  1. fail2ban/action.d/aws-acl.conf复制到/etc/fail2ban/action.d/目录
  2. fail2ban/filter.d/aws-acl-example-filter.conf复制到/etc/fail2ban/filter.d/目录
  3. 更新actionbanactionunban定义在/etc/fail2ban/action.d/aws-acl.conf中。您需要将两个/path/to/aws-acl-fail2ban实例替换为您服务器上aws-acl-fail2ban的位置。如果您使用composer安装,则位置是vendor/bin/aws-acl-fail2ban,否则位置在bin/aws-acl-fail2ban中。更新actionbanactionunban时,应使用绝对路径。
  4. /etc/fail2ban/action.d/aws-acl.conf中的两个ACL_ID_GOES_HERE实例替换为您想要使用的ACL的acl-id。
  5. 创建或更新您的jail.local配置。如果您有自己的过滤器,请替换下面的过滤器定义。此软件包中包含的示例过滤器配置将匹配所有非图片、CSS或javascript的POST和GET请求(请注意,截至目前,它不包括字体文件,但可能应该包括)。此过滤器与jail.local配置结合使用将有助于阻止爬行尝试和某些类型的HTTP洪水DoS或暴力破解攻击。以下是一个jail.local配置示例
[aws-acl-example]
enabled = true
filter = aws-acl-example-filter
action = aws-acl
  sendmail-whois[name=LoginDetect, dest=youremail@example.com, sender=youremail@local.hostname, sendername="Fail2Ban"]
logpath = /var/log/apache2/access.log
maxretry = 60
findtime = 60
bantime = 14400