informatique:serveur:postfix

PostFix : serveur de messagerie sous Linux

et toutes les astuces à connaître concernant les mails.

Postfix est un logiciel de serveur de messagerie open source largement utilisé. Il fonctionne comme un MTA et est principalement utilisé pour gère le routage, la livraison et l'envoi des e-mails. Il offre des fonctionnalités avancées pour la sécurité, le filtrage et la personnalisation, en en faisant un choix populaire pour les systèmes de messagerie.

MTA, ou Mail Transfer Agent, est un acronyme utilisé pour désigner les logiciels ou les serveurs qui acheminent les e-mails d'un serveur à un autre. Le MTA est responsable du transfert des messages électroniques d'un serveur de messagerie à un autre à travers le réseau.

L'objectif est d'envoyer des mails depuis une machine ou un serveur. Le mail est préparé par un programme externe et est donnée au serveur SMTP qui va se charger de le transmettre au serveur mail de destination.

Le mécanisme mis en œuvre, pour envoyer un mail par le SMTP est le suivant. Prenons l'exemple d'un mail envoyé à caroline.dubois@acemail.fr.

  1. isolation du domaine de l'adresse mail caroline.dubois@acemail.fr
    » acemail.fr
  2. connaître le serveur de mails associés au domaine acemail.fr : dig MX acemail.fr
    » 1 mx1.ovh.net.
    5 mx2.ovh.net.
    100 mx3.ovh.net
  3. connexion au serveur mx1.ovh.net : telnet mx1.ovh.net 25
  4. émission des commandes SMTP
    » EHLO abonnel.fr
    MAIL FROM:sender@mailserver.fr
    RCPT TO:caroline.dubois@acemail.fr
    DATA
    Test de mail
    .
    QUIT
  5. vérification du SPF : dig TXT acemail.fr
    » v=spf1 include:mx.ovh.com ~all

Il existe deux programmes d'envoi de mails : Postfix et Sendmail. Sendmail est considéré comme déprécié. Il faut donc lui préférer Postfix.

Sous Linux, le service gérant la distribution des mails s'appelle Postfix. Il est concidéré comme le successeur du programme sendmail.

sudo apt install postfix

Choisir Site Internet

Entrer la valeur FQDN de votre adresse de serveur

si vous devez relancer la configuration de Postfix

sudo dpkg-reconfigure postfix

Faire un essai d'envoi de mail

echo "Le contenu du mail" | mail -s "ceci est le sujet" mail@domaine.tld

Le programme mail est une composante du package mailutils. Donc, si le programme n'est pas installer sur la machine, utilisez sudo apt install mailutils

Pour modifier un paramètre dans Postfix, il faut éditer le fichier de configuration

sudo nano /etc/postfix/main.cf

Redémarrer le service

sudo systemctl restart postfix

Ajouter dans le fichier de configuration de Postfix, /etc/postfix/main.cf

virtual_alias_maps = hash:/etc/postfix/virtual

Puis ajouter dans le fichier /etc/postfix/virtual les alias désirés tel que le modèle suivant :

@monserveur.tld mail@domain.tld

Enfin, exécuter le bloc suivant. Il sera nécessaire de l’exécuter à chaque modifications effectuées du fichier /etc/postfix/virtual.

sudo postmap /etc/postfix/virtual
sudo systemctl restart postfix

Pour connaître les mails en attente

sudo postqueue -p

Pour traiter tous les mails en attente

sudo postqueue -f

Pour supprimer tous les mails en attente

sudo postsuper -d ALL

Le fichier de configuration de Postfix est /etc/postfix/main.cf. Il est éditable par nano ou vim. On va le reprendre pour configurer Postfix.

myhostname = myserver.example.com

Il est important que l'option myhostname corresponde au FQDN (fully qualified domain name) du serveur. La valeur à renseigner et celle qui renvoyée par la commande :

nslookup 91.134.243.56

Cette information est gérée par le serveur DNS

Cette option se trouve les paramètres Gérer les paramètres IPs, chez kimsufi.com

Cette option, reverse DNS, se trouve dans les options du serveur VPS de vos serveurs dédiés, chez ovh.com

Configurer le nom du serveur SMTP, domaine à afficher dans le courrier sortant

myorigin = example.com

Configuer le nom du serveur SMTP

mydomain = example.com

Configure to which SMTP domains to relay messages to, for example:

relay_domains = example.com

Configuration minimaliste du SMTP Greeting Banner:

smtpd_banner = $myhostname

Limiter les attaques par déni de services :

default_process_limit = 100
smtpd_client_connection_count_limit = 10
smtpd_client_connection_rate_limit = 30
queue_minfree = 20971520
header_size_limit = 51200
message_size_limit = 10485760
smtpd_recipient_limit = 100

Le fichier log standard de postfix est /var/log/mail.info

Vous pouvez garder un oeuil sur les logs

sudo tail -f /var/log/mail.info&

Il y a deux possibilités :

  • envoie depuis un client : mail
  • connexion en Telnet sur le serveur SMTP

L'utilitaire mail fait parti de la suite mailutils

sudo apt install mailutils

Utilisation de l'utilitaire mail depuis un poste client.

Pour envoyer un mail à mail@example.com de la part de sender@example.com

echo "This is the message body" | mail -s "This is the subject" mail@example.com -aFrom:sender@example.com

Pour envoyer un mail à username

 echo "This is the message body" | mail -s "Hello World" username

Utilisation de telnet pour se connecter sur le serveur SMTP mail.mymailserver.com

telnet mail.mymailserver.com 25

Puis saisir les commandes SMTP

EHLO checkeremail.com
MAIL FROM:<sender@mailserver.fr>
RCPT TO:<dest@mymailserver.com>
DATA
Subject: Sending an email using telnet
Hello,
Here is my body? Do you like it?
Cédric
.
QUIT

Vider tous les mails présents dans la boite d'un utilisateur. On considère que la boite mail (mbox) de l'utilisateur www-data se trouve dans le fichier /var/mail/www-data

sudo sh -c "> /var/mail/www-data"

On part du principe que :

  • le nom de domaine d'envoi des mails est smtp.monserveur.fr
  • le certificat de votre nom de domaine est géré par Let's Encrypt et est opérationnel
  • le renouvellement automatique opéré par Certbot utilise le protocole ACME et est opérationnel.

L'objectif est de copier le certificat et la clé du domaine pour postfix de manière automatique et régulière.

1. Se connecter sur le serveur avec le compte root

2. Créer le fichier /root/scripts/update_smtpd_certificat.sh

nano /root/scripts/update_smtpd_certificat.sh

avec le contenu suivant

update_smtpd_certificat.sh
#!/bin/bash
# mettre à jour le certificat pour smtpd
cp /etc/letsencrypt/live/smtp.monserveur.fr/cert.pem /etc/postfix/smtpd.cert
cp /etc/letsencrypt/live/smtp.monserveur.fr/privkey.pem /etc/postfix/smtpd.key

Attention, il se peut que le fichier /etc/postfix/smtpd.cert soit un alias vers /usr/local/ispconfig/interface/ssl/ispserver.crt dans le cadre de l'utilisation d'ISP Config

Le script écrasera systématiquement les fichiers cibles dans le dossier /etc/postfix

3. Rendre exécutable le script

chown +x /root/scripts/update_smtpd_certificat.sh

4. Programmer le script avec crontab

crontab -e
0 0 * * * /root/scripts/update_smtpd_certificat.sh 2>&1

5. Vérifier le certificat

openssl x509 -text -in /etc/postfix/smtpd.cert
  • de Cédric ABONNEL