Attacchi DDoS (Distributed Denial of Service) , attraverso tattiche abusive di comunicazione digitale, sovraccaricano le risorse del server. Questi tipi di attacchi sono incursioni organizzate nel mondo dei computer. Innumerevoli atti di sgradevole opposizione si combinano per creare una minaccia abbastanza formidabile da costringere un server all'arresto.
Quel che è peggio è che ci sono molti mezzi per condurre “guerre” di guerriglia sul web contro tali host. Fortunatamente, i server possono essere configurati per resistere a tali attacchi.
Nginx, un sistema server molto popolare per macchine Unix, è dotato di funzionalità integrate sufficienti per limitare significativamente l'efficacia degli attacchi DDoS.
Ecco alcune opzioni efficaci per gestire tali minacce con Nginx.
Come prevenire gli attacchi DDoS con Nginx?
Backup dei file di configurazione
Prima di modificare qualsiasi impostazione, assicurati di eseguire un rapido backup della configurazione del tuo server. Il seguente comando funziona a questo scopo:
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup-original
Una volta completato, sei pronto per continuare.
Controlla il traffico
Il monitoraggio del traffico sul tuo server semplifica l'ottimizzazione della sicurezza e l'implementazione di strategie aggiuntive. Nginx ha un modulo creato appositamente per questo scopo.
Imposta la pagina di stato
Nginx viene solitamente fornito con un modulo chiamato “stub status” (http_stub_status_module), che consente di integrare abbastanza facilmente questo tipo di funzionalità nell'ambiente server. Innanzitutto, testalo utilizzando il seguente comando:
nginx -V
Oppure usa il seguente comando per trovarlo più velocemente:
nginx -V 2>&1 | grep -o with-http_stub_status_module
Se il tuo output è simile a quello sopra, allora è tutto a posto. Altrimenti, dovrai installare o ricompilare la tua installazione Nginx con il modulo incluso.
Configurare una pagina di stato da controllare è semplice, ma è necessario limitare l'accesso al minimo (solo computer) per mantenere la sicurezza. Inizia aprendo il file di configurazione principale del server che si trova in /etc/nginx/nginx.conf.
Aprilo e aggiungi il seguente codice alla "direttiva http" per abilitare il modulo, sostituendo le tue informazioni in "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 server un segnale di ricarica:
sudo systemctl reload nginx
Per accedere alla pagina di stato, visitare la posizione nome_server seguita da "/pagina_stato" in un browser Web o utilizzando uno strumento da riga di comando come curl. (Ciò è utile se la cache del browser non viene aggiornata automaticamente). Ecco il comando curl per accedere alla pagina negli esempi:
curl localhost/status_page
Nel browser, l'output del comando precedente è simile all'immagine seguente.
Controlla i log di accesso
Se noti un traffico insolito quando controlli la pagina di stato configurata sopra, potresti voler controllare il registro di accesso del server. Il registro di accesso al server può essere trovato in “/var/log/nginx/access.log”. Il registro elenca i metodi HTTP utilizzati, la data/ora dei tentativi di accesso, l'agente utente e le pagine a cui si è effettuato l'accesso.
Limiti di connessione
Tra le tante tattiche utili per prevenire gli attacchi DDoS che vale la pena provare, una delle più semplici ed efficaci è limitare la velocità del traffico in entrata.
Idealmente, dovresti limitare l’accesso quanto basta per impedire ai bot dannosi di sovraccaricare il tuo server, pur mantenendo tariffe ragionevoli. In Nginx, questo può essere fatto con le direttive limit_req_zone e limit_req . Il codice seguente imposta i limiti di memoria e velocità da utilizzare in qualunque posizione il server sia configurato per la visualizzazione:
limit_req_zone $binary_remote_addr zone=speedbump:10m rate=10r/s;
“Zona” specifica il nome e la capacità (in Megabyte in questo caso) dello spazio di memoria in cui vengono archiviate le richieste dell'utente. "Rate" imposta il numero totale di richieste che Nginx accetterà al secondo (10 richieste in questo esempio). Pensa a questo codice come a una regola e ciò che segue è l'uso di quella regola:
limit_req zone=speedbump burst=20;
Il codice precedente in realtà fa qualcosa di più della semplice implementazione di una regola di limite. Aggiunge inoltre una piccola coda fino a 20 richieste per gestire con garbo le connessioni legittime, che vengono visualizzate un po' più velocemente del normale, superando sia le regole che la coda, risultando in un errore 503 per il client. Entrambe le direttive hanno questo aspetto in nginx.conf:
Crea una lista nera di indirizzi IP
Se ottieni l'indirizzo IP che sta eseguendo l'attacco DDoS sul tuo server, puoi semplicemente inserirlo nella lista nera ed eliminare qualsiasi connessione proveniente da questo indirizzo IP.
Aggiungi il seguente codice alla direttiva del tuo server:
location / {
deny 123.123.123.0/28;
# ...
}
Blocca le richieste per determinati file
Se l'attacco DDoS prende di mira determinati file sul server, ad esempio il file xmlrpc.php su WordPress (si tratta di un file comunemente preso di mira nella maggior parte dei server WordPress), puoi bloccarli tutti, tutti i requisiti per questo. Aggiungi questo codice alla direttiva del tuo server:
location /xmlrpc.php {
deny all;
}
Segui la procedura sopra descritta e sarai in grado di limitare la maggior parte degli attacchi DDoS. Assicurati di controllare la documentazione di Nginx per ulteriori opzioni di sicurezza che puoi applicare.
Spero che tu abbia successo.