*****SPAM***** [Toulouse-pm] Infos hyper-importantes

Philippe 'BooK' Bruhat Philippe.Bruhat at free.fr
Fri Sep 12 12:21:34 CDT 2003


Le mercredi 10 septembre 2003 à 11:41, Michel Rodriguez écrivait:
> On 10 Sep 2003, Christophe MERTZ wrote:
> 
> > Pour info ton mail s'est fait spam-assassin? par le spam assassin du
> > CENA.
> 
> Pareil chez moi!
> 
> > D'autre part comme le spam devenait critique dans la mailing liste
> > publique zinc que je g?re au CENA, on est pass? au gestionnaire de mail
> > sympa qui est vraiment sympa. Par exemple on peut le configurer pour que
> > le mail recu d'un non-abonn? doivent ?tre confirm? par l'emetteur... les
> > archives sont aussi sympa, elles masquent les adresses mail, tout en
> > permettant (via un formulaire) la r?ponse en priv? ? un abonn? dont on
> > ne connait pas l'adresse mail....
> 
> Pour l'instant on est sur le mailman de pm.org, c'est le plus simple, et
> les mails de non-abonnes sont filtres, je fais le tri. En fait on recois 1
> ou 2 spams par jour (contre 90 sur mon compte perso depuis mon dernier
> mail), donc c'est pas trop penible a administrer.

Et mailman, c'est un cauchemar au niveau interface. Pour supprimer les
spam, il faut pointer, cliquer, autant de fois qu'il y a de spam. Au
delà de 5, je fatigue. Lazyness is a virtue, you know. :-)

Je m'occupe d'une ML gérée par mailman, et comme jamais un mail utile
n'est bloqué, j'ai pris le parti de tout détruire régulièrement.
Un script à base de WWW::Mechanize s'occupe de tout ça. Je compte en 
faire un jour un vrai script d'admin de mailman, avec un peu plus
d'interactivité, et une UI de la forme "appuie sur <Entrée> pour
supprimer le message ci-dessus".

Exemple d'une session (attention les spam filters !):

    [18:44:45] book at rose:~ $ xpoulipo rm
    3956 From: "Edwina Jack" <726b9l4pg59l at chinaren.com>
    3956 Subject: Boost your confidence with a larger penis  shockley
    
    3957 From: "Julie" <w83hnjw_3uh3 at lycos.com>
    3957 Subject: re: new smallest digital camera...
    
    3958 From: "Selena Blick" <laindon at alexandria.cc>
    3958 Subject: take advantage of low cost drugs in canada
    
    3959 From: stan63 at rocketmail.com
    3959 Subject: ouli get Free Epson Cartridges and more
    
    3960 From: "Tyson" <rsvp at blinddatefun.com>
    3960 Subject: Invitation
    
    3961 From: "Elva Engle" <ray598106414 at popstar.com>
    3961 Subject: G.e.n.e.r.i.c V_I_A_G_R_A   -  Order On-line - Fast
    Delivery! iodj
    eyscngtdvqpks x
    
    3962 From: "Marquita Britt" <iulhphqehh at excite.com>
    3962 Subject: How BIG Can You Get? n  mkd gypk
    
    3963 From: "Timmy Shepard" <flw67042886966 at myself.com>
    3963 Subject: V I A G R A   - Delivered Tomorrow! gza gpcayhixw w zw
    
    3964 From: "Polly Galindo" <f68vuug at juno.com>
    3964 Subject: More powerful intense orgasms j hnrp i
    
    Removed 9 messages
    [18:45:10] book at rose:~ $

En attendant, mon script de base est dispo pour qui le veut.
Allez, je ne résiste pas. Le voici :

    #!/usr/bin/perl -w
    use strict;
    use WWW::Mechanize;
    use HTTP::Cookies;
    use Data::Dumper;
    
    my $url = 'http://www.example.com/mailman/admindb/maliste';
    my $pwd = 's3kr3t';
    my $bot = WWW::Mechanize->new;
    
    # read the cookies from
    $bot->cookie_jar(
        HTTP::Cookies->new(
            file           => "$ENV{HOME}/.mailmanrc",
            autosave       => 1,
            ignore_discard => 1,
        )
    );
    
    # get the first form
    $bot->get( $url );
    die "No messages on hold\n" unless scalar @{$bot->forms};
    $bot->form(1);
    
    
    # skip the login page
    if( $bot->current_form->find_input( 'adminpw' ) ) {
        warn "Revalidating login/cookie\n";
        $bot->field( adminpw => $pwd );
        $bot->click();
        die "No messages on hold\n" unless scalar @{$bot->forms};
        $bot->form(1);
    }
    
    # the spam page
    my $msg = 0;
    for ( $bot->current_form->inputs ) {
        if ($_->name =~ /^headers-(\d+)$/ ) {
            print "$1 ", join "$1 ",
              $_->value =~ m!^((?:From|Subject):.*?\n)!img;
            print $/;
            next;
        }
        # coche l'effacement des messages
        # DEFER => 0, APPROVE => 1, REJECT => 2, DISCARD => 3
        $_->value(3), $msg++, next if $_->name =~ /^\d+$/;
    }
    
    # final action
    if (@ARGV) {
        $bot->click;
        warn "Removed $msg messages\n";
    }
    else {
        warn "$msg messages on hold\n";
    }
    __END__

Et pour encore plus d'efficacité, il doit suffire de le mettre dans la crontab
pour qu'il se lance 3 minutes avant les rappels quotidiens de mailman... :-)

Mmm, à relire mon code, je vois qu'il n'y a pas de message d'erreur en cas
de mot de passe foireux. C'est du quick and dirty, hein.

-- 
 Philippe "BooK" Bruhat

 When you open a new door, the bad comes in with the good.
                                   (Moral from Groo The Wanderer #102 (Epic))



More information about the Toulouse-pm mailing list