OffshoreVps
Sicurezza13 ott 20268 min di letturaDi il team di OffshoreVps

Protezione DDoS di livello 7 per un VPS con Nginx

La protezione DDoS a livello di host ferma le ondate di traffico grezzo, non le richieste astute. Aggiungi limiti di frequenza, caching e regole anti-bot con Nginx e fail2ban per sopravvivere agli attacchi a livello applicativo.

La maggior parte dei piani di hosting promette protezione DDoS. Di solito significa filtrare grandi ondate di pacchetti spazzatura (livelli 3 e 4) prima che raggiungano il tuo server. Non ferma mille browser "veri" che caricano contemporaneamente la tua pagina più lenta. Questi attacchi a livello applicativo (livello 7) sembrano visitatori normali e devi gestirli tu. Vedi cos'è la protezione DDoS per il contesto.

Finestra del terminale su un VPS che mostra i comandi usati per la difesa DDoS di livello 7 con Nginx
Il tipo di comandi che eseguirai sul tuo server in questa guida.

Conosci la differenza

  • Flood volumetrici: riempiono la banda della rete. Li filtra l'host o l'upstream.
  • Attacchi di protocollo: esauriscono le tabelle delle connessioni. Per lo più gestiti dalla rete.
  • Attacchi di livello 7: richieste HTTP dall'aspetto valido che consumano CPU, database o worker. Questi raggiungono la tua applicazione.

Passo 1: limita la frequenza in Nginx

Imposta un tetto alla velocità con cui un singolo indirizzo può fare richieste. Definisci una zona nel blocco http e applicala al tuo sito.

limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=connip:10m;

server {
    location / {
        limit_req zone=perip burst=20 nodelay;
        limit_conn connip 20;
    }
    location = /login {
        limit_req zone=perip burst=3 nodelay;
    }
}

Usa un limite molto più stretto per login e ricerca, perché sono operazioni costose.

Passo 2: metti in cache il possibile

Una pagina in cache costa quasi nulla da servire. Attiva la cache FastCGI o proxy per il traffico anonimo, anche solo per 30-60 secondi. Trasforma un'ondata di richieste identiche in una manciata di richieste reali.

fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=site:50m inactive=10m;
fastcgi_cache site;
fastcgi_cache_valid 200 60s;
fastcgi_cache_use_stale updating error timeout;
I passaggi di questa guida in ordine: 1. Conosci la differenza; 2. limita la frequenza in Nginx; 3. metti in cache ciò che puoi; 4. banna i recidivi con fail2ban; 5. metti un proxy davanti quando la cosa si fa seria; 6. Preparati prima che accada
I passaggi di questa guida, in ordine.

Passo 3: imposta timeout ragionevoli

Gli attacchi a connessione lenta tengono occupati i worker. Riduci i limiti.

client_body_timeout 10s;
client_header_timeout 10s;
send_timeout 15s;
keepalive_timeout 15s;
client_max_body_size 5m;

Passo 4: banna i recidivi con fail2ban

Banna gli indirizzi che fanno scattare il limitatore di frequenza. Nginx registra le richieste rifiutate nel log degli errori e un filtro può riconoscerle.

[nginx-limit-req]
enabled  = true
filter   = nginx-limit-req
logpath  = /var/log/nginx/error.log
maxretry = 10
findtime = 60
bantime  = 1h

Passo 5: metti un proxy davanti quando la situazione si fa seria

Un reverse proxy o una CDN con sfide anti-bot possono assorbire attacchi che un singolo VPS non regge. Ricorda di proteggere l'origine come descritto in come mantenere segreto l'IP di origine, altrimenti gli attaccanti lo aggireranno.

Preparati prima che accada

  • Conosci le tue pagine più lente e correggile o mettile in cache.
  • Mantieni il monitoraggio per accorgerti subito di un picco.
  • Abbi un piano: limiti più stretti, una pagina di manutenzione, un server più grande.

Le basi nella guida a UFW e fail2ban vanno di pari passo con questa.