Назад | Перейти на главную страницу

Ограничение скорости nginx на основе предыдущего запроса

Это не проблема, но я получаю огромное количество сканеров уязвимостей и скриптовых детишек, постоянно посещающих мой сайт.

На моем сайте не работает WordPress, но он постоянно сканируется на наличие уязвимостей WordPress и пытается найти несуществующие URL-адреса, такие как /admin /wp-admin.php.

Что я хотел бы сделать, так это ограничить частоту определенных IP-адресов, когда они попадут в любой URL-адрес в черном списке. Я знаю, что не могу полностью остановить сценаристов, но я бы хотел их замедлить, чтобы не допустить этого. Например:

  1. Скажем, я запускаю сканер уязвимостей, который сначала пытается /wp-admin.php.
  2. Nginx видит это конкретное местоположение и добавляет мой IP-адрес в список IP-адресов, которые запрещены или ограничены по скорости на определенный период времени.

Есть ли способ добиться этого исключительно с помощью конфигурации Nginx? Я знаю, что это достижимо с использованием OpenResty / Lua, но насколько мне известно, это относительно трудоемкая задача.

Fail2ban также не подходит, поскольку я использую балансировщик нагрузки, и поэтому мне нужно полагаться на X-Forwarded-For заголовки, которые явно не могут соответствовать iptables.

Согласно эта почта можно было бы ограничить 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