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/private
Gé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.pem
Note : 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.conf
Remplacez 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 on
Important : 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 -v
openssl version
Si 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 restart
Note : 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.conf
Dans 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 restart
Postfix
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 restart
Note : 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.conf
Ajoutez 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-SHA
Vé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 = 2048
Puis redémarrez Dovecot :
service dovecot restart
Pure‑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-wrapper
Repé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/TLSCipherSuite
Collez 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-SHA
Redémarrez pure‑ftpd :
service pure-ftpd-mysql restart
Vé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.com
Outils 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.com
Notes 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

Tether : Android comme modem sans root

Installer Linux sur un Chromebook

smartmontools : installation et guide
Sécuriser Ubuntu/Debian contre Logjam

Dark Sky : prévisions hyperlocales et alternatives
