polux     Julien Thomas - TELECOM Bretagne frenchenglish

SMTP : activation des supports SSL et SASL

Dans le cas de SMTP, la sécurisation peut être vue de différents points de vue. Premièrement, SMTP utilise LDAP et il est donc nécessaire de sécuriser ces communications via l'extension TLS de LDAP. Deuxièmement, le support SLL/TLS permet d'assurer la confidentialité des communications avec les clients. Enfin, le support SASL permet d'assurer l'authentification des clients. Ces différents aspects sont présentés dans cette section. Les configurations se sont en partie basées sur les documents Configurer tls ssl et cyrus sasl avec postfix (Nicolas Billard : http ://www.niqozweb.net/Configurer-TLS-SSL-et-Cyrus-SASL) et Howto postfix-ldap virtual users with qmail schema (Gentoo wiki : http ://gentoowiki. com/HOWTO_Postfix-LDAP_virtual_users_with_qmail_schema)

Connexion à l'annuaire LDAP

La configuration de la connexion à l'annuaire LDAP se fait via le fichier main.cf. Afin de respecter la séparation des pouvoirs, le compte utilisé pour se connecter est cn=smtp, comme l'indique le listing suivant du fichier main.cf :

ldapvirtual_server_host = ldaps://LDAP_URL
ldapvirtual_server_port = 636
ldapvirtual_version = 3
ldapvirtual_bind = no
ldapvirtual_bind_dn = cn=smtp,ou=ldap,ou=accounts,ROOT_DN
ldapvirtual_bind_pw = smtp
ldapvirtual_search_base =ou=mails,ou=accounts,ROOT_DN
ldapalias_server_host = ldaps://ldap.polux.org
ldapalias_server_port = 636
ldapalias_version = 3
ldapalias_bind = yes
ldapalias_bind_dn = cn=smtp,ou=ldap,ou=accounts,ROOT_DN
ldapalias_bind_pw = smtp

Parmi les différentes options de ce fichier, certaines sont essentielles pour la sécurité. N_server_port permet de définir le port utilisé pour la connexion. Avec le port 389, la connexion se fait en mode classique non sécurisé. Il est donc nécessaire de soit utiliser le port 636, soit 389 + TLS. Le support de SSL étant simple à configuré, nous avons donc utilisé SSL en spécifiant N_server_host = ldaps://ldap.polux.org et N_server_port = 636. L'ajout de ldaps :// est obligatoire car par défaut la connexion utilisée est ldap :// (même avec le port 636).

ldapalias_bind = yes permet de définir si la connexion est authentifiée ou non (i.e. utilisation des options ldapalias_bind_N. Cependant, cette option requiert N_version = 3).

La récupération d'erreurs sur postfix pouvant être assez chaotique, l'utilisation de l'outil postmap (postmap -v -q postfix ldap:ldapvirtual et postmap -v -q postfix ldap:ldapalias) peut être utile. Étant donné que des informations confidentielles ont été ajoutées, il est nécessaire de sécuriser le fichier main.cf avec la commande chmod o= main.cf.

Création du certificat

Tout comme pour pop et imap, nous avons choisi d'utiliser des clés non sécurisées (simplification du lancement des services). De ce fait, les différentes étapes présentées dans cette section vont aboutir à l'obtention d'un certificat signé pour smtp et d'une clé RSA non chiffrée.

La première étape crée les données RSA et chiffre le certificat.

# mv4
cd /home-nfs/postfix
openssl genrsa -out postfix-key.pem 2048
openssl req -new -nodes -key postfix-key.pem -out postfix_DSC.pem
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:France
Locality Name (eg, city) []:Rennes
Organization Name (eg, company) [Internet Widgits Pty Ltd]:POLUX
Organizational Unit Name (eg, section) []:smtp
Common Name (eg, YOUR name) []:smtp.polux.org
82 PARTIE 4. SÉCURISATION DES SERVICES
Email Address []:admin@polux.org
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
openssl ca -in postfix_DSC.pem -out postfix_cert.pem -days 3650

Au niveau du serveur mv3, les clés RSA sont ajoutées dans le dossier /etc/postfix/ssl et leur droits sont correctement configurés.

# mv3
mkdir /etc/postfix/ssl
cp /home/nfs/CAcert.crt /home/nfs/postfix/postfix-key.pem
/home/nfs/postfix/postfix_cert.pem /etc/postfix/ssl
cd /etc/postfix/ssl
chown root.root *
chmod 400 postfix-key.pem
chmod 440 postfix_cert.pem CAcert.crt

Configuration de SASL

Après avoir configuré (mais non lancé) les communications SSL, il faut également configurer le support SASL. La première étape consiste à installer l'extension sasl pour postfix et à configurer saslauthd, utilisé par l'extension SASL.

USE=sals emerge postfix
rc-update add saslauthd default
/etc/init.d/saslauthd start

La configuration de SASL repose sur le fichier /etc/sasl2/smtpd.conf. Dans notre cas, l'utilisation de saslauthd permet l'utilisation de ldap. Il est donc nécessaire d'indiquer à SASL d'utiliser l'authentification via saslauthd :

pwcheck_method: saslauthd
mech_list: plainlogin

Configuration de salsauthd

Saslauthd supporte différents mécanismes d'authentification tels que ldap, sasldb ou encore pam. Ces information sont configurables dans le fichier /etc/conf.d/salsauthd. Dans notre cas, nous utilisons ldap et nous avons donc :

SASL_AUTHMECH=" ldap "
SASLAUTHD_OPTS="-a ${SASL_AUTHMECH} -O /etc/sasl2/saslauthd.conf "

Comme indiqué par SASLAUTHD_OPTS, les options relatives à ldap sont stockées dans le fichier /etc/sasl2/saslauthd.conf :

ldap_servers: ldaps://LDAP_URL:636
ldap_version: 3
ldap_search_base: ou=mail , ou=accounts ,ROOT_DN
ldap_scope: sub
ldap_filter: uid=%u
ldap_auth_method: bind
ldap_bind_dn: cn=sasl,ou=ldap,ou=accounts,ROOT_DN
ldap_password: MDP

Ce fichier contient des informations sensibles. il est donc nécessaire de le protéger par chmod o= /etc/sasl2/saslauthd.conf. Cette protection renforce la sécurité, bien que les extensions du module SASL de SELinux (type saslauthd_config_t) assure la confidentialité des fichiers du répertoire /etc/sasl2.

Afin d'éviter d'avoir des problèmes au niveau de postfix, il est possible de vérifier si saslauthd a bien été configuré en utilisant la commande ./testsaslauthd -u user -p pass, après avoir redémarrer le démon.

Activation des protocoles

Après avoir défini les condigurations de base, il est nécessaire d'activer les extensions de sécurité (SSL et SASL) de postfix.

Activation de TLS

L'activation de TLS/SSL se base sur le fichier /etc/postfix/master.cf. Il suffit de décommentez les lignes suivantes :
~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ ~~~~~~~
smtps inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes
~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ ~~~~~~~

La confoguration de TLS/SSL au niveau de postfix se base également sur le fichier /etc/postfix/main.cf :

smtpd_tls_cert_file = /etc/postfix/ssl/postfix_CRT.pem
smtpd_tls_key_file = /etc/postfix/ssl/postfix-key.pem
smtpd_tls_CAfile = /etc/postfix/ssl/CAcert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_use_tls = yes
#smtpd_enforce_tls = yes
smtpd_tls_auth_only = no
smtpd_tls_session_cache_database = btree:/var/run/
smtpd_tls_session_cache

Les trois premières lignes définissent les emplacement du certificat pour stmp (smtpd_tls_cert_file), de la clé RSA (smtpd_tls_key_file) et du certificat racine (smtpd_tls_CAfile). Les lignes suivantes configure TLS : smtpd_tls_loglevel indique le niveau d'enregistrement dans les logs (1 signie informations de négociation), smtpd_tls_received_header indique si les informations tls sont à rajoutées dans les messages, smtpd_use_tls active TLS et smtpd_tls_auth_only force l'utilisation de TLS pour les connexions authentifiées.

Activation de SASL

L'activation de SASL se configure également au niveau du fichier /etc/postfix/main.cf. smtpd_sasl_auth_enable active SASL, smtpd_recipient_restrictions définit les autorisations d'envois de courrier, smtpd_sasl_authenticated_headeraffiche les noms de login SASL dans l'en-tête des messages, broken_sasl_auth_clients assure la compatibilité avec d'ancien clients.

smtpd_sasl_security_options et smtpd_client_restrictions permettent de renforcer la sécurité lors de l'authentification : les clients sont obligés de s'identifier et aucun login anonyme n'est autorisé.

smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain =
smtpd_r e c ipi ent_r e s t r i c t i ons = permit_mynetworks
pe rmi t_sas l_authent i cat ed r e j e c t_unauth_de s t inat ion
smtpd_c l i ent_r e s t r i c t i ons = permi t_sas l_authent icated , r e j e c t
smtpd_sasl_authenticated_header = yes
smtpd_sas l_secur i ty_opt ions = noanonymous
broken_sas l_auth_cl ient s = yes
smtpd_sasl_path = smtpd

SMTP et webmail

Apache ne peut pas utiliser tls. Ce problème est probablement du au fait que TLS n'et pas supporté sur le serveur (module pear). De ce fait, l'utilisation de smtpd_enforce_tls = yes engendre l'erreur "Une erreur est survenue lors de l'envoi du message : Failed to set sender : admin@polux.org [SMTP: Invalid response code received from server (code: 530, response: 5.7.0 Must issue a STARTTLS command first ) ]". Celà est du au fait que smtp oblige l'utilisation de STARTTLS avant l'authentifcation SASL. La solution consiste donc à désactiver l'aspect obligatoire (smtpd_enforce_tls = no). Les connexions sur horde se font donc via SSL.

Cependant, il sera possible qu'un utilisateur se connecte en TLS non sécurisé.



«Design-by-assumption works as long as assumptions hold. Assumptions are shortcuts to useful efficiencies, provided they are not violated. »
David S. Isenberg

«If the kernel is not evaluated to an MLS-capable protection profile, MLS features cannot be trusted regardless of how impressive the demonstration looks.»
J. Davidson