Knowledge Base

Rate limit для форм входа и защита от брутфорса

Nginx: rate limiting для /login

Категория: Web App Security · Риск: medium

Nginx: rate limiting для /login

# В блоке http:
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
limit_req_zone $binary_remote_addr zone=api:10m rate=30r/m;
limit_conn_zone $binary_remote_addr zone=addr:10m;

# В блоке server, для формы входа:
location = /login {
    limit_req zone=login burst=3 nodelay;
    limit_conn addr 5;
    proxy_pass http://backend;
}

location = /api/auth {
    limit_req zone=login burst=2 nodelay;
    proxy_pass http://backend;
}

fail2ban: блокировка по логам

# /etc/fail2ban/jail.local
[nginx-req-limit]
enabled = true
filter = nginx-req-limit
action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp]
logpath = /var/log/nginx/error.log
findtime = 600
bantime = 3600
maxretry = 10

На уровне приложения

Проверка rate limit

# Отправить 10 запросов быстро — должен получить 429
for i in $(seq 1 10); do curl -sI https://example.com/login | head -1; done