Postfix
Présentation
Postfix est un serveur mail SMTP (Simple Mail Transfer Protocol) appelé aussi MTA pour Mail Transport Agent. Son rôle est d'assurer le traitement des mails aussi bien à l'envoi qu'à la réception.
Pour que les utilisateurs puissent récupérer leur message, Postfix devra être couplé à un service de relève de message basé sur le protocole POP (Post Office Protocol) et/ou IMAP (Internet Message Access Protocol). Nous utiliseront le service courier. L'authentification des utilisateurs sur le serveur mail s'effectuera par l'intermédiaire du daemon saslauth.
Installation
Il sera nécessaire d'installer les services suivants :
- Postfix, qui est le MTA;
- Courier-Pop, qui est le serveur POP pour la récupération des messages par l'utilisateur via un client de messagerie;
- Courier-Imap, qui est le serveur IMAP pour la récupération des messages par l'utilisateur via un client de messagerie ou un webmail;
|
|
Configuration de base
Fichier /etc/postfix/main.cf
- Le fichier de configuration main.cf contient les éléments de configuration sur le MTA Postfix.
smtpd_banner = $myhostname ESMTP $mail_name biff = no append_dot_mydomain = no readme_directory = no myhostname = alice.lan alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = localhost, localhost.alice.lan, mail.glx relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/124 [::1]/128 home_mailbox = Maildir/ mailbox_command = procmail -a "$EXTENSION" recipient_delimiter = + inet_interfaces = all message_size_limit = 5120000 mailbox_size_limit = 10240000
|
Par défaut, la variable home_mailbox a pour valeur /var/mail. Les messages sont enregistrés dans un fichier texte portant le nom de l'utilisateur UNIX. Ce mode de fonctionnement n'est pas compatible avec les daemons courier-pop et courier-imap |
Fichier /etc/mailname
- Le fichier /etc/mailname contient la liste des domaines pour lesquels le serveur Postfix traite les messages :
mail.glx
Fichier /etc/procmailrc
- Le daemon procmail interrogera ce fichier pour chaque mail entrant. On y définira la localisation des boîtes mails.
MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/
Création du répertoire mail
Dans notre cas nous disposons de l'utilisateur UNIX alice sur notre serveur avec pour répertoire personnel /home/alice.
- Création des répertoires pour le courrier électronique de alice :
|
|
- Pour que cette opération s'effectue automatiquement à chaque ajout d'un nouvel utilisateur UNIX :
|
|
Nos comptes mails sont basés sur les utilisateurs UNIX du serveur. |
Application des paramètres
- Pour que les modifications soient prises en compte, il faut redémarrer Postfix :
|
|
Test de validation du serveur
Test du serveur SMTP
- Nous pouvons vérifier le bon fonctionnement du serveur SMTP en s'y connectant depuis la commande telnet :
|
|
- Le serveur répondra par un code 220 contenant la bannière qui a été définit au paramètre smtpd_banner dans le fichier main.cf.
|
|
- Pour valider son fonctionnement, nous allons envoyer un mail. Commençons d'abord par indiquer notre adresse mail émetteur :
|
|
- Le serveur acquittant avec le code 250, nous pouvons maintenant indiquer l'adresse de l'expéditeur :
|
|
- Le serveur doit acquitter également avec le code 250. Maintenant nous allons rédiger le contenu du mail. Pour cela, il faut saisir la commande data :
|
|
- Le serveur répondra par :
|
|
- Dès lors, nous pouvons maintenant rédiger notre mail. La touche Entrée est interprété comme un retour à la ligne dans le mail.
|
|
- Le mail rédigé, on revient à la ligne avec la touche Entrée, puis on saisie un point (.) et on appui de nouveau sur la touche Entrée :
|
|
- Le serveur valide la mise en attente de distribution du mail et retourne son numéro d'identifiant quand le file d'attente :
|
|
- On ferme la connexion avec la commande quit :
|
|
Test du serveur POP3
- On va vérifier la bonne réception du mail envoyé à l'étape précédente. Pour cela on se connecte au serveur sur le port 110 :
|
|
- On indique lenom d'utilisateur UNIX du compte avec la commande user :
|
|
- Le serveur demande le mot de passe du compte, on lui renseigne via la commande pass :
|
|
- Le serveur accepte la connexion. On consulte la liste des messages avec la commande list :
|
|
- On affiche les 20 premières lignes du message 1 avec la commande top :
|
|
Test du serveur IMAP
- On se connecte au serveur sur le port imap 143 :
|
|
- Le serveur attend un login est un mot de passe. Pour cela, on utilise la commande LOGIN <user> <password> :
|
|
- On demande la liste des répertoires grâce à la commande LIST "" "*" :
|
|
- On accès au dossier des message reçus dans le dossier INBOX avec la commande SELECT <nom_dossier> :
|
|
- On liste les message reçus dans le dossier INBOX avec la commande SELECT <nom_dossier> :
|
|
- On consulte le message avec l'UID 1 en saisisant la commande UID FETCH <UID_message> BODY[] :
|
|
- On ferme la connexion avec la commande LOGOUT :
|
|
Autres méthodes
On peut également vérifier que le mail est bien été acheminé.
- Via les logs stockés dans /var/log/mail.log :
Jan 30 02:29:40 alice postfix/local[13772]: C01187F9FA: to=<alice@mail.glx>, relay=local, delay=50, delays=49/0.17/0/0.14, dsn=2.0.0, status=sent (delivered to command: procmail -a "$EXTENSION") Jan 30 02:29:40 alice postfix/qmgr[13254]: C01187F9FA: removed
- En interrogeant la file d'attente :
|
|
Authentification SMTP Postfix
Contrairement aux serveurs pop (courier-pop) et imap (courier-imap), la connexion au serveur SMTP s'effectue sans demande de mot de passe. Pour remédier à cette faille de sécurité propre à la configuration par défaut de Postfix, nous installeront le paquet sasl2-bin qui permettra l'authentification des utilisateurs avec le module pam (Pluggable Authentication Modules, utilisé par Linux).
|
|
Activation du module
- Editer le fichier de configuration /etc/default/saslauthd, puis remplacer :
START=no
- par :
START=yes
Par défaut, le mécanisme d'authentification utilisé est pam (paramètre MECHANISMS) ce qui nous conviens pour le moment (authentification via les comptes UNIX existants).
- Remplacer aussi la ligne :
OPTIONS="-c -m /var/run/saslauthd"
- Par :
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
- On crée le répertoire /var/spool/postfix/var/run/saslauthd avec les permissions adéquates :
|
|
- On ajoute l'utilisateur Postfix au groupe sasl :
|
|
- On crée le fichier /etc/pam.d/smtp et on y insère les éléments suivants :
@include common-auth @include common-account @include common-password @include common-session
- On démarre le daemon saslauthd :
|
|
Intégration dans Postfix
- Ajouter la ligne suivante dans le fichier /etc/postfix/main.cf :
broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_sasl_type = cyrus cyrus_sasl_config_path = /etc/postfix/sasl
- Créer le fichier /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd mech_list: PLAIN LOGIN
- On redémarre Postfix pour appliquer les nouveaux paramètres :
|
|
Vérification
La commande ehlo
La commande ehlo permet de s'annoncer au serveur. Certains serveur SMTP la requiert avant toute autre action. Dans notre cas elle nous permet de voir les méthodes d'authentification acceptés par le serveur SMTP.
- Résultat de la commande ehlo sans le module sasl d'activé :
|
|
- Résultat de la commande ehlo avec le module sasl d'activé :
|
|
Envoi sans authentification
- Tentative d'envoi sans authentification :
|
|
- Trace laissée dans /var/mail/mail.log :
Jan 30 13:17:32 alice postfix/smtpd[20759]: NOQUEUE: reject: RCPT from pfalk.net.ncad.fr[10.0.0.48]: 554 5.7.1 <nicolas@cachelou.fr>: Relay access denied; from=<root@mail.glx> to=<nicolas@cachelou.fr> proto=SMTP
Le serveur refuse le destinataire avec pour motif : Relay access denied.
Le serveur autorise de transmettre les mails sans authentification pour tous les domaines renseignés dans le paramètre mydestination du fichier /etc/postfix/main.cf. |
Envoi avec authentification
- Tentative d'envoi avec authentification :
|
|
|
Le nom d'utilisateur et le mot de passe sont encodés en Base64. Plus d'informations ici |
- Trace laissée dans /var/mail/mail.log :
Jan 30 14:48:59 alice postfix/smtpd[24312]: CD53F62881: client=pfalk.net.ncad.fr[10.0.0.48], sasl_method=login, sasl_username=alice@alice.lan Jan 30 14:49:05 alice postfix/cleanup[24315]: CD53F62881: message-id=<> Jan 30 14:49:05 alice postfix/qmgr[24195]: CD53F62881: from=<root@alice.lan>, size=190, nrcpt=1 (queue active) Jan 30 14:49:07 alice postfix/smtp[24316]: CD53F62881: to=<nicolas@cachelou.fr>, relay=aspmx.l.google.com[173.194.78.27]:25, delay=16, delays=14/0.13/1.2/0.56, dsn=5.7.1, status=bounced (host aspmx.l.google.com[173.194.78.27] said: 550-5.7.1 [109.190.9.125 11] Our system has detected that this message is 550-5.7.1 not RFC 2822 compliant. To reduce the amount of spam sent to Gmail, 550-5.7.1 this message has been blocked. Please review 550 5.7.1 RFC 2822 specifications for more information. dq1si3286812wib.75 - gsmtp (in reply to end of DATA command)) Jan 30 14:49:07 alice postfix/cleanup[24315]: 31F5F63799: message-id=<20140130134907.31F5F63799@alice.lan> Jan 30 14:49:07 alice postfix/qmgr[24195]: 31F5F63799: from=<>, size=2576, nrcpt=1 (queue active) Jan 30 14:49:07 alice postfix/bounce[24317]: CD53F62881: sender non-delivery notification: 31F5F63799 Jan 30 14:49:07 alice postfix/qmgr[24195]: CD53F62881: removed Jan 30 14:49:07 alice postfix/local[24318]: 31F5F63799: to=<root@alice.lan>, relay=local, delay=0.3, delays=0.05/0.12/0/0.13, dsn=2.0.0, status=sent (delivered to command: procmail -a "$EXTENSION") Jan 30 14:49:07 alice postfix/qmgr[24195]: 31F5F63799: removed
D'après les logs l'authentification bien réussi. Cependant, l'envoi du mail vers nicolas@cachelou.fr a échoué car le fournisseur du service de messagerie GMail a refusé le message. En effet, l'adresse root@alice.lan n'est pas valide car le domaine alice.lan n'existe pas.
Crypter les échanges
Défaut des échanges en clairs
Par défaut, tous les échanges s'effectuent en clair aussi bien la phase d'authentification que l'envoie du message. Voici, ci-dessous, une capture d'un analyseur de trame (Wireshark) lors de l'envoi d'un couriel depuis le client de messagerie Thundirbird.
Utiliser son nom de domaine
Prérequis
Jusqu'à présent, le serveur mail étudié traite les mails à destination des adresses locales @alice.lan et - pour des raisons de sécurités - ne peut envoyer de mail qu'à ces adresses de messagerie (c.f. voir tentative d'envoi vers nicolas@cachelou.fr). Dans la vie courante, un serveur de mail gère la messagerie pour un ou plusieurs domaines de messagerie, par exemple @orange.fr. Pour rendre ce type de fonctionnement possible, il faudra agir sur la zone DNS de notre nom de domaine et plus particulièrement sur l'enregistrement MX (Messagerie eXchange).
La configuration du DNS ne sera pas abordé en détail ici. Vous pouvez vous reportez à cet article Serveur DNS qui explique en détail comment installer, configurer et gérer son serveur de DNS sous Linux.