在AWS Elastic Beanstalk上阻止用户代理

时间:2017-07-30 14:09:02

标签: django amazon-web-services elastic-beanstalk

我在AWS Elastic Beanstalk上运行Django应用程序。我一直有警报(现在几天),因为以下用户代理不断尝试访问某些页面:" Mozilla / 5.0 Jorgee"

[30/Jul/2017:13:55:55 +0000] "HEAD /pma/ HTTP/1.1" 403 - "-" "Mozilla/5.0 Jorgee"
[30/Jul/2017:13:55:55 +0000] "HEAD /db/ HTTP/1.1" 403 - "-" "Mozilla/5.0 Jorgee"
[30/Jul/2017:13:55:56 +0000] "HEAD /admin/ HTTP/1.1" 403 - "-" "Mozilla/5.0 Jorgee"
[30/Jul/2017:13:55:56 +0000] "HEAD /mysql/ HTTP/1.1" 403 - "-" "Mozilla/5.0 Jorgee"
[30/Jul/2017:13:55:56 +0000] "HEAD /database/ HTTP/1.1" 403 - "-" "Mozilla/5.0 Jorgee"
[30/Jul/2017:13:55:57 +0000] "HEAD /db/phpmyadmin/ HTTP/1.1" 403 - "-" "Mozilla/5.0 Jorgee"
[30/Jul/2017:13:55:57 +0000] "HEAD /db/phpMyAdmin/ HTTP/1.1" 403 - "-" "Mozilla/5.0 Jorgee"
[30/Jul/2017:13:55:57 +0000] "HEAD /sqlmanager/ HTTP/1.1" 403 - "-" "Mozilla/5.0 Jorgee"
[30/Jul/2017:13:55:58 +0000] "HEAD /mysqlmanager/ HTTP/1.1" 403 - "-" "Mozilla/5.0 Jorgee"
[30/Jul/2017:13:55:58 +0000] "HEAD /php-myadmin/ HTTP/1.1" 403 - "-" "Mozilla/5.0 Jorgee"
[30/Jul/2017:13:55:58 +0000] "HEAD /phpmy-admin/ HTTP/1.1" 403 - "-" "Mozilla/5.0 Jorgee"
[30/Jul/2017:13:55:59 +0000] "HEAD /mysqladmin/ HTTP/1.1" 403 - "-" "Mozilla/5.0 Jorgee"
[30/Jul/2017:13:55:59 +0000] "HEAD /mysql-admin/ HTTP/1.1" 403 - "-" "Mozilla/5.0 Jorgee"
[30/Jul/2017:13:55:59 +0000] "HEAD /admin/phpmyadmin/ HTTP/1.1" 403 - "-" "Mozilla/5.0 Jorgee"

它曾经返回404,但由于settings.py中的以下行,我设法将其阻止为403:

DISALLOWED_USER_AGENTS = (re.compile(r'Mozilla\/5.0 Jorgee'), )

有没有办法简单地阻止它甚至进入Django级别?还是一种停止将其写入日志的方法?它会生成健康检查警报: - /

3 个答案:

答案 0 :(得分:3)

您可以使用规则创建AWS Web Application Firewall,以使用该用户代理字符串拒绝流量。然后将WAF连接到Elastic Beanstalk环境中的Elastic Load Balancer。

或者,您可以在Elastic Beanstalk EC2实例上运行的反向代理中创建规则,以在流量到达Django之前阻止该流量。我不确定EB上的Django应用程序是否默认使用Apache或Nginx作为反向代理。你必须弄清楚你正在使用哪一个,然后查找如何根据用户代理字符串配置阻止流量。

我不清楚此流量如何导致您的应用程序中出现健康检查警报。如果您的应用程序发送垃圾邮件的流量很大,导致服务器过载且无响应,那么我建议使用WAF阻止它,以便您的服务器永远不会看到流量。

答案 1 :(得分:0)

您可以使用AWS WAF规则阻止您想要的任何内容。不过,我假设您已经使用Classic Load Balancer创建了环境。迁移到应用程序负载均衡器并不是一件痛苦的事。它的作用远远超过Classic Load Balancer,未来还有一些升级机会。如果你考虑搬到ALB(我们很久以前就已经这么做了,所以每个新环境都有它),可以轻松地阻止这些事情,或者只是将它们移到一边,这样他们就不会这样做了。 t中断。

对我们来说,最简单的方法是定义AWS WAF规则,使string condition与我们发布网站的某些定义域匹配Host标头。如果有任何请求,即未使用此域名,则会获得403并且不会在Elastic Beanstalk上生成requests to the ELB are failing with 5xx之类的内容。如果仔细查看ELB级别的日志,这些机器人倾向于使用直接IP地址,而不是DNS名称,因此在访问Nginx中定义为server_names的网站时会产生错误。 因此,由于这一点,我们有更清晰的日志,并且EB环境不再有健康警告,这是以前的标准。

如果你需要一些指导或截图,我在这里详细描述了这个案例https://www.mkubaczyk.com/2017/10/10/use-aws-waf-block-bots-jorgee-500-status-elastic-beanstalk

答案 2 :(得分:-2)