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