Gli attacchi Distributed Denial of Service o “DDoS” sequestrano le risorse di un server attraverso tattiche di comunicazione digitale abusive. Questi tipi di attacchi sono i raid organizzati del mondo dei computer. Numerose fastidiose azioni anti-simili si combinano per creare una minaccia abbastanza formidabile da fermare un server esperto nelle sue tracce. Peggio ancora, ci sono molti mezzi per condurre una simile guerriglia web contro server ignari. Fortunatamente, i server possono essere configurati per reagire.
Nginx, un sistema server molto popolare per macchine Unix, è dotato di funzionalità integrate sufficienti per limitare notevolmente l’efficacia degli attacchi DDoS.
Ecco alcune opzioni efficaci per gestire tali minacce su un server alimentato da Nginx:
Eseguire il backup del file di configurazione
Prima di modificare qualsiasi impostazione, assicurati di eseguire un rapido backup della configurazione del tuo server. Il seguente comando funziona per questo:
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup-original
Una volta fatto, sei pronto per andare avanti.
Controllo del traffico
Tenere d’occhio il traffico del tuo server semplifica l’ottimizzazione della sicurezza e l’implementazione di tattiche aggiuntive su tutta la linea. Nginx ha un modulo creato appositamente per questo.
Imposta una pagina di stato
Nginx viene tipicamente fornito con un modulo denominato “stub status” (http_stub_status_module) che consente di integrare questo tipo di funzionalità nell’ambiente del server piuttosto facilmente. Innanzitutto, verificalo utilizzando il seguente comando:
nginx -V
Oppure conduci quanto sopra a grep per trovarlo più velocemente:
nginx -V 2>&1 | grep -o with-http_stub_status_module
Se il tuo output assomiglia all’output sopra, sei a posto; altrimenti, dovrai reinstallare o ricompilare la tua installazione di Nginx con il modulo incluso.
Configurare una pagina di stato che puoi controllare è semplice, ma dovrai anche limitare l’accesso ad essa al minimo (la tua macchina) per mantenerla sicura. Inizia aprendo il file di configurazione principale del tuo server che si trova in “/etc/nginx/nginx.conf”.
Aprilo e aggiungi il seguente codice alla “direttiva http” per attivare il modulo, sostituendo le tue informazioni invece di “localhost”, “/ status_page” e “127.0.0.1”:
server { listen 80; listen [::]:80; server_name localhost; ## # Status Page Settings ## location /status_page { stub_status on; allow 127.0.0.1; allow ::1; deny all; } }
Nota: avrai bisogno dei privilegi sudo per modificare questo file.
Ora prova la tua configurazione:
sudo nginx -t
Se tutto va bene, invia al tuo server un segnale di ricarica:
sudo systemctl reload nginx
Per accedere alla tua pagina di stato, visita la tua posizione nome_server seguita da “/ status_page” in un browser web o utilizzando uno strumento da riga di comando come curl. (Questo è utile se la cache del browser non si aggiorna automaticamente.) Di seguito è riportato il comando curl per accedere alla pagina nei nostri esempi:
curl localhost/status_page
Nel browser, quanto sopra appare come la seguente immagine.
Controlla i log di accesso
Se noti del traffico anomalo durante il controllo della pagina di stato configurata sopra, potrebbe essere una buona idea controllare il registro degli accessi del server. Questo può essere trovato su “/var/log/nginx/access.log”. Il registro elenca i metodi HTTP utilizzati, la data / ora dei tentativi di accesso, i programmi utente e le pagine visitate.
Limitazione delle connessioni
Tra le tante tattiche utili che vale la pena provare per respingere gli attacchi DDoS, una delle più semplici ed efficaci è la limitazione delle velocità di traffico in entrata.
Idealmente, dovresti limitare l’accesso quel tanto che basta per impedire ai bot dannosi di sopraffare il tuo server a tassi disumani mantenendo tariffe ragionevoli per i client umani. In Nginx, questo può essere ottenuto con il limit_req_zone
e limit_req
direttive. Il codice seguente imposta i vincoli di memoria e velocità per l’utilizzo in qualsiasi posizione in cui il server è configurato per mostrare:
limit_req_zone $binary_remote_addr zone=speedbump:10m rate=10r/s;
“Zona” specifica il nome e la dimensione (in Megabyte in questo caso) dello spazio in memoria in cui sono archiviate le richieste dell’utente. “Rate” stabilisce il numero totale di richieste che Nginx accetterà ogni secondo (10 in questo esempio). Pensa a questo codice come a una regola e al codice che segue come all’uso di quella regola:
limit_req zone=speedbump burst=20;
Il codice sopra in realtà fa qualcosa di più che implementare la nostra regola di limitazione; aggiunge anche una piccola coda di un massimo di venti richieste per gestire dolcemente le connessioni legittime che si presentano un po ‘più velocemente del normale, superando sia la regola che la coda si traduce in un errore 503 per il client. Ecco come appaiono entrambe le direttive in nginx.conf:
Indirizzo IP nella blacklist
Se riesci a ottenere l’indirizzo IP che sta causando attacchi DDoS al tuo server, puoi semplicemente inserirlo nella blacklist e interrompere qualsiasi connessione proveniente da questo indirizzo IP.
Aggiungi il seguente codice alla tua direttiva server:
location / { deny 123.123.123.0/28; # ... }
Richiesta di blocco a determinati file
Se l’attacco DDoS prende di mira determinati file sul tuo server, ad esempio il file xmlrpc.php su WordPress (questo è un file fortemente mirato nella maggior parte dei server WordPress), puoi bloccare tutte le richieste ad esso. Aggiungi questo codice alla direttiva del tuo server:
location /xmlrpc.php { deny all; }
Segui la procedura sopra e sarai in grado di limitare la maggior parte degli attacchi DDoS. Assicurati di controllare il Documentazione di Nginx per ulteriori opzioni di sicurezza che puoi mettere in atto.