anthonymartin / aws_acl_fail2ban
此软件包包含一个脚本和fail2ban配置,允许您在使用AWS弹性负载均衡器(ELB)和Apache网络服务器时使用fail2ban。
v1.0.0
2016-09-17 20:09 UTC
Requires
- php: >=5.3.0
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地址。如何做到这一点的说明如下。
安装
- 推荐的安装方法是使用composer安装:
composer require anthonymartin/aws_acl_fail2ban
- 或者,您可以克隆或下载此存储库。 - 确保您的Apache配置和fail2ban配置正确。以下提供了一些帮助。
Apache配置
- 启用RemoteIP模块
- 更新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
- 运行
sudo service apache2 reload
fail2ban配置
- 将
fail2ban/action.d/aws-acl.conf
复制到/etc/fail2ban/action.d/
目录 - 将
fail2ban/filter.d/aws-acl-example-filter.conf
复制到/etc/fail2ban/filter.d/
目录 - 更新
actionban
和actionunban
定义在/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
中。更新actionban
和actionunban
时,应使用绝对路径。 - 将
/etc/fail2ban/action.d/aws-acl.conf
中的两个ACL_ID_GOES_HERE
实例替换为您想要使用的ACL的acl-id。 - 创建或更新您的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