Outils pour utilisateurs

Outils du site


admin-systeme:installer-serveur-mail

Installer et configurer un serveur mail sur CentOS

Introduction

Il existe des tas de façons différentes de mettre en place un serveur de mails. Ce tutoriel décrit simplement une procédure permettant de faire fonctionner correctement un serveur mail correspondant aux critères et besoins suivants :

  • Fonctionnel sur un serveur CentOS
  • Utilisation des outils Postfix et Dovecot
  • Réception d'emails depuis plusieurs domaines
  • Envoi d'emails à partir d'un seul serveur SMTP
  • Utilisateurs gérés par le système (utilisateurs Linux)
  • Utilisation de certificats SSL
  • Si un email est envoyé à un utilisateur inexistant, il est transmis à l'administrateur (évite la création de nouvelles adresses manuellement, augmente les risques de spams)
  • Gestion du spam

Dans ce tutoriel, les domaines que j'utilise sont mail.domain.tld et mail.domain2.tld. Le domaine mail.domain.tld est considéré comme principal et supportera l'accès IMAP et SMTP.

Mon utilisateur système sera arthur (original !).

Les logiciels

Commençons par installer les outils :

yum install postfix dovecot spamassassin procmail

Et les ajouter au démarrage du serveur :

chkconfig postfix on
chkconfig dovecot on
chkconfig spamassassin on

Le certificat SSL

Si vous n'en avez pas, générez un certificat SSL.

Le fichier .crt est à placer dans le répertoire /etc/pki/tls/certs/.

Le fichier .key est placer dans le répertoire /etc/pki/tls/private/.

On place les droits qui vont bien :

chmod 0400 /etc/pki/tls/private/server.key
chmod 0444 /etc/pki/tls/certs/server.crt

Configuration de Postfix

Modifier la configuration par défaut avec les options suivantes dans le fichier /etc/postfix/main.cf :

A noter : Je reprends ces paramètres car ils fonctionnent. Certains d'entre eux ne sont peut être pas parfaits, ou parfaitement adapté à vos besoins.
# Vérifiez, décommentez, modifez et ajouter si nécessaire :
myhostname = mail.$mydomain
mydomain = domain.tld
myorigin = $myhostname
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = mail/
mailbox_command = /usr/bin/procmail
smtpd_banner = $myhostname ESMTP

Puis, à la fin du fichier ajouter :

# for SMTP-Auth settings
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_client_restrictions = permit_mynetworks,permit
smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject

virtual_alias_domains = domain2.tld
virtual_alias_maps = hash:/etc/postfix/virtual

Maintenant, il faut associer les adresses mail aux utilisateurs. On va déjà envoyer les mails systèmes à arthur en modifiant le fichier /etc/aliases :

# Person who should get root's mail
root:         arthur

Et maintenant, la redirection à partir des noms de domaine, dans le fichier /etc/postfix/virtual.

# Tout envoyer à l'utilisateur système arthur
@domain.tld         arthur
@domain2.tld        arthur

D'autres choses sont possible, selon vos besoins :

# Redirection email
pierre@domain.tld   pierre@caramail.com

# Plusieurs utilisateurs
all@domain.tld      arthur, pierre, andre, edouard@gmail.com

# etc

Suite à toutes ces modifications, on va demander à Postfix et au système de les prendre en compte :

newaliases
postmap /etc/postfix/virtual
service postfix restart

SMTP TLS pour Postfix

Votre serveur SMTP devrait fonctionner correctement avec la configuration actuelle sur le port 25. Mais, on préférera utiliser un connexion sécurisée avec le serveur SMTP, d'autant que le port 25 est bloqué sur la majorité des FAI.

Pour cela, on va créer un certificat SSL pour l'occasion. Commencez par le dossier :

mkdir /etc/postfix/tls
cd /etc/postfix/tls

Puis générez le certificat:

openssl req -new -key smtpd.key -out smtpd.csr
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650

Maintenant, ajoutez à la fin du fichier /etc/postfix/main.cf :

smtpd_use_tls=yes
smtpd_tls_security = may
smtpd_tls_security_level = may
smtpd_tls_auth_only = no
smtpd_tls_key_file = /etc/postfix/tls/smtpd.key
smtpd_tls_cert_file = /etc/postfix/tls/smtpd.crt
smtpd_tls_CAfile = /etc/postfix/tls/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_loglevel = 1
smtp_tls_note_starttls_offer = yes

Une dernière étape et notre serveur SMTP sera parfait. Ouvrez le fichier /etc/postfix/master.cf, et décommentez la ligne suivante :

submission inet n       -       n       -       -       smtpd

Configuration de Dovecot

On a déjà fait une bonne partie du boulot, reste maintenant à configurer Dovecot, notre serveur IMAP.

Commençons par le fichier /etc/dovecot/dovecot.conf :

# Décommenter
protocols = imap
 
# Ajouter à la fin du fichier
service auth {
    unix_listener /var/spool/postfix/private/auth {
          mode = 0660
          user = postfix
          group = postfix
    }
  }
  auth_mechanisms = plain login

Le fichier /etc/dovecot/conf.d/10-mail.conf maintenant :

mail_location = maildir:~/mail:LAYOUT=maildir++:INDEX=~/mail/index:CONTROL=~/mail/control

Le fichier /etc/dovecot/conf.d/10-ssl.conf maintenant :

ssl_cert = </etc/pki/tls/certs/server.crt
ssl_key = </etc/pki/tls/private/server.key

On redémarre tout ça, et ça va commencer à rouler :

service dovecot start

SpamAssassin et Procmail

Dans la configuration précédente de Postfix, on a fait le choix de rediriger les nouveaux messages vers procmail. Ca signifie que pour tous vous utilisateurs systèmes (ici, on a seulement arthur), vous allez devoir créer un fichier .procmailrc qui explique au système ce qu'il doit faire des emails.

De plus, c'est également dans ce fichier de configuration qu'on passer les emails entrants à la moulinette anti-spam de SpamAssassin.

Créons donc notre vim ~/.procmailrc avec l'utilisateur arthur :

# Prelimiaries
SHELL=/bin/bash
MAILDIR=$HOME/mail/
DEFAULT=$MAILDIR
ORGMAIL=$MAILDIR
LOGFILE=/var/log/procmailrc.log
VERBOSE=yes
LOGABSTRACT=all

# Send spam to '~/mail/.Spam' folder
:0fw
| /usr/bin/spamc
:0:
* ^X-Spam-Status: Yes.*
${MAILDIR}.Spam/

# Accept all the rest to default mailbox
:0

Cette configuration est très basique, je vous invite à consulter l'ami Google si vous voulez personaliser ça.

Dans l'état actuel, SpamAssassin va filtrer les emails selon ses filtres internes. Si vous voulez que le système prenne en compte les messages que vous marquez comme étant du spam (comportement GMail), consultez le tutoriel Marquer comme spam automatiquement avec SpamAssassin.

Autorisations parefeu

Plutôt que de modifier à la main le fichier /etc/sysconfig/iptables, on va utiliser l'outil system-config-firewall-tui (un coup de yum install system-config-firewall-tui si nécessaire).

Après avoir activé le firewall “graphique”, cliquez sur Personnaliser et cochez :

  • Courrier (SMTP)
  • IMAP à travers SSL

Vérifiez quand même dans le fichier /etc/sysconfig/iptables, les ports suivants sont bien ouverts:

  • 587 : SMTP avec STARTTLS
  • 993 : IMAP over SSL

Configuration DNS

L'une des dernières étapes est évidemment de faire pointer vos noms de domaine vers votre serveur mail tout neuf. La manipulation dépendra de votre registrar et de l'interface d'administration.

Mais globalement ce que vous devez faire, c'est modifier votre Zone DNS :

  • Ajouter une entrée de type A (IPv4) pour faire pointer le domaine principal et ses sous domaines vers votre serveur (parfois l'interface demande une *, parfois aucun sous domaine).
  • Ajouter une entrée de type A (IPv4) pour faire pointer le sous domaine mail vers votre serveur (facultatif, mais ça sécurise si vous jouez avec par la suite).
  • Ajouter une entrée de type MX (mail) vers le sous domaine (Record A) que vous avez appelé mail.

Notez que la diffusion des DNS peut prendre un peu de temps, surtout si vous avez du cache DNS sur votre OS.

Exemples :

 Configuration EuroDNS

  • Sur Online.net :

 Configuration Online.net

Vérification de l'installation

A partir de maintenant, tout est déjà censé fonctionner. On va donc vérifier.

Vérification SMTP

Pour vérifier le fonctionnement de notre SMTP, on va simplement envoyer le tout premier mail que notre serveur recevra, grâce à la commande telnet.

telnet mail.domain.tld 25
Trying IP...
Connected to mail.domain.tld.
Escape character is '^]'.
220 mail.domain.tld ESMTP
HELO arthur
250 mail.domain.tld
MAIL FROM:arthur
250 2.1.0 Ok
RCPT TO:test@domain.tld
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Ceci est un mail.
.
250 2.0.0 Ok: queued as C33886C1C84
QUIT
221 2.0.0 Bye
Connection closed by foreign host.

Vérification IMAP

Pour la vérification IMAP, on va tout simplement se servir de Thunderbird et essayer de se connecter à notre serveur. Créez donc un nouveau compte, et connectez vous :

 Thunderbird IMAP

Attention, j'ai recontré quelques problèmes de certificats SSL avec Thunderbird (unknown CA). Pour résoudre ce problème, c'est par ici : Thunderbird SSL Warning : Unknown CA.

Conclusion

On a terminé ! Pour aller plus loin, je vous conseille :

Ressources

admin-systeme/installer-serveur-mail.txt · Dernière modification: 2014/08/29 16:21 par Arthur Hoaro