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.