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)