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.