Limitarea Conexiunilor TCP Concurente per IP cu Directiva limit_conn în Nginx

Securitate și Protecție Standard Nginx

Ghid de protecție anti-abuz cu limit_conn: restrângerea numărului de conexiuni simultane deschise de un singur client, atenuarea atacurilor Slowloris și descărcărilor abuzive de fișiere mari.

Sintaxă
limit_conn_zone $binary_remote_addr zone=addr_limit:10m; limit_conn addr_limit 20;

În timp ce directiva limit_req limitează frecvența cererilor pe secundă (Request Rate), directiva limit_conn controlează numărul de conexiuni TCP simultane active pe care o singură adresă IP le poate menține deschise. Este arma principală împotriva atacurilor de tip Slowloris (unde atacatorii deschid sute de conexiuni și trimit date extrem de lent pentru a epuiza memoria serverului) și a scraperelor care descarcă zeci de fișiere mari în paralel.

Configurația recomandată pentru limit_conn
# În contextul http (alocarea memoriei pentru tabela de urmărire IP-uri):
# $binary_remote_addr consumă doar 4 bytes per adresă IPv4 (față de 15 bytes string)!
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;

server {
    listen 80;
    server_name www.dexblog.ro;

    # Codul HTTP returnat clientului când depășește limita:
    limit_conn_status 429;

    location /downloads/ {
        # Permite maximum 3 descărcări simultane de pe aceeași adresă IP:
        limit_conn perip 3;
        
        # Limitează și viteza de descărcare la 500 KB/s per conexiune:
        limit_rate 500k;
    }

    location / {
        # Permite maximum 25 de conexiuni concurente per vizitator legitim:
        limit_conn perip 25;
        
        # Protejează întregul domeniu să nu depășească 5000 de conexiuni totale concurente:
        limit_conn perserver 5000;
    }
}