Indurimento del Kernel Linux tramite sysctl.conf. Protezione contro gli attacchi SYN Flood e ottimizzazione TCP | INTROSERV
EUR
european

EUR

usa

USD

Italy It
Ex. VAT Ex. VAT 0%

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.

Tip

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.

Tip

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

Info

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:

  • -S invia pacchetti SYN
  • --flood invia pacchetti il più velocemente possibile
  • -p 80 mira 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 -p eseguito senza errori
  • tcp_syncookies uguale a 1
  • Il contatore SyncookiesSent aumenta 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

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA