Anonymiser les entêtes qpsmtpd
Par défaut, qpsmtpd ajoute des entêtes Received pour chaque mail qu'il reçoit (puis retransmet éventuellement). Certaines informations devraient pouvoir être masquée, exemple:
Received: from germaine.lapiole.org (HELO germaine.lapiole.org) (192.168.7.50) smtp-auth username dani, mechanism plain) by lapiole.org (qpsmtpd/0.84) with (AES256-SHA encrypted) ESMTPSA; Fri, 24 Feb 2012 12:54:03 +0100 \\
Voici un petit plugin qpsmtpd qui permet de masquer le login de l'utilisateur et la version de qpsmtpd utilisée (pour la version, je ne trouve pas ça très important de la masquer, mais c'était une demande d'un client).
Voilà le code en question:
- anonymize_received
#!/usr/bin/perl -wT =head1 NAME anonymize_received =head1 DESCRIPTION Plugin that remove the login from "Received" header (replaced with a md5_base64 of the login) and the version of qpsmtpd =head1 AUTHOR Daniel Berteaud <daniel@firewall-services.com> =head1 LICENSE GNU GPL (GNU General Public License) =cut use POSIX qw(strftime); use Digest::MD5 qw(md5_base64); sub hook_received_line { my ( $self, $transaction, $smtp, $authheader, $sslheader ) = @_; $authheader =~ /smtp-auth\ username (\w+)(,.*)/; my $auth = "smtp-auth username ".md5_base64($1).$2; return OK, "from ".$self->connection->remote_info ." (HELO ".$self->connection->hello_host . ") (".$self->connection->remote_ip . ")\n $auth by ".$self->qp->config('me') ." (qpsmtpd) " ."with $sslheader$smtp; " . (strftime('%a, %d %b %Y %H:%M:%S %z', localtime)); }
Une version packagée en rpm pour SME Server est disponible dans notre dépôt:
yum --enablerepo=fws install smeserver-qpsmtpd-anonymizereceived signal-event email-update
Résultat:
Received: from germaine.lapiole.org (HELO germaine.lapiole.org) (192.168.7.50) smtp-auth username VbfouJXQR1N+ZyJQ3XgVVQ, mechanism plain) by lapiole.org (qpsmtpd) with (AES256-SHA encrypted) ESMTPSA; Fri, 24 Feb 2012 12:54:03 +0100
La version de qpsmtpd a disparue, et le login est remplacé par un hash md5 du login d'origine (ce qui permettra aux admin de retrouver le login en cas de problème, il suffira de recalculer un hash de tous les utilisateurs pour trouver celui qui correspond)