Indurimento del Kernel Linux tramite sysctl.conf. Protezione contro gli attacchi SYN Flood e ottimizzazione TCP
Introduzione
In questo tutorial, rinforzerai il kernel Linux utilizzando sysctl.conf, proteggerai il tuo server dagli attacchi SYN flood e ottimizzerai il comportamento dello stack TCP. La regolazione a livello di kernel migliora la resilienza contro gli attacchi di negazione del servizio (DoS) basati sulla rete e migliora le prestazioni complessive del TCP. Simulerai anche un attacco SYN flood in un ambiente controllato e verificherai che i tuoi meccanismi di protezione funzionino correttamente.
Prerequisiti
Pubblico di riferimento: Amministratori di sistema di livello intermedio
Tempo stimato: 45–60 minuti
Requisiti di sistema
- Sistema operativo: Ubuntu 24.04 LTS (testato); compatibile con Debian 12/13 e altre distribuzioni Linux moderne
- Versione del kernel: 5.x o successiva
- Minimo 1 GB di RAM
- Privilegi di root o sudo
- Accesso alla rete tra le macchine di test
Strumenti richiesti
Installa le seguenti utilità:
sudo apt update
sudo apt install -y hping3 net-tools procps iproute2
Verifica l'installazione: hping3 --version
Output previsto: informazioni sulla versione che confermano l'installazione avvenuta con successo.
Esegui la simulazione di SYN flood solo in un ambiente di laboratorio controllato. Non testare mai su sistemi che non possiedi o per i quali non hai il permesso di testare.
Passo 1: Esegui il backup della configurazione corrente di sysctl
Prima di apportare modifiche, crea un backup.
sudo cp /etc/sysctl.conf /etc/sysctl.conf.backup
Risultato: viene creato un file di backup /etc/sysctl.conf.backup.
Passo 2: Configura i parametri del kernel per la protezione SYN Flood
Apri il file di configurazione:
sudo nano /etc/sysctl.conf
Aggiungi o modifica i seguenti parametri.
Abilita i SYN Cookies
net.ipv4.tcp_syncookies = 1
Scopo: Abilita i SYN cookies quando la coda di backlog SYN trabocca.
Valori:
- 0 – Disabilitato
- 1 – Abilitato quando si verifica un overflow del backlog SYN (consigliato)
- 2 – Sempre abilitato (raramente usato)
Perché: I SYN cookies prevengono l'esaurimento della memoria evitando l'allocazione di risorse fino al completamento della stretta di mano.
Nelle distribuzioni moderne questa opzione è abilitata di default. Puoi verificarlo con il seguente comando: sysctl -a | grep net.ipv4.tcp_syncookies
Aumenta la coda di backlog SYN
net.ipv4.tcp_max_syn_backlog = 4096
Scopo: Numero massimo di richieste di connessione in coda in attesa di riconoscimento.
Perché: Un backlog più grande consente più connessioni semi-aperte prima che il kernel inizi a scartarle.
Riduci i tentativi di SYN-ACK
net.ipv4.tcp_synack_retries = 3
Scopo: Numero di ritrasmissioni per i pacchetti SYN-ACK.
Perché: Ridurre questo valore diminuisce il tempo trascorso in attesa di connessioni semi-aperte malevole.
Abilita il riutilizzo del tempo di attesa TCP
net.ipv4.tcp_tw_reuse = 1
Scopo: Consente il riutilizzo dei socket TIME-WAIT per nuove connessioni in uscita.
Valori:
- 0 – Disabilitato
- 1 – Abilitato
Perché: Riduce l'esaurimento dei socket sotto carico pesante.
Riduci il timeout FIN
net.ipv4.tcp_fin_timeout = 15
Scopo: Tempo in cui un socket rimane nello stato FIN-WAIT-2.
Perché: Riduce l'uso delle risorse da connessioni obsolete.
Abilita il filtraggio del percorso inverso
net.ipv4.conf.all.rp_filter = 1
Scopo: Valida gli indirizzi IP di origine rispetto alla tabella di routing.
Valori:
- 0 – Disabilitato
- 1 – Modalità rigorosa
- 2 – Modalità flessibile
Perché: Aiuta a mitigare gli attacchi di spoofing IP.
Aumenta il numero massimo di file aperti
fs.file-max = 2097152
Scopo: Numero massimo di handle di file a livello di sistema.
Perché: Previene l'esaurimento dei descrittori di file durante un carico di connessione elevato.
Passo 3: Applica le modifiche di sysctl
Applica le modifiche senza riavviare:
sudo sysctl -p
Output previsto: ogni parametro visualizzato con il suo nuovo valore.
Verifica parametro specifico: sysctl net.ipv4.tcp_syncookies
Output previsto: net.ipv4.tcp_syncookies = 1
Risultato: i parametri del kernel sono attivi.
Passo 4: Simula un attacco SYN Flood
Importante: Esegui questo solo in un ambiente di laboratorio.
Da una macchina di test separata, esegui:
sudo hping3 -S --flood -V <YOUR_SERVER_IP> -p 80
Spiegazione:
-Sinvia pacchetti SYN--floodinvia pacchetti il più velocemente possibile-p 80mira alla porta HTTP
Risultato: un volume elevato di pacchetti SYN inviati al server.
Passo 5: Monitora il server durante l'attacco
Sul server di destinazione, monitora le connessioni:
netstat -ant | grep SYN_RECV | wc -l
Risultato: visualizza il numero di connessioni semi-aperte.
Controlla il contatore dei SYN cookies:
nstat -az | grep Syncookies
Dovresti osservare contatori in aumento come TcpExtSyncookiesSent. Questo conferma che i SYN cookies sono in uso.
Passo 6: Confronta il comportamento prima e dopo il rinforzo
Se testi senza rinforzo:
- Il conteggio SYN_RECV cresce rapidamente
- Il server potrebbe diventare non responsivo
- La coda di connessione trabocca
Dopo il rinforzo:
- I SYN cookies si attivano
- Meno connessioni scartate
- Il server rimane responsivo
Installa un server web sul server di destinazione:
sudo apt install nginx
Per testare la reattività:
curl http://localhost
Risultato: il server risponde normalmente anche durante l'attacco simulato.
Passo 7: Ottimizzazione delle prestazioni TCP (Ottimizzazione avanzata opzionale)
Aggiungi ulteriori parametri di ottimizzazione alla configurazione sysctl. Esegui nano /etc/sysctl.conf e aggiungi:
net.core.somaxconn = 8192
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_max_tw_buckets = 2000000
Spiegazione:
net.core.somaxconn– lunghezza massima della coda di ascolto per le applicazioni.net.core.netdev_max_backlog– pacchetti massimi in coda sul lato di input prima dell'elaborazione.net.ipv4.tcp_max_tw_buckets– socket TIME-WAIT massimi. Questa opzione è rilevante per i server con carico elevato e RAM sufficiente.
Questi migliorano le prestazioni sotto traffico pesante.
Applica le modifiche:
sudo sysctl -p
Lista di controllo per la verifica
sysctl -peseguito senza erroritcp_syncookiesuguale a 1- Il contatore
SyncookiesSentaumenta durante l'attacco - Il server rimane responsivo
- Nessun avviso del kernel nei log:
dmesg | grep -i syn
Ripristino delle modifiche
Ripristina la configurazione originale:
sudo cp /etc/sysctl.conf.backup /etc/sysctl.conf
sudo sysctl -p
Risultato: il sistema ritorna ai parametri originali del kernel.
Opzionalmente rimuovi gli strumenti di test:
sudo apt remove hping3 -y
Risoluzione dei problemi
I Syncookies non aumentano
Controlla: sysctl net.ipv4.tcp_syncookies
Se il valore è 0, riapplica la configurazione.
Il server continua a scartare connessioni
Aumenta il backlog: net.ipv4.tcp_max_syn_backlog = 8192
Quindi applica le modifiche:
sudo sysctl -p
Conclusione
Hai rinforzato il kernel Linux utilizzando sysctl.conf, abilitato i meccanismi di protezione contro gli attacchi SYN flood, ottimizzato il comportamento dello stack TCP e verificato le protezioni attraverso una simulazione di attacco controllata. Queste modifiche migliorano la resilienza contro gli attacchi SYN flood e aumentano la stabilità complessiva della rete.
Prossimi passi
- Combina con il rate limiting del firewall (iptables o nftables)
- Implementa limiti di tracciamento delle connessioni
- Distribuisci sistemi di rilevamento delle intrusioni (IDS)
- Monitora le metriche utilizzando Prometheus e Grafana