#!/usr/local/bin/perl ##################################################################### # Script utilisé pour générer la page http://lagavulin.lacave.net/mailer/ # Diffusion libre, dans le domaine public, sans aucune garantie d'aucune # sorte. # Réalisé à l'origine par Frédéric Senault, fred@lacave.net use strict; my %sw; my %af; open(S,"/var/www/lacave.net/lagavulin/mailer/spamware.txt") || die("spamware.txt : $!"); while() { next if(/^#/); chomp; my($s,$f)=split("\t"); $sw{$s}=$f; foreach(split(/\|/,$f)) { $af{$_}=1; } } close(S); print "

Liste des signatures

\n"; my $i; print "\n"; foreach my $s (sort { lc($a) cmp lc($b) } keys(%sw)) { print "\n"; } print "
SignatureChamp(s)
".$s."".join(", ",split(/\|/,$sw{$s}))."
\n"; print "

Règles calculées

\n"; print "

Voici une série de règles dans divers langages de filtres, conçues à partir de la liste ci-dessus.  "; print "Chacun fera plus que probablement des ajustements par rapport à ce qui est proposé ici, mais je pense que c'est un bon départ.  "; print "Notez que je favorise la destruction silencieuse des spams, partant du principe qu'un rejet (bounce) est une perte de temps et de bande passante.

"; my(%r1,%r2,%r3,%r4); foreach my $s (sort { lc($a) cmp lc($b) } keys(%sw)) { my $rk=$sw{$s}; $r1{$rk}.='|'.$s; if($rk=~/(X-Mailer|X-Sender)/) { my $rk2; if($rk=~/X-Mailer/ && $rk=~/X-Sender/) { $rk2="X-Mailer|X-Sender"; } elsif($rk=~/X-Mailer/) { $rk2="X-Mailer"; } else { $rk2="X-Sender"; } $r2{$rk2}.='|'.$s; } my $rk3=$sw{$s}; if(length($s)>6) { $rk3=join('|',keys(%af)); } $r3{$rk3}.='|'.$s; foreach(split(/\|/,$rk)) { $r4{$_}.='|'.$s; } } my $i=0; my @n=('chirurgicales','économes','napalm'); my @d=("Ces règles sont calculées le plus précisément possible en fonction des ". "différents champs d'en-tête soumis.", "Ces règles simplifient le traîtement en ne s'appliquant qu'aux deux ". "champs les plus fréquents, X-Mailer et X-Sender", "Ces règles regroupent tout dans le même sac et font la détection dans ". "un maximum de champs, à l'exception des signatures de cinq lettres ou ". "moins, qui pourraient trop facilement générer de faux posififs."); foreach my $set ((\%r1,\%r2,\%r3)) { print "

Versions \"".$n[$i]."\"

\n"; print "

".$d[$i]."

\n"; $i++; print "

Postfix

\n"; print "\n"; foreach my $s (sort(keys(%$set))) { $$set{$s}=~s/^\|//; print "/^($s): .*($$set{$s})/\tDISCARD
\n
\n"; } print "
\n"; print "

Procmail

\n"; print "\n"; foreach my $s (sort(keys(%$set))) { $$set{$s}=~s/^\|//; print ":0
\n"; print "* ^($s): .*($$set{$s})
\n"; print "/dev/null
\n
\n"; } print "
\n"; } print "

Version SpamAssassin

\n"; print "

Avec la structure du fichier de configuration de SpamAssassin, difficile de faire autre chose que la version la plus précise...

"; print "

SpamAssassin

\n"; print "\n"; $i=1; foreach my $s (sort(keys(%r4))) { $r4{$s}=~s/^\|//; $r4{$s}=~s/\@/\\\@/g; print "header SPAMWARE_LACAVE_$i\t$s =~ /$r4{$s}/
\n"; print "describe SPAMWARE_LACAVE_$i\tSpamWares de la liste http://lagavulin.lacave.net/mailer
\n"; print "score SPAMWARE_LACAVE_$i\t5
\n"; print "
\n"; $i++; } print "
\n";