Protéger un serveur Debian/Ubuntu contre l'attaque Logjam
Important : exécutez les commandes en tant que root.
Contexte rapide
Logjam exploite la faiblesse des groupes Diffie‑Hellman de 1024 bits et des suites de chiffrement faibles. Il affecte les échanges utilisant Diffie‑Hellman (par exemple HTTPS, TLS, SMTPS, SSH). Pour plus de détails techniques, consultez https://weakdh.org/.
Étapes principales
- Générer un groupe DH unique (dhparams.pem) en 2048 bits.
- Restreindre et ordonner les suites de chiffrement sur chaque service.
- Charger dhparams.pem quand le serveur et OpenSSL le supportent.
- Redémarrer et tester les services.
Générer un groupe DH unique
Créez ou utilisez le répertoire /etc/ssl/private pour stocker la clé DH. Si le répertoire n’existe pas :
mkdir -p /etc/ssl/private
chmod 710 /etc/ssl/privateGénérez ensuite le fichier dhparams.pem et protégez les permissions :
cd /etc/ssl/private
openssl dhparam -out dhparams.pem 2048
chmod 600 dhparams.pemNote : 2048 bits est la taille recommandée ; 1024 bits est considéré faible.
Apache
- Restreindre la suite de chiffrement
Ouvrez /etc/apache2/mods-available/ssl.conf :
nano /etc/apache2/mods-available/ssl.confRemplacez ou ajoutez ces lignes (SSLCipherSuite doit rester sur une seule ligne) :
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 onImportant : ne pas insérer de sauts de ligne dans SSLCipherSuite.
- Charger dhparams.pem dans Apache (si supporté)
L’option SSLOpenSSLConfCmd est disponible à partir d’Apache 2.4.8 et nécessite OpenSSL ≥ 1.0.2. Vérifiez vos versions :
apache2 -vopenssl versionSi vos versions supportent l’option, ajoutez dans /etc/apache2/mods-available/ssl.conf :
SSLOpenSSLConfCmd DHParameters "/etc/ssl/private/dhparams.pem"Puis redémarrez Apache :
service apache2 restartNote : si vous ne pouvez pas charger dhparams.pem (versions trop anciennes), la restriction des suites de chiffrement reste utile et protège déjà contre de nombreuses attaques.
Nginx
Éditez /etc/nginx/nginx.conf :
nano /etc/nginx/nginx.confDans la section http { … } ajoutez ou remplacez :
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;Puis redémarrez Nginx :
service nginx restartPostfix
Appliquez ces paramètres pour Postfix :
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"Puis redémarrez Postfix :
service postfix restartNote : la variable smtpd_tls_dh1024_param_file accepte le fichier dhparams pour forcer l’usage des paramètres DH.
Dovecot
Ouvrez /etc/dovecot/dovecot.conf :
nano /etc/dovecot/dovecot.confAjoutez ou remplacez la liste de suites :
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-SHAVérifiez la version de Dovecot :
dovecot --version- Si la version est ≥ 2.2.6, ajoutez :
ssl_prefer_server_ciphers = yes- Si la version est ≥ 2.2.7, ajoutez aussi :
ssl_dh_parameters_length = 2048Puis redémarrez Dovecot :
service dovecot restartPure‑ftpd
La configuration de pure‑ftpd nécessite d’ajouter la prise en charge de l’option -J dans /usr/sbin/pure-ftpd-wrapper. Éditez le fichier :
nano /usr/sbin/pure-ftpd-wrapperRepérez la ligne :
'TLS' => ['-Y %d', \&parse_number_1],et ajoutez immédiatement après :
'TLSCipherSuite' => ['-J %s', \&parse_string],Ensuite créez ou éditez le fichier de configuration :
nano /etc/pure-ftpd/conf/TLSCipherSuiteCollez la liste de chiffrement suivante (remplacez le contenu existant si nécessaire) :
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-SHARedémarrez pure‑ftpd :
service pure-ftpd-mysql restartVérification et tests
Après modification, testez vos services :
- Utilisez openssl s_client pour vérifier la négociation TLS :
openssl s_client -connect exemple.com:443 -servername exemple.comOutils en ligne : SSL Labs (tester les sites publics) ; weakdh.org propose des ressources spécifiques.
Contrôlez que le serveur n’accepte plus les suites faibles et que DH utilise des paramètres de 2048 bits.
Quand cela peut échouer
- Clients anciens (navigateurs ou bibliothèques TLS) peuvent ne pas supporter ECDHE ou les suites récentes. Dans ce cas, déterminer si la compatibilité est nécessaire pour votre audience.
- Serveurs avec OpenSSL/Apache/Nginx anciens ne pourront pas charger directement dhparams.pem. Solution : compiler OpenSSL/Apache plus récents ou utiliser des proxys terminant TLS.
Approches alternatives
- Utiliser un reverse proxy moderne (HAProxy, Nginx 1.13+, Envoy) devant des services anciens pour centraliser la terminaison TLS et appliquer des politiques de chiffrement à jour.
- Préférer ECDHE (Elliptic Curve Diffie‑Hellman) plutôt que DHE pour de meilleures performances et sécurité, lorsque les clients le supportent.
Boîte de faits
- Logjam exploite des groupes Diffie‑Hellman trop petits (souvent 512–1024 bits).
- Recommandation pratique : 2048 bits pour dhparams.pem.
- Vérifier la compatibilité OpenSSL/Apache : SSLOpenSSLConfCmd nécessite Apache ≥ 2.4.8 et OpenSSL ≥ 1.0.2.
Checklist administrateur (rôle : administrateur système)
- Générer /etc/ssl/private/dhparams.pem en 2048 bits.
- Protéger les permissions (chmod 600 pour dhparams.pem).
- Mettre à jour les SSLCipherSuite/ssl_ciphers pour chaque service.
- Ajouter la référence à dhparams.pem quand le logiciel le supporte.
- Redémarrer chaque service et vérifier la négociation TLS.
- Documenter les clients qui échouent et prévoir des mesures de compatibilité.
Commandes et extrait récapitulatif (cheat sheet)
# Créer dossier sécurisé
mkdir -p /etc/ssl/private && chmod 710 /etc/ssl/private
# Générer DH params
openssl dhparam -out /etc/ssl/private/dhparams.pem 2048 && chmod 600 /etc/ssl/private/dhparams.pem
# Vérifier versions
apache2 -v
openssl version
# Redémarrer services
service apache2 restart
service nginx restart
service postfix restart
service dovecot restart
service pure-ftpd-mysql restart
# Tester TLS
openssl s_client -connect exemple.com:443 -servername exemple.comNotes de compatibilité et migration
- Si votre distribution fournit des paquets anciens, envisagez une montée en version ou compilation locale d’OpenSSL/serveur TLS.
- Alternative sûre : déployer un proxy TLS moderne devant vos services existants.
Résumé
Ce guide montre comment protéger un serveur Debian/Ubuntu contre Logjam : générer dhparams.pem en 2048 bits, restreindre les suites de chiffrement et charger les paramètres DH quand le logiciel le permet. Testez chaque service après modification et préparez des solutions de contournement pour les clients anciens.
Notes :
- Consultez https://weakdh.org/ pour des informations techniques complémentaires.
Liens
Matériaux similaires
Installer et utiliser Podman sur Debian 11
Guide pratique : apt-pinning sur Debian
OptiScaler : activer FSR 4 dans n'importe quel jeu
Dansguardian + Squid NTLM sur Debian Etch
Corriger l'erreur d'installation Android sur SD