Ce présent document décris l'installation d'un serveur de mail (MTA) courier avec un connecteur IMAP le tout sécurisé avec SSL sur un système d'exploitation de type Debian en version wheezy.
root@host:~# apt-get install gamin courier-mta-ssl courier-imap-ssl courier-mta
Note : Gamin est utile pour l'activation de IDLE
On spécifie le type d'authentification dans le fichier /etc/courier/authdaemonrc :
authmodulelist="authuserdb"
Ici les informations d'identification seront stockés dans un fichier ".dat" de type BerkeleyDB.
Afin d'éviter de créer un compte utilisateur pour chaque compte mail on utilisera un compte générique vmail qui sera « propriétaire » de l'ensemble des comptes mails des utilisateurs. Cela évitera de peupler inutilement le fichier /etc/passwd d'utilisateurs n'ayant pas d'autres vocations que d'utiliser les fonctionnalités mails du serveur.
root@host:~# useradd -u 7200 -m -s /bin/bash vmail root@host:~# passwd vmail
Ou :
root@host:~# useradd -u 7200 --system -s /bin/bash vmail
On va maintenant créer un dossier dans lequel seront stockés les informations d'identifications de chaque utilisateur pour notre/nos domaine(s).
root@host:~# mkdir /etc/courier/userdb ; chmod 700 /etc/courier/userdb
root@host:~# userdb -f /etc/courier/userdb/domain1 user1@domain1 \ set home=/home/vmail/domain1/user1 uid=7200 gid=7200
root@host:~# userdbpw -md5 | userdb -f /etc/courier/userdb/domain1 user1@domain1 set systempw root@host:~# userdbpw -hmac-sha1 | \ userdb -f /etc/courier/userdb/domain1 user1@domain1 set hmac-sha1pw
Maintenant nous devons créer le répertoires Maildir de notre utilisateur.
Exemple dans notre partition /data/vmail.
root@host:~# chown vmail:vmail /data/vmail/
Droits sur les dossiers /data/vmail/domain :
On se logue en tant qu’utilisateur vmail et on crée le Maildir de notre utilisateur :
root@host:~# su -s /bin/bash – vmail $ mkdir -p /data/vmail/domain/user1 && maildirmake /data/vmail/domain1/user1/Maildir
En premier lieu on s'assure que seul root aura accès au fichier :
root@host:~# chmod 700 /etc/courier/userdb && chmod 600 /etc/courier/userdb/* root@host:~# makeuserdb
On pourra faire un test d'authentification :
root@host:~# /etc/init.d/courier-authdaemon restart root@host:~# authtest user1@domain
On peut spécifier des alias en éditant le fichier /etc/courier/aliases/domaine et en le complétant de la sorte :
adresse_initiale@domaine: adresse_de_redirection@domaine
Une fois modifié on valide la configuration via la commande :
root@host:~# makealiases
Ou :
root@host:~# makealiases -chk
Pour vérifier que tout est ok. /!\ cette commande ne génère pas les aliases
Pour voir les alias actifs :
root@host:~# makealiases -dump
root@host:~# echo localhost > /etc/courier/locals root@host:~# echo mon.serveur.domain.com >> /etc/courier/locals root@host:~# mkdir /etc/courier/hosteddomains root@host:~# touch /etc/courier/hosteddomains/domain.com root@host:~# echo domain.com > /etc/courier/hosteddomains/domain.com root@host:~# makehosteddomains root@host:~# mkdir /etc/courier/esmtpacceptmailfor.dir/ root@host:~# echo domain.com > /etc/courier/esmtpacceptmailfor.dir/domain.com root@host:~# makeacceptmailfor
Si l'envoi des mails doit passer par un relay smtp (de son FAI par exemple) on pourra le faire en suivant les instructions suivantes.
/etc/courier/esmtproutes
: smtp.domaine.com
Si le port du relay est différent de TCP:25 :
: smtp.domaine.com,445
Si besoin une authentification est nécessaire on éditera le fichier /etc/courier/esmtpauthclient :
smtp.domaine.com username mdp
/etc/courier/esmtpd
PATH=/usr/bin:/bin:/usr/bin:/usr/local/bin SHELL=/bin/bash ULIMIT=32768 BOFHCHECKDNS=1 BOFHNOEXPN=1 BOFHNOVRFY=1 TARPIT=1 NOADDMSGID=1 NOADDDATE=0 ESMTP_LOG_DIALOG=0 AUTH_REQUIRED=0 COURIERTLS=/usr/bin/couriertls TLS_KX_LIST=ALL TLS_COMPRESSION=ALL TLS_CERTS=X509 TLS_CERTFILE=/etc/courier/esmtpd.pem TLS_TRUSTCERTS=/etc/ssl/certs TLS_VERIFYPEER=NONE AILUSER=daemon AILGROUP=daemon PORT=smtp BLACKLISTS="" ACCESSFILE=${sysconfdir}/smtpaccess AXDAEMONS=100 AXPERC=10 AXPERIP=10 PIDFILE=/var/run/courier/esmtpd.pid TCPDOPTS="-noidentlookup -stderrlogger=/usr/sbin/courierlogger" ESMTPAUTH="PLAIN LOGIN CRAM-MD5" ESMTPAUTH_WEBADMIN="LOGIN CRAM-MD5 CRAM-SHA1 CRAM-SHA256" ESMTPAUTH_TLS="PLAIN LOGIN CRAM-MD5" ESMTPAUTH_TLS_WEBADMIN="PLAIN LOGIN CRAM-MD5 CRAM-SHA1 CRAM-SHA256" ESMTPDSTART=YES
TLS_PROTOCOL="TLS1" TLS_CIPHER_LIST="TLSv1:HIGH:!LOW:!MEDIUM:!EXP:!NULL:!aNULL@STRENGTH"
Activer l'authentification SMTP
Dans /etc/courier/esmtpd
ESMTPAUTH="LOGIN"
L'IDLE permet d'avoir l'état en temps réel du dossier mail dans lequel on travaille. Il permet ainsi d'être averti de tout changement (ex réception d'un nouveau mail) de façon instantané (pour peut que l'on dispose d'un client de messagerie compatible).
IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE" IMAP_USELOCKS=1 IMAP_ENHANCEDIDLE=1
On créer un fichier /etc/courier/sizelimit et on insère le champ suivant (pour 50M) :
echo "52428800" > /etc/courier/sizelimit
Le catch-all est une adresse qui reçois tous les mails d'un domaine dont le destinataire n'a pas été créé. Par exemple, un mail adressé à inconnu@domaine.com sera reçu dans la boite de réception du catch-all.
Sous courier-mta, le catch-all est l'adresse alias@.
root@host:~# sudo su -s /bin/sh - vmail root@host:~# echo "./Maildir" > Â domain/alias/.courier-default
Le paramétrage de IMAP SSL se fait dans le fichier /etc/courier/imapd-ssl :
SSLPORT=993 SSLADDRESS=0 SSLPIDFILE=/var/run/courier/imapd-ssl.pid SSLLOGGEROPTS="-name=imapd-ssl" IMAPDSSLSTART=YES IMAPDSTARTTLS=YES IMAP_TLS_REQUIRED=0 COURIERTLS=/usr/bin/couriertls TLS_KX_LIST=ALL TLS_COMPRESSION=ALL TLS_CERTS=X509 TLS_CERTFILE=/etc/courier/imapd.pem TLS_TRUSTCERTS=/etc/ssl/certs TLS_VERIFYPEER=NONE TLS_CACHEFILE=/var/lib/courier/couriersslcache TLS_CACHESIZE=524288 AILDIRPATH=Maildir
TLS_PROTOCOL="TLS1" TLS_CIPHER_LIST="TLSv1:HIGH:!LOW:!MEDIUM:!EXP:!NULL:!aNULL@STRENGTH"
openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt openssl dhparam -out dh.param 4096 cat server.key server.crt dh.param > esmtpd.pem cp esmtpd.pem /etc/courier/ cp esmtpd.pem /etc/courier/imapd.pem cp server.crt /etc/ssl/certs/ cp server.key /etc/ssl/private/
cat privkey.pem cert.pem chain.pem > /etc/courier/esmtpd.pem cat privkey.pem cert.pem chain.pem > /etc/courier/imapd.pem
Test d'envoi de mails en ligne de commande
root@host:~# echo -e "To: user2@domain2\nFrom: user1@domain1" | /usr/sbin/sendmail
Test d'authentification depuis le serveur :
root@host:~# authtest -s imap utilisateur mdp
POP3
root@host:~# telnet x.x.x.x 110 user USERNAME pass PASSWORD stat quit
IMAP
root@host:~# telnet x.x.x.x 143 a login USERNAME PASSWORD a examine inbox a logout
POP3 over SSL
root@host:~# openssl s_client -connect x.x.x.x:995 user USERNAME pass PASSWORD stat quit
IMAP over SSL
root@host:~# openssl s_client -connect x.x.x.x:993 a login USERNAME PASSWORD a examine inbox a logout
Avec S: pour les réponses du serveur et C: pour les commandes client.
Pour tester l'authentification on utilisera l'instruction : auth login et on fournira son login + le mdp encodés en base64.
root@host:~# telnet x.x.x.x 25 S: 220 domaine.com SMTP Ready C: EHLO domaine.com S: 250 domaine.com C: MAIL FROM:<test@domaine.com> S: 250 OK C: RCPT TO:<user1@domaine.com> C: DATA S: 354 OK C: From: <test@domaine.com> C: To: <test@domaine.com> C: Subject: Test C: C: Test C: . S: 250 OK C: QUIT R: 221 domaine.com closing transmission
Pour tester SMTP avec authentificaiton on utilisera la commande : auth login lors de l'Ă©change avec le serveur, puis nous donnerons le login et mot de passe au format base64.
root@host:~# echo user@shebangthedolphins.net | base64 dXNlckBzaGViYW5ndGhlZG9scGhpbnMubmV0Cg==
root@host:~# echo P@ssw0rd | base64 UEBzc3cwcmQK
root@host:~# telnet x.x.x.x 25 S: 220 domaine.com SMTP Ready C: EHLO domaine.com S: 250 domaine.com C: AUTH LOGIN S: 334 VXNlcm5hbWU6 C: dXNlckBzaGViYW5ndGhlZG9scGhpbnMubmV0Cg== S: 334 UGFzc3dvcmQ6 C: UEBzc3cwcmQK S: 235 2.7.0 C: MAIL FROM:<test@domaine.com> S: 250 OK C: RCPT TO:<user1@domaine.com> C: DATA C: Subject: Test C: Test C: . S: 250 OK C: QUIT R: 221 domaine.com closing transmission
Note : Si besoin on pourra sortir du telnet avec la combinaison Ctrl + ], puit taper quit.
Il est possible d'autoriser le relais de mails, pour se faire il faudra créer un fichier dans (noter le tab très important):
cat /etc/courier/smtpaccess/domaine IP_autorisé<tab>allow,RELAYCLIENT
On lancera la commande pour intégrer la configuration du relais :
root@host:~# makesmtpaccess
root@host:~# /etc/init.d/courier-mta restart
root@host:~# /etc/init.d/courier-mta-ssl restart
CORRUPTED MESSAGE This is the Courier Mail Server 0.68 on mailserver. I received the following message for delivery to your address. This message contains several internal formatting errors. This is often caused by viruses that attempt to infect remote systems. Instead of blocking this message, I converted it to a safe, text-only attachment that can be safely read with a text editor. This sometimes also happens when the sender's mail software has a bug that creates improperly-formatted messages. Although these kinds of formatting errors may often be ignored by other mail servers, this server detects and intercepts improperly-coded messages in order to prevent viruses from taking advantage of bugs in E-mail programs: ----------------------------------------------------------------------------- This message contains improperly-formatted binary content, or attachment. See <URL:ftp://ftp.isi.edu/in-notes/rfc2045.txt> for more information. -----------------------------------------------------------------------------
Résolution : On créer le fichier /etc/courier/bofh et on entre :
opt BOFHBADMIME=accept
touch /etc/courier/locallowercase
Si une boîte mail n'est pas correctement paramétrée (dossier Maildir inexistant, mauvais uid/gid, erreur dans maildrop, etc), courier décide de ne plus tenter de livrer les mails pendant un certain temps. L'adresse est blacklisted for backscatter (cf : man courier)
Des messages d'erreur "456 Address temporarily unavailable" et "502 ESMTP command error" sont renvoyés au SMTP et sont visibles dans les logs.
Pour lister les adresse bloquées :
root@host:~# courier show all
Pour débloquer une adresse :
root@host:~# courier clear user@domain.com
Pour débloquer toutes les adresses :
root@host:~# courier clear all
courieresmtp: id=00000000008002CF.0000000050C99F63.00003ECE,from=<>,addr=<adresse@domaine> No route to host
Cela vient du fait que la passerelle par défaut refuse de router le trafic smtp. Il faut dans ce cas préciser manuellement le serveur smtp dans le fichier /etc/courier/esmtproutes, exemple avec orange :
: smtp.orange.fr
Et on redémarre courier :
root@host:~# /etc/init.d/courier-mta restart
Dans /etc/courier/imapd
MAXDAEMONS=300 AXPERIP=60
root@host:~# mkdir /etc/courier/esmtpacceptmailfor.dir/ root@host:~# echo domain1 > /etc/courier/esmtpacceptmailfor.dir/domain1 root@host:~# makeacceptmailfor
On modifie la ligne suivante dans /etc/courier/esmtpd
TCPDOPTS="-nodnslookup -noidentlookup"
root@host:~# mailq
root@host:~# ls -Rhl /var/lib/courier/msgs/
root@host:~# cancelmsg msgid
root@host:~# cancelmsg $(mailq | grep 00 | tr -s " " | awk '{ print $2 }')
Contact :