гугль предлогает разные велосипеды с использованием fail2ban.
Чем плох вариант
error_page 503 /ban/one.html;
location = /ban/one.html {
fastcgi_pass YYYYYYYYYY;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}
location /XXXX {
limit_req zone=one burst=5 nodelay;
}
По-умолчанию limit_req дает 503. Его перенаправляем через error_page на fcgi-программу которая добавляет REMOTE_ADDR в какой-нибудь ipset, а в iptables дропает все новые коннекты с адресов из этого набора. ipset в виде хеша с таймаутом.