根据先前的请求对 nginx 进行速率限制

根据先前的请求对 nginx 进行速率限制

这不是问题,但是大量的漏洞扫描程序和脚本小子不断攻击我的网站。

我的网站没有运行 WordPress,但它会不断扫描 WordPress 漏洞,并尝试访问不存在的 URL,例如/admin /wp-admin.php

我想做的是,一旦特定 IP 访问了黑名单中的任何 URL,就对其进行速率限制。我知道我无法完全阻止脚本小子,但我想减慢他们的速度以阻止它。例如:

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

有没有办法仅通过 Nginx 配置来实现这一点?我知道可以使用 OpenResty/Lua 来实现,但据我所知,这是一项相对费力的任务。

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

答案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

相关内容