Papa papa donne moi du SPAM

Mais qu’est ce que je raconte encore avec un titre pareil . Ne vous inquiétez pas on est pas sur aufeminin.com . Le but ici est de permettre à Spamassassin d’apprendre du SPAM par lui même (avec notre aide également) . Donc nous allons lui donner à manger 🙂 . L’auto apprentissage du SPAM se fait par un filtre bayésien

Pour commencer il faut activer le filtre bayésien .

    vim /etc/spamassassin/local.cf
    bayes_auto_learn 1
    bayes_auto_learn_threshold_nonspam -3
    bayes_auto_learn_threshold_spam 12.0
    bayes_store_module Mail::SpamAssassin::BayesStore::SQL
    bayes_sql_dsn DBI:mysql:spamassassin:localhost
    bayes_sql_username nom_base
    bayes_sql_password mot_de_passe
    bayes_sql_override_username amavis

– bayes_auto_learn_threshold_nonspam -3 : On lui file un peu de non-spam ou ham pour un tag inférieur à -3
– bayes_auto_learn_threshold_spam 10.0 : On lui file un peu dspam ou spam pour un tag supérieur à 12

Tu sais quand même créer une BDD et mettre les droits dessus ?

Le fichier SQL à injecter dans votre base se trouve

/usr/share/doc/spamassassin/sql/bayes_mysql.sql

Vous devriez avoir ceci

    mysql> show tables;
    +------------------------+
    | Tables_in_spamassassin |
    +------------------------+
    | bayes_expire |
    | bayes_global_vars |
    | bayes_seen |
    | bayes_token |
    | bayes_vars |
    +------------------------+

Dans la table « bayes_vars » les champs « spam_count | ham_count » afin de déterminer le nombre de spam et de ham appris . Par défaut l’apprentissage est fonctionnel quand le nombre de spam et ham sont supérieurs à 200.
Vous pouvez bien-sur modifier ces valeurs

bayes_min_ham_num
bayes_min_spam_num

Pour terminer un petit script pondu rapidement . Chaque utilisateur pourra glisser dans un répertoire (pour moi il s’agit de SPAM) les mails qu’ils déterminent comme non-sollicités.

    #!/bin/bash
    #
    # Ce script permets de faire spamassassin apprendre le spam et le mettre en base de donnee
    #
    usage ()
    {
    echo "Usage :syntaxe : $0 [options]
    --spam auto apprentissage des spams qui se trouvent dans les directory .SPAM
    --delete Pour la suppression des spams de plus de 7 jours
    Exemple : $0 --spam
    Exemple : $0 --delete "
    exit 1
    }
    #Recherche des répertoires SPAM
    directoryspam=`find /var/vmail/ -type d -name .SPAM > /tmp/directoryspam.log `
    spam() {
    for learn in $(cat /tmp/directoryspam.log) ;
    do
    sa-learn --spam --dir "$learn"/cur/ ;
    done
    }
    #Suppression des spams de plus de 7 jours
    delete() {
    for delete in $(cat /tmp/directoryspam.log) ;
    do
    find "$delete"/cur/ -type f -mtime +7 | xargs rm ;
    done
    }
    case "$1" in
    --spam )
    spam
    ;;
    --delete )
    delete
    ;;
    *)
    usage
    ;;
    esac

Quand spamassassin sera capable d’apprendre par lui même d’après les paramètres que nous avons mis plus haut on pourra voir dans les headers.

    X-Spam-Score: 2.045
    X-Spam-Level: **
    X-Spam-Status: No, score=2.045 tagged_above=-9999 required=5.3
    tests=[HTML_IMAGE_ONLY_16=1.048, HTML_MESSAGE=0.001,
    MPART_ALT_DIFF=0.724, RCVD_IN_DNSWL_LOW=-0.7, SPF_SOFTFAIL=0.972]
    autolearn=no
    X-Spam-Score: -9.9
    X-Spam-Level:
    X-Spam-Status: No, score=-9.9 tagged_above=-9999 required=5.3
    tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1,
    HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001,
    USER_IN_DEF_DKIM_WL=-7.5] autolearn=ham

On peut remarquer le champs autolearn

Il suffit après de mettre en place une tâche cron .
Un peu de documentation ici

Related posts

Leave a Comment