Je n'en ai jamais causé ici, mais le serveur de mails Postfix permet de faire de l'inspection dans le contenu des emails (reçus et envoyés), aussi bien dans les entêtes que dans le corps du mail, en utilisant des expressions régulières (regex) POSIX ou PCRE.
À quoi ça peut servir ? Principalement à virer des entêtes non désirés. Exemples :
Virer l'entête qui indique l'adresse IP depuis laquelle le mail a été envoyé. C'est-à-dire, l'IP qu'a votre machine poste de travail sur laquelle vous écrivez et envoyez vos mails. Hé oui, c'est comme ça qu'on peut reproduire "l'effet GMail" où cette adresse n'apparaît pas. Attention : ça ne veut ni dire que Google ne connaît pas votre IP ni qu'il ne la stocke pas ni qu'il ne la balancera pas aux autorités ;) ;
Exemples que j'utilise sur mon serveur de mails personnel :
/^Received:.*ESMTPSA/ IGNORE
/^User-Agent:/ IGNORE
/^X-Enigmail-Version:/ IGNORE
Explications :
La première ligne efface l'entête qui contient l'IP d'émission du mail. Cela suppose que vous causez à votre serveur mail en TLS (le « S » dans « ESTMPSA ») et que vous vous authentifiez auprès de lui (le « A » dans « ESMTPSA ») ;
La deuxième ligne efface l'entête qui contient le logiciel de lecture/écriture de mails (Thunderdbird, Claws-Mail, Mutt, etc.) que j'utilise ;
On met ça dans un fichier, genre /etc/postfix/header_checks, et dans le main.cf de Postfix, on ajoute :
header_checks = regexp:/etc/postfix/header_checks
On reload Postfix et c'est tout bon :
sudo systemctl reload postfix
Et, en fait, non. Car cela effacera aussi les entêtes des mails que vous recevez.
Postfix supporte des regex conditionnelles mais l'entête que l'on bidouille si la condition est validée doit être le même que celui qui déclenche la condition. Mauvaise piste, donc.
Solution : si vous utilisez un port différent pour les clients mails humains (port 587 en général pour éviter le port 25 standard bloqué sur certains réseaux), alors il suffit de préciser à ce smtpd-là qu'il y a des checks à faire. Sinon (si le mail vient de l'extérieur), utiliser le smtpd normal et ne faire aucun check. Tout est détaillé ici : https://www.void.gr/kargig/blog/2013/11/24/anonymize-headers-in-postfix/.
Mais, en gros, dans /etc/postfix/master.cf, on déclare un nouveau service cleanup avec des options spécifiques : cleanupheaders unix n - y - 0 cleanup -o header_checks=regexp:/etc/postfix/header_checks. Puis, on modifie le service « submission » afin de lui ajouter une option pour utiliser le service cleanup modifié : submission inet n - y - - smtpd -o cleanup_service_name=cleanupheaders.