基于事先请求的速率限制nginx

这不是一个问题,但我得到了大量的漏洞扫描器和脚本小子不断打击我的网站。

我的网站不运行WordPress,但它不断地扫描WordPress的漏洞,并尝试点击/admin /wp-admin.php等不/wp-admin.php

一旦他们击中黑名单中的任何URL,我想要做的是限制特定IP。 我知道我不能完全阻止脚本小子,但是我想慢下来,以阻止它。 例如:

  1. 假设我正在运行首先尝试使用/wp-admin.php的漏洞扫描程序。
  2. Nginx会看到这个特定的位置,并将我的IP添加到一段时间内被禁止或限速的IP列表中。

有没有一种方法可以完全通过Nginx的configuration? 我知道使用OpenResty / Lua是可以实现的,但据我所知这是一个相当高效的任务。

Fail2ban也不是一个选项,因为我运行在负载均衡器后面,因此需要依赖显然iptables无法匹配的X-Forwarded-For头。

根据这篇文章,你可以对Nginx进行限制,如下所示:

 location /account/login/ { # apply rate limiting limit_req zone=login burst=5; # boilerplate copied from location / proxy_pass http://myapp; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; } 

并在重新启动后进行如下testing:

 for i in {0..20}; do (curl -Is https://example.com/accounts/login/ | head -n1 &) 2>/dev/null; done