Table des matières
SpamAssassin Bayes avec MySQL
Factoriser l'efficacité des frontaux de mails pour lutter contre le SPAM, en mutualisant les bases Bayes.
On va le faire grâce a MySQL .
~~READMORE~~
Bayes
MySQL
Préparer un serveur MySQL…
Dixit la doc: préférer le moteur “MyISAM”.
Les schemas de la base de données sont dans:
- /usr/share/doc/spamassassin/sql/userpref_mysql.sql
- /usr/share/doc/spamassassin/sql/bayes_mysql.sql
En tant que “root”, on va créer les “databases” et puis les “users” :
$ mysql -u root -p
Créer la database “sa_bayes
” :
mysql> create database sa_bayes;
On revient sous le shell, et on créé les tables associés a la base:
$ mysql -u root -p sa_bayes < userpref_mysql.sql $ mysql -u root -p sa_bayes < bayes_mysql.sql
En fait, ça bloque sur “TYPE=MyISAM ” |
Pour rectifier, j'ai fait plutôt:
$ sed -e 's/TYPE=MyISAM/ENGINE=MyISAM/' userpref_mysql.sql | mysql -u root -p sa_bayes $ sed -e 's/TYPE=MyISAM/ENGINE=MyISAM/' bayes_mysql.sql | mysql -u root -p sa_bayes
si possible, préférer: ENGINE=InnoDB |
bayes_token.token doit être de type “binary(5) ” et pas “char(5) ” |
On retourne dans MySQL
pour créer les “users” :
$ mysql -u root -p
Comme j'ai 2 frontaux, je créé un compte pour chaque:
mysql> CREATE USER 'sa_user'@'mx0.local.eez.fr' IDENTIFIED BY 'SECRET_1'; mysql> CREATE USER 'sa_user'@'mx1.local.eez.fr' IDENTIFIED BY 'SECRET_2';
Maintenant, definir les droits (limités) de ces utilisateurs.
“mx0” d'abord :
mysql> GRANT SELECT, UPDATE, DELETE, INSERT ON sa_bayes.bayes_token TO 'sa_user'@'mx0.local.eez.fr'; mysql> GRANT SELECT, UPDATE, DELETE, INSERT ON sa_bayes.bayes_vars TO 'sa_user'@'mx0.local.eez.fr'; mysql> GRANT SELECT, UPDATE, DELETE, INSERT ON sa_bayes.bayes_seen TO 'sa_user'@'mx0.local.eez.fr'; mysql> GRANT SELECT, DELETE, INSERT ON sa_bayes.bayes_expire TO 'sa_user'@'mx0.local.eez.fr'; mysql> GRANT SELECT ON sa_bayes.bayes_global_vars TO 'sa_user'@'mx0.local.eez.fr';
Faire de même pour “mx1” …
A quoi sert la table userpref ? |
Migration
On ne pourra pas migrer toutes les bases des frontaux: il faudra en choisir une parmi les frontaux.
Ceci fait, on devient l'utilisateur qui gère le spam. Chez moi, c'est “debian-spamd” :
# su -s /bin/bash debian-spamd $
$ cd ~ $ mkdir tmp $ cd tmp $ sa-learn --sync $ sa-learn --backup > backup.txt
Et pour info:
$ sa-learn --dump magic > magic-info.txt
Maintenant, on peut modifier le fichier local.cf
: voir section suivante !
Aprés cela, on importe le “backup” dans MySQL comme ça:
$ sa-learn --restore backup.txt
Un petit coup de sa-learn –dump magic
, et on retrouvera des informations proche de qu'on a dans le fichier “magic-info.txt
”.
Configuration
Pré-requis:
# aptitude install libdbi-perl libdbd-mysql-perl
Sinon: “bayes: unable to connect to database: DBI module not available
”
Dans /etc/spamassassin/local.cf
:
bayes_store_module Mail::SpamAssassin::BayesStore::MySQL #bayes_sql_dsn DBI:driver:database:hostname[:port] bayes_sql_dsn DBI:mysql:database=sa_bayes;host=<DBHOST>; bayes_sql_username <DBUSER> bayes_sql_password <DBPASS> bayes_sql_override_username debian-spamd
Si existe, commenter ses lignes comme ça:
# bayes_path xxxxxxxxx # bayes_file_mode xxxx
Tester
Déjà, si vous avez procédé à une restauration du backup avec “sa-learn restore …
” (revoir plus haut) , c'est que ça marche .
Ensuite, on peut vérifier que la base est toujours UP en tapant:
$ sa-learn --dump magic
Et enfin, si par malheur la base est indisponible, et bien spamassassin
le signale dans les entête de mails par un pathétique autolearn=unavailable
et poursuit la livraison du mail: OUF
SSL
Comme vous avez suivit mon tuto (humhum) pour installer MySQL avec SSL .
Retour dans MySQL
…
$ mysql -u root -p
Récuperer le hash du “password”, car je suis certain que vous l'avez oublié ! Noooon je déconne.
mysql> show grants for sa_user@mx0.local.eez.fr; .... IDENTIFIED BY PASSWORD '<HASHED_PASSWORD>'
Alors, soit on rajoute que le “SSL”, ce qui est minable:
mysql> GRANT USAGE ON *.* TO 'sa_user'@'mx0.local.eez.fr' IDENTIFIED BY PASSWORD '<HASHED_PASSWORD>' \ REQUIRE SSL;
Soit, on fait la totale, avec “Sujet” et “Complément” (ou l'inverse?) :
mysql> GRANT USAGE ON *.* TO 'sa_user'@'mx0.local.eez.fr' IDENTIFIED BY PASSWORD '<HASHED_PASSWORD>' \ REQUIRE SUBJECT '/C=FR/ST=Some-State/L=Paris/O=xxx/OU=xxx/CN=xxx/emailAddress=xxx' \ AND ISSUER '/C=FR/ST=Some-State/L=Paris/O=xxx/OU=xxx/CN=xxx/emailAddress=xxx';
Dans tout les cas, il faut apporter des modifications à l'option “bayes_sql_dsn
” dans /etc/spamassassin/local.cf
. Pour exemple:
bayes_sql_dsn DBI:mysql:database=sa_bayes;host=mail.local.eez.fr;mysql_ssl=1;mysql_ssl_ca_file=/var/lib/spamassassin/mysql_certs/mysql-ca-cert.pem;mysql_ssl_client_cert=/var/lib/spamassassin/mysql_certs/mysql-client_mx0-cert.pem;mysql_ssl_client_key=/var/lib/spamassassin/mysql_certs/mysql-client_mx0-key.pem;
C'est illisible…