Postfix tranquille

Posted on June 28, 2013

Afin de mettre à jour régulièrement les différentes informations que je glanne sur le net à propos des serveurs mails, j’ai fait une page qui récapitule ce que je sais.

Bon, un tuto à peine plus conséquent que d’habitude : comment configurer son smtpd (postfix ici) facilement & rapidement, en ayant directement les quelques bonnes options qui permettent que ça tombe un peu magiquement en marche.

Tout d’abord : il faut se créer un certificat (on va l’auto-signer, il n’y aura qu’une seule étape à changer si on veut le faire signer par une autorité comme CACert).

Après avoir installé openssl, on génère une clé :

génération d’une clé RSA

openssl genpkey -algorithm RSA -out example.com.key -pkeyopt rsa_keygen_bits:4096

On génère le « Certificate Signing Request » qui nous servira à créer notre certificat auto-signé ou le certificat signé par une entité quelconque (non vu ici) :

requête de signature de certificat

openssl req -new -key example.com.key -out example.com.csr

Dernière étape, on génère le certificat final :

certificat final

openssl x509 -req -days 365 -in example.com.csr -signkey example.com.key -out example.com.cert

J’ai mis ces fichiers dans /etc/postfix/tls/, faites comme bon vous semble. Ensuite il faut générer une clé Diffie Hellman, qui permet de négocier une connexion (échange de clés).

certificat final

openssl genpkey -genparam -outform PEM -algorithm DH -out dh_1024.pem -pkeyopt dh_paramgen_prime_len:2048

On revient à la configuration de Postfix, et pour pas faire une longue liste d’explications inutiles, je préfère directement poster la configuration de mon vrai serveur @home.

root@frite /etc/postfix # cat main.cf
# http://www.postfix.org/postconf.5.html#smtpd_banner
# un petit texte affiché en début de connexion ($mail_name vaut par défaut Postfix, $mail_version je vous laisse deviner)
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)

# http://www.postfix.org/postconf.5.html#biff
# pour avertir les utilisateurs quand on reçoit un nouvel e-mail, faut pas l'activer si on a beaucoup d'utilisateurs
biff = no

# http://www.postfix.org/postconf.5.html#append_dot_mydomain
append_dot_mydomain = no

# http://www.postfix.org/postconf.5.html#delay_warning_time
# après ce délai, l'émetteur reçoit une copie de l'entête des messages qui sont toujours en attente d'être traités
delay_warning_time = 4h

# http://www.postfix.org/postconf.5.html#disable_vrfy_command 
disable_vrfy_command = yes

# http://www.postfix.org/postconf.5.html#mydomain
# mon domaine
mydomain = karchnu.fr

# http://www.postfix.org/postconf.5.html#myhostname
# le fqdn de mon serveur de mails
myhostname = mail.karchnu.fr

# http://www.postfix.org/postconf.5.html#masquerade_domains
# sert à modifier les entêtes des mails à l'envoi, exemple :
# masquerade_domains = foo.example.com example.com
# change "user@any.thing.foo.example.com" en "user@foo.example.com", mais change "user@any.thing.else.example.com" en "user@example.com". 
masquerade_domains = $mydomain

# http://www.postfix.org/postconf.5.html#home_mailbox
# le format de boîte que j'utilise (Maildir et non mbox)
home_mailbox = Maildir/

# http://www.postfix.org/postconf.5.html#alias_maps
alias_maps = hash:/etc/postfix/aliases
# http://www.postfix.org/postconf.5.html#alias_database
alias_database = hash:/etc/postfix/aliases

# http://www.postfix.org/postconf.5.html#myorigin
# c'est à partir de cette adresse qu'est envoyé le courier et c'est pour cette adresse qu'on reçoit le courier
myorigin = karchnu.fr
mydestination = mail.$mydomain, $mydomain, localhost

# http://www.postfix.org/postconf.5.html#mailbox_size_limit
mailbox_size_limit = 1073741824

# http://www.postfix.org/postconf.5.html#message_size_limit
message_size_limit = 15728640

# http://www.postfix.org/postconf.5.html#recipient_delimiter
recipient_delimiter = +

# http://www.postfix.org/postconf.5.html#smtpd_sasl_auth_enable
smtpd_sasl_auth_enable = yes

# http://www.postfix.org/postconf.5.html#smtpd_sasl_security_options
smtpd_sasl_security_options = noanonymous

# http://www.postfix.org/postconf.5.html#smtpd_sasl_local_domain
smtpd_sasl_local_domain     = $mydomain

# http://www.postfix.org/postconf.5.html#broken_sasl_auth_clients
broken_sasl_auth_clients    = no

# http://www.postfix.org/postconf.5.html#smtpd_sender_login_maps
smtpd_sender_login_maps = hash:/etc/postfix/sender_login

# http://www.postfix.org/postconf.5.html#smtpd_sender_restrictions
smtpd_sender_restrictions =
        reject_unknown_sender_domain, 
        reject_non_fqdn_sender, 
        reject_authenticated_sender_login_mismatch

# http://www.postfix.org/postconf.5.html#smtpd_recipient_restrictions
smtpd_recipient_restrictions = 
        permit_sasl_authenticated,
        reject_unknown_recipient_domain, 
        reject_non_fqdn_recipient, 
        reject_unauth_destination

# http://www.postfix.org/postconf.5.html#mailbox_command
# permet de récupérer les e-mails et de les placer où on le souhaite
# par l'intermédiaire d'un programme externe
mailbox_command = /usr/bin/procmail -f- -a $USER

# http://www.postfix.org/postconf.5.html#smtpd_helo_required
smtpd_helo_required = yes

# *********************************************
# *                    TLS                    *
# *********************************************

# http://www.postfix.org/postconf.5.html#smtp_use_tls
smtp_use_tls = yes

# http://www.postfix.org/postconf.5.html#smtpd_use_tls
smtpd_use_tls = yes 

# http://www.postfix.org/postconf.5.html#smtp_tls_security_level
smtp_tls_security_level = may

# http://www.postfix.org/postconf.5.html#tls_export_cipherlist
# pour interdire les chiffrements de merde
tls_export_cipherlist = !aNULL:!eNULL:!EXPORT:!MD5:!DES:!LOW:kEDH:HIGH:!MEDIUM

smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
smtp_tls_mandatory_protocols=!SSLv2,!SSLv3
smtpd_tls_protocols=!SSLv2,!SSLv3
smtp_tls_protocols=!SSLv2,!SSLv3

# http://www.postfix.org/postconf.5.html#smtpd_tls_auth_only
# http://www.postfix.org/postconf.5.html#smtpd_tls_security_level
# forcer l'utilisation de TLS avant d'envoyer l'identification
smtpd_tls_auth_only = yes
smtpd_tls_security_level = may

# http://www.postfix.org/postconf.5.html#smtpd_tls_auth_only
# http://www.postfix.org/postconf.5.html#smtpd_tls_key_file
# http://www.postfix.org/postconf.5.html#smtpd_tls_cert_file
# http://www.postfix.org/postconf.5.html#smtpd_tls_loglevel
# http://www.postfix.org/postconf.5.html#smtpd_tls_received_header
smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/postfix/tls/mail.karchnu.fr.key
smtpd_tls_cert_file = /etc/postfix/tls/mail.karchnu.fr.cert
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes

# http://www.postfix.org/postconf.5.html#smtpd_tls_dh1024_param_file
# http://www.postfix.org/postconf.5.html#smtpd_tls_dh512_param_file
# http://www.postfix.org/postconf.5.html#smtpd_tls_eecdh_grade
# Diffie-Hellman
smtpd_tls_dh1024_param_file = /etc/postfix/dh_1024.pem
smtpd_tls_dh512_param_file = /etc/postfix/dh_512.pem
smtpd_tls_eecdh_grade = strong

vérifier un certificat

openssl verify -purpose sslclient votre_certificat.cert

Si vous avez des améliorations à apporter, n’hésitez pas à me contacter par e-mail (karchnu CHEZ karchnu POINT fr).

EDIT: changement de configuration suivant les diverses failles survenues récemment.

Merci à cet article pour apprendre à gérer les certificats.