Website-Icon .: blog cscholz.io :.

Spamassassin: Bayes in MySQL DB speichern

Bei aktivierte Bayes Filterung werden die Dateien bayes_seen und bayes_toks i.d.R. ~6 MB groß. Je nach eMail aufkommen, kann es sinnvoll sein die größe der DB zu erhöhen und evtl. auch das altern von Bayes Einträgen zu verhinden. bayes_expiry_max_db_size (default: 150000) sind die gerade erwähnten 6 MB. Für 12 MB sähe die config dann wiefolgt aus

/etc/spamassassin/local.cf
bayes_auto_expire                       0
bayes_expiry_max_db_size          150000

Nun weiß jeder, dass Dateizugriff relativ viel Zeit kosten. Dafür lässt sich die bayes-db jedoch in eine SQL Datenbank verlagern. Ich gehe jetzt im weitern Verlauf davon aus, dass mysql bereits läuft. Dennoch muss die Schnittstelle für den DB Zugriff noch nachinstalliert werden. Das geht entwender per MCPAN oder apt-get.

Installation

perl -MCPAN -e shell
install DBD::mysql

apt-get install libtie-cache-perl libdbd-mysql-perl

Datenbank anlegen

Anschließend kann die DB angelegt werden.

mysqladmin -p create sa_bayes -u root 

Damit der Zugriff sauber geregeregelt ist, wird ein Benutzer namens sa_user für den Zugriff angelegt und berechtigt.

grant all privileges on sa_bayes.* to sa_user@localhost identified by 'password';  

Jetzt die notwendigen Tabellen anlegen:

mysql -u spamassassin_usr sa_bayes -p < /usr/share/doc/spamassassin/sql/bayes_mysql.sql

Konfiguration anpassen

In der /etc/spamassassin/local.cf nun den Zugriff von Spamassassin auf die MySQL Datenbank konfigurieren.

bayes_store_module Mail::SpamAssassin::BayesStore::MySQL
bayes_sql_dsn DBI:mysql:sa_bayes:localhost
bayes_sql_username sa_user
bayes_sql_password <password>
bayes_sql_override_username sa_user

Alten Bayes Daten exportieren und in MySQL DB importieren

Bevor Spamassassin nun von einer bayes Datei auf MySQL umgestellt wird, wird die bayes Datei vorerst exportiert um diese gleich direkt in die MySQL Datenbank importieren zu können:

sa-learn --backup > bayes.db

Aschließend Spamassassin oder Amavisd-new neustarten, abhängig davon, wie der Spamfilter implementiert wurde.

/etc/init.d/spamassasin restart

/etc/init.d/amavis restart

Nun das export file wieder einlesen:

sa-learn --restore bayes.db

… und prüfen ob alles geklappt hat. Dazu reicht es, sich den Inhalt einer der Tabellen anzuschauen. Steht unter Count eine Zahl > 0 sind die Datein importiert worden:

mysql -u sa_user -p
mysql> use sa_bayes;
mysql> select COUNT(*) FROM bayes_token;
+----------+
| COUNT(*) |
+----------+
|   565495 |
+----------+
1 row in set (0.00 sec)

Fehler "unable to initialize database for sa_bayes user, aborting!"

Hier hilft häufig

sa-learn --sync
Die mobile Version verlassen