Nettoyage d'entêtes sous Postfix
Un petit geste pour la vie privée
Rapide billet pour présenter (et documenter) une petite astuce de configuration destinée aux personnes administrant un serveur Postfix. Par défaut, nombre de clients mail et de serveurs ajoutent, dans les entêtes du mail, plusieurs informations pouvant être sensible pour la vie privée. Voici par exemple un mail envoyé depuis Thunderbird et traité par Postfix :
Received: from [192.168.0.1] (SHAFT-PC [192.168.0.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by shaft.example (Postfix) with ESMTPSA id 9C9D13F12F for <coffy@coquinou.example>; Wed, 14 Feb 2018 15:25:53 +0100 (CET) ... User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0
Ou depuis un client pour Android :
Received: from [10.45.122.146] (unknown [203.0.113.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) (Authenticated sender: shaft) by shaft.example (Postfix) with ESMTPSA id 6C3903F1C0 for <foxy.brown@gafam.example>; Sun, 18 Feb 2018 16:32:39 +0100 (CET) ... User-Agent: K-9 Mail for Android
On a donc un entête Received
, ajouté par Postfix lors de la soumission du message, contenant notamment l'IP utilisée sur le réseau local, parfois l'IP publique, le nom de la machine (définit dans le fichier hosts
du serveur mail dans le premier exemple) ou peut-être un nom de domaine du type baz35-1-198-51-100-128.fbx.proxad.net.
(correspondant ici à la ligne ADSL de Free ayant pour IP fixe 198.51.100.128
et située dans le NRA – fictif – de Bazouges-la-Pérouse), et un entête User-Agent
, ajouté par le client, indiquant le nom du logiciel plus éventuellement le système d'exploitation. Tout ceci représentant une manne d'informations très intéressante pour les amateurs de pistage.
Afin de limiter cette fuite de données, il est possible d'indiquer à Postfix de supprimer ces entêtes lorsque le message lui est soumis. On utilise pour cela les filtres header_checks
et plus particulièrement smtp_header_checks
. Pour ce faire on crée un fichier (/etc/postfix/minimisation
pour ce billet) contenant, sous formes d'expressions rationnelles, les règles à utiliser :
/^received: / IGNORE
/^user-agent: / IGNORE
Les clients mails Apple ne semblent pas utiliser User-Agent
mais plutôt X-Mailer
. Dans ce cas, on ajoute :
/^x-mailer: / IGNORE
L'action IGNORE
supprimant la ligne correspondante. Ne pas hésiter à regarder tout les mails que l'on envoie pour dénicher d'autres entêtes compromettants (on peut avoir du x-sender
par exemple). Les motifs utilisés ne sont pas sensibles à la casse. Par sécurité, on peut tester son fichier avec postmap
:
# postmap -q "Received: from [192.168.0.1] (SHAFT-PC [192.168.0.1])" regexp:/etc/postfix/minimisation IGNORE # postmap -q "UsEr-AGEnT: K-9 Mail for Android" regexp:/etc/postfix/minimisation IGNORE
Une fois ce fichier crée et vérifié, ne reste plus qu'à configurer Postfix. Ça se passe dans main.cf
, on ajoute le paramètre suivant :
smtp_header_checks = regexp:/etc/postfix/minimisation
Et on recharge Postfix :
# postfix reload postfix/postfix-script: refreshing the Postfix mail system
Et c'est tout. Ne pas hésiter à tester que ce petit nettoyage fonctionne bien en envoyant du courrier, depuis tous les clients que l'on utilise, à un complice ou bien à une adresse de secours que l'on possède. La technique n'est pas parfaite, mais elle a le mérite de limiter un peu les métadonnées fuitant par le mail. À titre d'exemple, les mails que j'envoie partent toujours depuis ma ligne ADSL avec les IPv4 ou IPv6 fournies par mon FAI, mais les GAFAM vers qui certains messages peuvent partir ne pourront pas savoir si je suis chez moi, au coin de la rue ou au fin fond de la Chine en scrutant les entêtes du courrier.