{{tag>smtp mail serveur howto installation auth sasl postfix ipv6}}
====== Installer un serveur de mail authentifié ======
Installation de postfix en mode TLS permettant :
* la réception de mail pour un domaine donné
* l'envoi de mail pour les utilisateurs authentifiés du domaine
* et tout ca avec une authentification sécurisée SSL (TLS)
* les utilisateurs sont les utilisateurs système de la machine
===== Prérequis =====
L'installation se fait sur une debian lenny a jour.
Tous les logiciels installés sont disponbles en paquet debian dans les depôts officiels.
Ce tutorial est cependant adaptable à d'autres distributions.
===== Installation des paquets =====
apt-get install postfix libsasl2-2 libsasl2-modules sasl2-bin procmail
Choisir le mode "Site internet" à l'installation de postfix, même si nous allons changer le fichier de configuration de postfix généré lors de cette installation.
===== Configuration initiale =====
On va supposer ici que votre domaine est mondomaine.com.\\
La machine enverra mail.mondomaine.com comme nom de serveur mail (et qui doit donc etre resolvable en DNS depuis le monde extérieur sous peine de voir vos mails refusés par les autres serveurs)\\
Les certificats SSL seront générés pour smtp.mondomaine.com
* fichier /etc/mailname :
mail.mondomaine.com
* fichier /etc/postfix/main.cf :
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/smtp.mondomaine.com.crt
smtpd_tls_key_file=/etc/ssl/private/smtp.mondomaine.com.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_mandatory_ciphers = medium
tls_medium_cipherlist = AES128+EECDH:AES128+EDH
# auth smtp TLS
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_received_header = yes
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = mail.mondomaine.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = mail.mondomaine.com, mondomaine.com, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
# filtre les pieces jointes executables pour windows
body_checks=regexp:/etc/postfix/windows_virus_checks
mailbox_command = procmail -a "$EXTENSION"
local_destination_concurrency_limit = 4
# ne pas mettre une bannière avec des indications sur le nom de votre serveur de courrier évite beaucoup de spam
smtpd_banner = bienvenue sur mon serveur de courrier
#evite les messages trop volumineux
message_size_limit=16384000
#filtrage des MAIL FROM: sans < > autour de l'adresse email
strict_rfc821_envelopes = yes
# on rejete les mails des serveurs mal configurés en face en rendant le helo obligatoire (et etant un FQDN valide)
smtpd_helo_required = yes
# la table /etc/postfix/helo_access permet d'accepter/rejeter sur des patterns du HELO
# on autorise les clients authentifiés si le helo n'est pas interdit dans la table helo_access
smtpd_helo_restrictions = permit_mynetworks, check_helo_access hash:/etc/postfix/helo_access,
permit_sasl_authenticated,
reject_invalid_hostname, reject_non_fqdn_hostname, reject_unknown_hostname
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = no
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, permit_tls_clientcerts,
reject_unauth_pipelining, reject_unknown_recipient_domain,
reject_non_fqdn_sender, reject_non_fqdn_recipient,
reject_unauth_destination
smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated,
reject_unauth_destination, reject_unauth_pipelining
# voir http://www.postfix.org/postconf.5.html#reject_unauth_pipelining pour plus d'info
smtpd_data_restrictions = reject_unauth_pipelining, permit
# filtrage du contenu avec amavis (conteneur antivirus/antispam) : oupa : ne pas mettre cette ligne si vous n'avez pas installé/configuré ces logiciels
#content_filter=amavisfeed:[127.0.0.1]:10024
# exlusion des protocoles pourris
smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3,!TLSv1,!TLSv1.1
smtpd_tls_protocols=!SSLv2,!SSLv3,!TLSv1,!TLSv1.1
* fichier "/etc/postfix/windows_virus_checks" :
#/^(Content-(Disposition: attachment;|Type:).*|\s+)(file)?name\s*=\s*"?.*\.(lnk|bat|c[ho]m|cmd|com|exe|dll|vxd|pif|scr|hta|jse?|sh[mbs]|vb[esx]|ws[fh])"?\s*$/ REJECT
/^begin [0-9]{1,4} .*\.(lnk|bat|c[ho]m|cmd|com|exe|dll|vxd|pif|scr|hta|jse?|sh[mbs]|vb[esx]|ws[fh])$/ REJECT
toute modification sur ce fichier doit etre suivie de l'exeution de la commande postmap /etc/postfix/windows_virus_checks
* fichier "/etc/postfix/helo_access" : \\ vous pouvez accepter/refuser des HELO spécifiques via ce fichier
serveur.domaine-mal-configure-mais-ami.com OK
localhost REJECT Get lost - you're lying about who you are
localhost.localdomain REJECT Get lost - you're lying about who you are
mail.mondomaine.com REJECT Get lost - you're lying about who you are
smtp.mondomaine.com REJECT Get lost - you're lying about who you are
toute modification sur ce fichier doit être suivie de l'execution de la commande postmap /etc/postfix/helo_access
* livraison des mails avec procmail : nous utiliserons le format Maildir pour stocker les mails dans /var/mail/$UTILISATEUR : fichier /etc/procmailrc :
VERBOSE=no
SHELL=/bin/bash
PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=/var/mail/$LOGNAME/
ORGMAIL=$MAILDIR/emergency-inbox
DEFAULT=$MAILDIR
LOGFILE=$MAILDIR/.procmail.log
Pour la création initiale du maildir, vous pouvez utiliser la commande suivante :# maildirmake.dovecot /var/mail/monUtilisateur
===== Configuration de l'authentification SASL =====
* Le demon d'authentification SASL (saslauthd) utilise des sockets UNIX pour communiquer avec les autres programmes. Comme Postfix tourne dans un environnement chrooté (dans "/var/spool/postfix/" en l'occurence), nous devons nous assurer que saslauthd et postfix peuvent communiquer. En d'autres mots : il faut demander a saslauthd de créer un socket quelque part dans l'environnement chrooté de postfix. Pour faire cela, éditer le fichier "/etc/default/saslauthd" et modifier comme suit :
* enlever le # devant START=Yes
* MECHANISMS="pam"
* changer la derniere ligne en OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
* pour dire a postfix d'utiliser saslauthd pour l'authentification
* créer le repertoire /etc/postfix/sasl avec les droits corrects :mkdir /etc/postfix/sasl
chown root:postfix /etc/postfix/sasl
* créer un fichier "smtpd.conf" dans ce répertoire /etc/postfix/sasl contenant :
pwcheck_method: saslauthd
mech_list: PLAIN
log_level: 5
saslauthd_path: /var/run/saslauthd/mux
* ajouter l'utilisateur postfix au groupe sasl :
adduser postfix sasl
===== Fin de l'installation =====
Il ne reste plus qu'a (re)démarrer tous ces services pour finir l'installation :
/etc/init.d/saslauthd restart
/etc/init.d/postfix restart
Vous n'avez ensuite plus qu'a configurer votre client mail pour utiliser ce serveur SMTP en TLS.
===== Un peu plus loin =====
==== Eviter encore un peu les SPAMS ====
Dans la configuration choisie, par défaut le nom de votre domaine apparait dans la banière de connexionn SMTP. Le spammeurs peuvent (en ne se gènent pas pour le faire :p ) donc vous envoyer des mails a n'importe-quoi@cedomaine, qui surchargeront inutilement votre serveur.
Une parade simple est donc de remplacer dans le fichier /etc/postfix/main.cf smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
par une valeur ne comportant pas $myhostname, comme par exemple :smtpd_banner = bienvenue sur mon serveur de courrier
==== Scanner les mails en utilisant un antivirus et un anti spam ====
Je vous conseille la lecture de cet (excellent :p) article : [[sysadmin:amavis|]]
==== Un serveur de mail compatible IPv6 ====
Pour rendre votre serveur mail compatible IPv6, il vous faut :
* disposer d'une IPv6 par exemple grace a votre FAI, voir par exemple les articles suivants : [[sysadmin:ipv6_free|chez free]] ou [[sysadmin:ipv6_ovh|chez OVH]]
* ouvrir votre firewall (ipv6) pour laisser passer le flux SMTP (aussi bien en entrée qu'en sortie)
* ajouter la ligne suivant dans votre fichier de configuration postfix /etc/postfix/main.cf pour lui dire d'ecouter en IPv4 mais aussi en IPv6 :
inet_protocols = ipv4, ipv6
Attention ceci n'est pas une liste par ordre de préférence, mais une liste tout court : le paramètre réel de préférence est [[http://www.postfix.org/postconf.5.html#smtp_address_preference|smtp_address_preference]] ... mais en fait ca n'est pas une préférence non plus : on peut forcer soit ipv4, soit ipv6 mais avec une valeur à //any// postfix utilise au choix ipv4 ou ipv6 en alternance selon son humeur et l'alignement des planètes
* adapter la directive de configuration mynetworks dans ce fichier en y ajoutant les reseaux IPv6 entre crochets, en plus des IPv4, comme par exemple :
mynetworks = 127.0.0.0/8 [::1]/128, 192.168.0.0/24 [2a01:e32:833f:e2a:2::]/112 192.168.1.0/24 [2a01:e32:833f:e2a:3::]/112 192.168.2.0/24 [2a01:e32:833f:e2a:4::]/112 192.168.3.0/24
Attention à ne rajouter ici que vos réseaux **internes** ipv6, vous n'en avez donc peut être aucun à rajouter en dehors du réseau loopback [::1]/128
* redémarrer votre serveur postfix pour prendre en compte ces changements :
# /etc/init.d/postfix restart
Vous pouvez vérifier que postfix ecoute bien en IPv6 aussi maintenant, comme par exemple avec la commande suivante (présence de la ligne tcp6) :
# netstat -tulpen | grep master
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 0 4479144 1552/master
tcp6 0 0 :::25 :::* LISTEN 0 4479146 1552/master
* déclarer un enregistrement DNS AAAA pointant sur l'IPv6 de votre serveur MX en plus de l'enregistrement A qui devrait déja exister dans votre zone, vous aurez ainsi dans votre zone DNS quelque chose ressemblant à :
; MX servers
@ IN MX 10 mail.mondomaine.com. ; Serveur primaire de mail
mail A 40.51.254.42 ; pour IPv4
AAAA 2a01:e32:833f:e2a::2 ; pour IPv6
Il faut bien sur adapter ces adresses pour mettre les vôtres
===== Toujours un peu plus loin : contourner le blocage du port 25 chez tout plein de FAI =====
Pour lutter contre le spam plein de FAI ont l'extreme bonne idée de bloquer le port 25 en sortie depuis leur réseau vers les autres.
C'est une bonne idée qui ne vous permet plus en revanche d'utiliser votre serveur de mail pour envoyer des mails depuis votre thunderbird fétiche lorsque vous vous déplacez ;).
Du coup on va utiliser le port "submission" (587) sur lequel on va exiger une authentification pour nous permettre d'envoyer nos mails.
Cette configuration s'effectue dans le fichier /etc/postfix/main.cf : décommenter/ajouter les lignes suivantes :
submission inet n - - - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
-o syslog_name=postfix/submission
On voit que l'on passe certaines options comme exiger l’authentification mais aussi un syslog_name explicite pour clarifier les logs
Il ne reste plus ensuite qu'à redémarrer postfix : # /etc/init.d/postfix restart
On eut ensuite vérifier qu'il écoute bien sur le port 587 avec netstat, ce qui devrait vous donner un résultat similaire à :
# netstat -tulpen | grep master
tcp 0 0 127.0.0.1:10025 0.0.0.0:* LISTEN 0 179608558 28748/master
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 0 179608461 28748/master
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 0 179608453 28748/master
tcp6 0 0 :::587 :::* LISTEN 0 179608463 28748/master
tcp6 0 0 :::25 :::* LISTEN 0 179608455 28748/master
Une fois votre firewall troué sur ce port 587, vous devriez être capable modulo une configuration de votre client mail (changer le port 25 que vous deviez avoir par ce nouveau port 587 concernant le SMTP sortant) d'envoyer des mails depuis n'importe quel FAI
===== Références =====
* http://fr.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol
* http://postfix.1071664.n5.nabble.com/smtp-address-preference-td50985.html