|
|
 | |  |  | Installation de postfix avec TLS (serveur de mail sécurisé) |  |
par Yann Berthier (30/11/2000)
--------[Postfix / TLS------------------------------------------------------
Qui n'a pas révé un jour d'avoir son Postfix causer TLS avec ses petits
camarades MTA ? Et bien c'est ce à quoi nous allons nous employer de ce pas.
1. Où commencer ?
Par la page de Postfix, http://www.postfix.org, un MTA sécurisé par
Wietse Venema.
Une présentation complète de postfix, par Alain Thivillon, est
disponible ici : http://www.hsc.fr/ressources/cours/postfix/
Et bien sur par la page où trouver le patch qui va bien :
http://www.aet.tu-cottbus.de/personen/jaenicke/postfix_tls/
2. De quoi a t'on besoin ?
Sans ordre particulier, aujourd'hui :
. Postfix snapshot-20001121
. OpenSSL-0.9.6
. et le patch pfixtls-0.6.26
Il faut de préférence utiliser la dernière version du patch.
3. Assez de théorie !
3.1. Décompresser le patch (je veux dire le tarball récupéré sur le site
mentionné plus haut)
3.2. Appliquer le patch.
On se met un dans l'arborescence du source postfix
(décompressé), puis :
% patch -p0 < patch_to_the_patch/pfixtls.diff
% cd path_to_postfix_src
% make makefiles CCARGS="-DHAS_SSL -I/usr/local/ssl/include" \
AUXLIBS="-L/usr/local/ssl/lib -lssl -lcrypto"
(bien sur, à modifier en fonction de votre installation de openssl)
% make
# sh INSTALL.sh, par exemple, pour installer postfix (ce qui n'est pas l'objet
de ce document)
3.3. Où ça se gate. Euh, je veux dire, où il est question de certificats.
3.3.1. Aller chercher de l'aspirine et du rhum
3.3.2. Se créer son certificat serveur
% openssl genrsa -out what.cert 1024
Puis il faut générer une 'requête de certificat', qui va être ensuite signée
par une autorité de certification :
% openssl req -in what.cert -out what.req -keyout what.key -new -nodes
Attention, il ne faut pas mettre de passphrase pour protéger la clef privée,
sinon postfix attend la passphrase avant de se lancer au boot !
Il est très important également que le Common Name du certificat soit égal au
nom canonique du serveur postfix (ici what.ever.tld)
L'autorité de certification signe :
% openssl x509 -req -in what.req -out what.crt \
-CA ca.crt -CAkey ca.key -days 2000 -CAcreateserial
Si vous voulez être votre propre autorité de certification :
http://www.aet.tu-cottbus.de/personen/jaenicke/postfix_tls/doc/myownca.html
Il faut enfin mettre les clefs et les certificats dans /etc/postfix/, et
vérifier les droits sur ces fichiers, *très important* puisque notre
clef privée n'est pas protégée par une pass-phrase :
# chmod 0400 /etc/postfix/what.key
# chown root:root /etc/postfix/what.key
# chown root:root /etc/postfix/what.crt
# chown root:root /etc/postfix/ca.crt
3.4. Où il est enfin question de postfix !
Dans /etc/postfix/main.cf, les paramètres propres à TLS sont à rajouter :
## config TLS
#
# certificats :
# on peut utiliser des certificats différents
# pour le client smtp et le serveur smtpd
smtp_tls_key_file = /etc/postfix/what.key
smtp_tls_cert_file = /etc/postfix/what.crt
smtpd_tls_key_file = /etc/postfix/what.key
smtpd_tls_cert_file = /etc/postfix/what.crt
smtpd_tls_CAfile = /etc/postfix/ca.crt
smtp_tls_CAfile = /etc/postfix/ca.crt
#
# c'est ici que l'on controle l'utilisation ou non de TLS
smtp_use_tls = yes
smtpd_use_tls = yes
#
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
smtp_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_ask_ccert = yes
#relay_clientcerts = hash:/etc/postfix/certs_ok
smtpd_tls_session_cache_database = sdbm:/etc/postfix/smtpd_scache
smtp_tls_session_cache_database = sdbm:/etc/postfix/smtp_scache
smtpd_tls_session_cache_timeout = 3600
smtp_tls_session_cache_timeout = 3600
Dans ca.crt, rajouter à suivre tous les certificats auquels on fait confiance
si on veut du 'verified ok' dans les headers
Il faut enfin rajouter une ligne dans /etc/postfix/master.cf :
tlsmgr fifo - - n 300 1 tlsmgr
NB : tlsmgr n'est *pas* chrootable.
Il n'y a plus maintenant qu'à lancer postfix :
# postfix start
4. Où on vérifie que tout est pour le mieux dans le meilleur des mondes :
yann@what:~% telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 what.ever.tld ESMTP Postfix
EHLO what
250-what.ever.tld
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-STARTTLS
250 8BITMIME
Notre postfix annonce désormais STARTTLS !!
Et si on envoie un mail entre deux serveurs qui causent TLS, on peut voir dans
les headers :
Received: from what.ever.tld (what.ever.tld [192.168.2.1])
(using TLSv1 with cipher EDH-RSA-DES-CBC3-SHA (168/168 bits))
(Client CN "what.ever.tld", Issuer CN "EVER CA" (verified OK))
by where.ever.tld (Postfix) with ESMTP id 3B71415CD4B
for <yann@where.ever.tld>; Fri, 17 Nov 2000 11:28:48 +0100 (CET)
On vérifie bien que le dialogue entre what.ever.tld et where.ever.tld a bien
été 'tlsisé', et que le certificat de what présenté est bien le bon (on le
connait car il est dans notre fichier /etc/postfix/ca.crt).
En rajoutant dans /etc/postfix/main.cf la ligne suivante :
smtp_tls_per_site = hash:/etc/postfix/tls_per_site
Avec dans le fichier /etc/postfix/tls_per_site
where.ever.tld MUST
Le serveur where.ever.tld *doit* alors présenter un certificat signé, ce qui
permet d'éviter qu'une machine puisse récupérer les mails à destination de
where.ever.tld en usurpant son adresse IP.
Etonnant, non ?
|