这不是问题,但是大量的漏洞扫描程序和脚本小子不断攻击我的网站。
我的网站没有运行 WordPress,但它会不断扫描 WordPress 漏洞,并尝试访问不存在的 URL,例如/admin
/wp-admin.php
。
我想做的是,一旦特定 IP 访问了黑名单中的任何 URL,就对其进行速率限制。我知道我无法完全阻止脚本小子,但我想减慢他们的速度以阻止它。例如:
- 假设我正在运行一个漏洞扫描程序,它首先尝试
/wp-admin.php
。 - Nginx 看到这个特定位置并将我的 IP 添加到在一段时间内被禁止或限速的 IP 列表中。
有没有办法仅通过 Nginx 配置来实现这一点?我知道可以使用 OpenResty/Lua 来实现,但据我所知,这是一项相对费力的任务。
Fail2ban 也不是一个选项,因为我在负载均衡器后面运行,因此需要依赖X-Forwarded-For
iptables 显然无法匹配的标头。
答案1
根据这个帖子可以按如下方式限制 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; }
并在重启后进行测试,如下所示:
for i in {0..20}; do (curl -Is https://example.com/accounts/login/ | head -n1 &) 2>/dev/null; done