Guida alle tecnologie

Proteggere il server Debian/Ubuntu dall'attacco Logjam

4 min read Sicurezza Aggiornato 03 Oct 2025
Proteggere server Debian/Ubuntu dall'attacco Logjam
Proteggere server Debian/Ubuntu dall'attacco Logjam

Introduzione

Logjam è un attacco sullo scambio di chiavi Diffie‑Hellman (DH) che può indebolire le connessioni TLS/SSL usate da HTTPS, SMTPS, SSH e altri protocolli. Una descrizione dettagliata è disponibile su https://weakdh.org/. Questo tutorial guida passo dopo passo le modifiche pratiche su Debian e Ubuntu, compatibile con installazioni ISPConfig 3.

Nota: tutte le operazioni descritte richiedono privilegi di root.

Importante: non inventare numeri di versione: testa sempre le versioni di Apache e OpenSSL sul tuo sistema prima di applicare la parte relativa ai parametri DH.

Requisiti e termini rapidi

  • Definizione rapida: Diffie‑Hellman (DH) è un metodo per negoziare una chiave crittografica segreta fra due parti. Generare parametri DH unici riduce il rischio introdotto da parametri precomputati.
  • Vuoi usare 2048 bit come valore minimo per dhparams; 4096 bit aumenta la sicurezza ma richiede più tempo per la generazione.

Generare un gruppo DH unico

Crea la cartella protetta se non esiste e genera dhparams.pem in /etc/ssl/private:

mkdir -p /etc/ssl/private  
chmod 710 /etc/ssl/private

Genera il file e imposta permessi sicuri:

cd /etc/ssl/private  
openssl dhparam -out dhparams.pem 2048  
chmod 600 dhparams.pem

Suggerimento: la generazione a 2048 bit può richiedere alcuni minuti; a 4096 bit può impiegare molto più tempo.

Apache

  1. Aggiungi una suite di cifrature sicura seguendo weakdh.org. Apri il file /etc/apache2/mods-available/ssl.conf:
nano /etc/apache2/mods-available/ssl.conf
  1. Modifica o aggiungi le righe seguenti (la SSLCipherSuite è una singola riga lunga, non inserire interruzioni):
SSLProtocol             all -SSLv2 -SSLv3  

SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

SSLHonorCipherOrder     on
  1. Impostare i parametri DH direttamente in Apache è possibile solo con Apache ≥ 2.4.8 e OpenSSL ≥ 1.0.2. Verifica le versioni:
apache2 -v

E:

openssl version

Se le versioni sono sufficienti, aggiungi la riga seguente in /etc/apache2/mods-available/ssl.conf:

SSLOpenSSLConfCmd DHParameters "/etc/ssl/private/dhparams.pem"

Quindi riavvia Apache:

service apache2 restart

Nota: se la tua OpenSSL o Apache non supporta SSLOpenSSLConfCmd, la prima parte (disabilitare cifre deboli) protegge già il server anche senza impostare DH personalizzato.

Nginx

Apri /etc/nginx/nginx.conf:

nano /etc/nginx/nginx.conf

All’interno del blocco http { … } aggiungi o sostituisci:

ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/private/dhparams.pem;

Riavvia Nginx:

service nginx restart

Postfix

Imposta la suite di cifratura e il percorso del file DH:

postconf -e "smtpd_tls_mandatory_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDC3-SHA, KRB5-DE5, CBC3-SHA"  
postconf -e "smtpd_tls_dh1024_param_file = /etc/ssl/private/dhparams.pem"

Poi riavvia Postfix:

service postfix restart

Nota: la seconda linea indica a Postfix di usare i parametri DH; alcuni packaging possono richiedere valori di chiave o nomi parametri differenti a seconda della versione.

Dovecot

Apri il file di configurazione:

nano /etc/dovecot/dovecot.conf

Aggiungi subito dopo la riga ssl_protocols:

ssl_cipher_list=ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

Verifica la versione di Dovecot:

dovecot --version
  • Se la versione è ≥ 2.2.6, aggiungi:
ssl_prefer_server_ciphers = yes
  • Se la versione è ≥ 2.2.7, aggiungi anche:
ssl_dh_parameters_length = 2048

Infine riavvia Dovecot:

service dovecot restart

Pure‑FTPd

Alcune distribuzioni non espongono l’opzione -J nel wrapper /usr/sbin/pure-ftpd-wrapper. Aggiungi il supporto editando il wrapper:

nano /usr/sbin/pure-ftpd-wrapper

Cerca la riga:

'TLS' => ['-Y %d', \&parse_number_1],

E aggiungi subito dopo:

'TLSCipherSuite' => ['-J %s', \&parse_string],

Poi crea o modifica il file di configurazione della suite TLS:

nano /etc/pure-ftpd/conf/TLSCipherSuite

Inserisci la stessa lista di cifre usata altrove (sostituisci eventuali valori esistenti):

ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

Riavvia pure‑ftpd (il nome del servizio può variare in base al packaging):

service pure-ftpd-mysql restart

Verifica e test (mini‑metodologia)

  1. Controlla versioni:
apache2 -v
openssl version
nginx -v
postconf mail_version
dovecot --version
  1. Test rapido TLS per un host (esempio porta 443):
openssl s_client -connect example.com:443 -tls1_2
  1. Usa scanner come testssl.sh o strumenti online (SSL Labs) per valutare la configurazione. Non fidarti solo del risultato automatico: verifica che DH sia impostato e che le cifre deboli siano disabilitate.

Casi in cui questa procedura può fallire o non essere sufficiente

  • Server con versioni vecchie di OpenSSL/Apache che non supportano SSLOpenSSLConfCmd: la soluzione completa richiede aggiornamento o rebuild di OpenSSL/Apache.
  • Servizi diversi o build custom possono avere nomi di opzione differenti o percorsi di configurazione non standard.
  • Alcuni client legacy non supportano ECDHE e potrebbero non riuscire a connettersi dopo l’aggiornamento delle cifre.

Checklist per ruolo

  • Sysadmin:

    • Generare dhparams.pem e impostare permessi (710/600)
    • Eseguire backup dei file di configurazione prima delle modifiche
    • Testare riavvii e monitorare i log per errori
  • Webadmin (Apache/Nginx):

    • Aggiornare ss/protocol e SSLCipherSuite/ssl_ciphers
    • Se possibile, impostare SSLOpenSSLConfCmd o ssl_dhparam
    • Verificare certificati e chain
  • Mailadmin (Postfix/Dovecot):

    • Aggiornare postconf e dovecot.conf con le cipher list
    • Riavviare servizi e testare connessioni SMTP/IMAP/POP3 TLS

Fatti rapidi (fact box)

  • Raccomandazione minima: dhparam 2048 bit
  • Parametri DH unici mitigano attacchi basati su parametri precomputati
  • Verificare compatibilità OpenSSL ≥ 1.0.2 per alcune opzioni

Sommario

Generare parametri DH unici e disabilitare cifre deboli è un passo fondamentale per mitigare Logjam. Applica la suite di cifratura fornita, verifica le versioni del software e testa i servizi dopo ogni modifica.

Link utili

Conclusione: applica le configurazioni mostrate, verifica le versioni e testa con strumenti affidabili. Mantieni backup delle configurazioni e valuta l’aggiornamento di OpenSSL/Apache se necessario.

Autore
Redazione

Materiali simili

Riparare EA AntiCheat driver incompatibile
Troubleshooting

Riparare EA AntiCheat driver incompatibile

Tether USB per Android: guida completa
Tethering

Tether USB per Android: guida completa

Installare Linux su Chromebook Intel
Guide Linux

Installare Linux su Chromebook Intel

smartmontools: guida completa a SMART e monitoraggio dischi
Strumenti

smartmontools: guida completa a SMART e monitoraggio dischi

Proteggere server Debian/Ubuntu dall'attacco Logjam
Sicurezza

Proteggere server Debian/Ubuntu dall'attacco Logjam

Dark Sky: previsioni iperlocali e avvisi
Meteo

Dark Sky: previsioni iperlocali e avvisi