Archives de catégorie : Postfix

Poodle et SHA1

Juste un article lié à l’actualité (Poodle &co) et sur les mesures à prendre sur nos serveurs SSL/TLS.

SHA-1 : datant de 1996, encore considéré comme fiable, cette fonction de hash, largement utilisée pour signer des certificats, et plein d’autres choses, va être dépréciée. Google et Microsoft ont en effet annoncé qu’ils allaient progressivement refuser les certificats signés avec SHA-1 dans leurs navigateurs respectifs et recommandent d’utiliser SHA256.

=>c’est une bonne nouvelle pour notre sécurité, non pas parce que SHA256 est plus fiable que SHA-1, mais parce que ça va obliger de nombreuses autorités de certifications à renouveler leurs certificats d’autorités et les administrateurs à faire de même pour leurs certificats serveurs.

Je vous laisse chercher pourquoi ce surcroit de travail devrait être une bonne chose …

Poodle : datant de 1996 lui aussi, SSLv3 vient probablement de casser sa pipe, une faille protocolaire permet de déchiffrer tout ou partie d’une connexion HTTPS. Comme la faille concerne le protocole et pas une implémentation, la correction est assez simple, il suffit de désactiver la prise en charge de SSLv3.

C’est une très bonne nouvelle, on va enfin pouvoir se débarrasser d’Internet Explorer 6 (ce dernier ne prend pas en charge le TLS).

Vivement qu’on trouve une faille dans TLS1 afin de faire sauter les versions 7 et 8, voir même 9 et 10 (puisque que TLS 1.1 et 1.2 y sont désactivés par défaut)

Certificats en SHA256

Google et Microsoft ont annoncé qu’ils allaient progressivement refuser les certificats signés avec SHA1 dans leurs navigateurs respectifs et recommandent d’utiliser SHA256.

Les certificats déjà publiés ne devraient pour la plupart pas être concernés, mais si vous avez un certificat à générer à partir de maintenant, il vaut mieux directement le signer en SHA256.

Vérifiez bien que votre autorité de certification a fait de même avec ses chaines de certifications!

Par défaut, OpenSSL utilise SHA-1 pour générer une demande de certificat (CSR), pour utiliser SHA256 il suffit d’ajouter default_md = sha256 dans la section appropriée du fichier de configuration ([ ca ] et/ou [ req ] selon l’usage), ou d’ajouter -sha256 dans la ligne de commande.

Poodle

Pas besoin de détailler, il est temps de débrancher les ancêtres.

La suite indique comment faire pour quelques logiciels serveur de qualité :

Nginx

Configuration avec une bonne compatibilité :

keepalive_timeout 70;

ssl_session_cache shared:ssl_session_cache:10m;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'AES256+EECDH:AES256+EDH:AES128+EECDH:DES-CBC3-SHA';

Le dernier cipher permet la compatibilité avec IE 8 sur XP, n’hésitez pas à le supprimer.

Pour plus de sécurité on peut générer une clef de session plus forte :

openssl dhparam -out dh-2048.pem 2048

On l’utilise avec la directive :

ssl_dhparam /etc/nginx/dh-2048.pem;

Si le site est uniquement en HTTPS, on peut l’indiquer aux navigateurs compatibles via l’entête HSTS , ainsi ils ne tenteront plus (pendant la durée indiquée) d’accéder à votre site en HTTP :

add_header Strict-Transport-Security "max-age=15984000";

Apache2

Configuration avec une bonne compatibilité :

SSLCompression Off

SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on

SSLCipherSuite  'AES256+EECDH:AES256+EDH:AES128+EECDH:DES-CBC3-SHA'

Pour l’HSTS :

Header set Strict-Transport-Security "max-age=15984000"

Postfix

smtpd_tls_protocols=!SSLv2,!SSLv3
smtp_tls_protocols=!SSLv2,!SSLv3

Dovecot

ssl_protocols = !SSLv2 !SSLv3

DKIM – Signer ses mails

Je ne vais pas décrire ce qu’est DKIM, ni à quoi ça sert, d’autres le font bien mieux que moi :
Blog Stéphane Bortzmeyer

Il s’agit juste d’un mémo expliquant comment signer les messages sortants, la vérification des mails entrants ne sera pas abordée ici, disons simplement qu’il existe des modules dans la plupart des antispam.

Je note juste ici un exemple de configuration avec dkim-filter et Postfix sur une Debian Squeeze.

On part d’un postfix bien configuré qui envoi directement ses mails sur Internet.

On commence par installer le paquet dkim-filter
apt-get install dkim-filter

Puis on créé un certificat qui va nous servir à signer les mails

mkdir /etc/postfix/dkim/
cd /etc/postfix/dkim/
openssl genrsa -out private.key 1024
openssl rsa -in private.key -pubout -out public.key
chmod 640 private.key
chown dkim-filter private.key

On configure dkim-filter
/etc/default/dkim-filter :

SOCKET="inet:12345@localhost"

/etc/dkim-filter.conf

#On log les actions dans le syslog
Syslog yes
#Utile si vous passez par un socket UNIX
UMask 002
#Les domaines à signer (on peut utiliser un fichier)
Domain mondomaine.tld
#La clef privée, s'il faut signer plusieurs domaines avec plusieurs clefs,
#il faut utiliser le paramètre KeyList à la place de Domain/KeyFile et Selector
KeyFile /etc/postfix/dkim/private.key
#Le selector à utiliser pour vérifier la signature
Selector monselector
#La liste des domaines/ip à signer mais pas à vérifier
InternalHosts /etc/postfix/dkim/InternalHosts.list
#La liste des domaines/ip à ignorer (pas de signature ni de vérification)
PeerList /etc/postfix/dkim/PeerList.list
#On supprimes les anciennes signatures dans le message (en cas de relai)
RemoveOldSignatures yes
#Ces 2 paramètres peuvent être utile pour débugguer
X-Header no
LogWhy no

/etc/postfix/dkim/InternalHosts.list

127.0.0.0/8
192.168.1.0/24

/etc/postfix/dkim/PeerList.list

192.168.2.0/24

S’en est fini de la configuration de dkim-filter, il faut maintenant dire à postfix de l’utiliser :
/etc/postfix/main.cf

smtpd_milters = inet:localhost:12345
non_smtpd_milters = inet:localhost:12345

On relance les 2 daemons

/etc/init.d/dkim-filter restart
/etc/init.d/postfix restart

et on test l’envoi de mails, normalement une signature devrait être présente dans l’entête des messages sortants du serveur.
Si c’est correct, on peut ajouter l’enregistrement DNS contenant la clef public

; DKIM du selector monselector pour le domaine mondomaine.tld
monselector._domainkey.mondomaine.tld. IN TXT "v=DKIM1; k=rsa; p=Afd5g46fdg46fIGfM...9zwIDAQAB"

On peut alors tester en conditions réelles l’envoi de mails vers une domaine qui supporte la vérification DKIM (gmail par exemple)
S’il n’y a pas d’erreurs, on peut ajouter un enregistrement ADSP (Author Domain Signing Practices) dans les DNS, attention, l’enregistrement suivant indique que TOUS les messages non signés venant de mondomaine.tld doivent être jetés !!

; Politique DKIM pour mondomaine.tld
_adsp._domainkey.mondomaine.tld. IN TXT "dkim=discardable"

Cette configuration ne doit pas être installée en production, elle est très incomplète et potentiellement dangereuse pour vos mails !!!
Il s’agit juste d’un mémo, pour le reste RTFM.

sources :