Spamassassin MySQL Statistik
1. Spamassassin - Bayes-DB in MySQL-Datenbank
Spamassassin bietet die Möglichkeit, die Bayes-DB, die Autowhitelist, Userprefs sowie eine Statistikfunktion in eine MySQL-Datenbank auszulagern. Das schafft viel Spielraum, was Flexibilität, Geschwindigkeit, Funktionalität angeht. Bei einer kleinen Bayes-DB und wenigen Mails pro Tag macht eine Umstellung auf die MySQL-DB trotzdem Sinn. Mit jedem weiteren Satz, der in die DB geschrieben wird, steigt der Vorteil gegenüber der dateibasierenden Lösung. Als Zuckerbrot für den geringen Aufwand gibt es noch eine praktische Statistik (Tag, Monat, akt. Jahr, Bayes Info) oben drauf.
Ich gehe davon aus, daß Spammassassin vernünftig und ohne Fehlermeldungen im Maillog eingerichtet wurde und läuft. Zunächst machen wir uns eine Kopie der Bayes-DB.
sa-learn --backup > bayes.db
Diese brauchen wir später für den Import in die MySQL-DB. Eine Sicherungskopie von einer perfekt angelernten Bayes schadet übrigens nie. Spamassassin benötigt noch ein Modul für die Kommunikation mit MySQL: DBD::mysql Dieses installieren am besten mit CPAN:
perl -MCPAN -e shellinstall DBD::mysql
Nun benötigen wir noch eine Datenbank unter MySQL. Nennen wir diese zB. “spamassassin”. Im nächsten Schritt legen wir noch einen User in MySQL an und geben diesen alle Rechte innerhalb der DB “spamassassin”. Dann legen wir das Datenbankschema an:
mysql -h <hostname> -u <adminusername> -p databasename < bayes_mysql.sql
Nun müssen wir Spamassassin noch mitteilen, das er zukünftig seine Bayes-DB in der MySQl-Datenbank suchen soll. Dazu fügen wir in der local.cf folgende Einträge hinzu:
########### Bayes-DB in MySQL-Datenbank #####################bayes_store_module Mail::SpamAssassin::BayesStore::SQL bayes_sql_dsn DBI:mysql:spamassassin:localhost:3306 bayes_sql_username username bayes_sql_password password bayes_sql_override_username filter#############################################################
die Directive bayes_sql_override_username gibt einen User an, unter dem die Daten in die Bayes geschrieben werden. Das ist dann von Bedeutung, wenn Spamassassin zur Laufzeit den User wechselt. Im nächsten Schritt kommentieren wir die Zeilen:
#bayes_path /var/spool/filter/.spamassassin/bayes#bayes_file_mode 0755
aus. Das ist wichtig, da Spamassasin sonst weiterhin die dateibasierende Bayes verwendet. Dann starten wir den Spamd Daemon neu:
/etc/init.d/spamd restart
Startet dieser ohne Fehlermeldung durch, kontrollieren wir das Logfile (maillog) und prüfen mittels:
spamassassin --lint -D
ob der Zugriff auf die MySQL-DB funktioniert. Ist dies der Fall, ist es an der Zeit die gesicherte Bayes-DB wieder einzuspielen:
sa-learn --restore bayes.db
Ein anschließendes: sa-learn –dump magic sollte dann die alten Zahlen wieder zum Vorschein bringen.
2. Spamassassin - Autowhitelist in MySQL-Datenbank
Auch die Autowhitelist kann man in die MySQl-DB verfrachten. Da wir die Datenbank und den MySQL-User schon angelegt haben, benötigen wir nur noch die entsprechende Relation und einige wenige Einträge in der local.cf
########### Autowhitelist in MySQL-Datenbank ################auto_whitelist_factory Mail::SpamAssassin::SQLBasedAddrList user_awl_dsn DBI:mysql:spamassassin:localhost:3306 user_awl_sql_username username user_awl_sql_password password user_awl_sql_table awl#############################################################
Auch die bestehende AutoWhitelist lässt sich in die MySQl-DB übertragen. Wir benötigen das Script convert_awl_dbm_to_sql . An der Shell passen wir den Quellpfad zur AWL und den zu importierenden User an:
perl convert_awl_dbm_to_sql —username filter —dsn DBI:mysql:spamassassin:localhost:3306 —ok —sqlusername username —sqlpassword password —dbautowhitelist /var/spool/filter/.spamassassin/auto–whitelist
Auch hier starten wir den spamd neu und kontrollieren das Maillog.
3. Spamassassin - Statistik in MySQL-Datenbank
Für Spamassassin gibt es ein Statistik-Plugin, welches ebenfalls MySQL nutzt und das sich leicht integrieren lässt. Wir legen dazu lediglich die Relation “stats” in der “spamassassin”-DB an, kopieren die “stats.pm” in die Spamassassin Plugin-Directory, fügen folgende Zeilen in die init.pre ein:
# Stats Plugin - store stats in a MySQL DB # loadplugin Mail::SpamAssassin::Plugin::Stats
und folgende Zeilen in die local.cf :
##################### SQL Statistik ########################use_stats 1 user_stats_dsn DBI:mysql:spamassassin:localhost:3306 user_stats_sql_username username user_stats_sql_password password user_stats_sql_table stats#############################################################
Spamassassin sollte nun die Anzahl der geprüften Mails pro Tag bezüglich Spam und Ham in die Relation “stats” schreiben. Ich habe mir ein kleines PHP-Script geschrieben, welches diese Daten visualisiert. Es zeigt die jeweiligen Tage des aktuellen Monates + User, die Domain(wenn vorhanden) sowie jeweils die Anzahl der Spam- bzw. Hammails. Eine zusätzliche Tabelle zeigt die Gesamtzahl von Spam und Ham in den jeweils vergangenen Monaten des aktuellen Jahres + Bayes Infos (”bayes_seen”). Die letzte Tabelle zeigt Informationen wie: User (Spam/Ham), Anzahl der gelernten Tokens, zeitlich erster/neuster Eintrag in der DB. Als Quelle dient hier die Relation “bayes_vars”
Download: spam-sqlstats.php.txt
Rico

Donnerstag, 19.06.2008 um 10:52 am
Moin,
super Anleitung. Habe das bei mir auch so eingebaut und funktioniert super. Leider funktioniert der Link für die spam-sqlstats.php.txt nicht mehr.
Kannst du die nochmal woanders uploaden?
Donnerstag, 19.06.2008 um 12:21 pm
@1
Server ist nun online. Habe Dir eine Mail geschickt.
Gruss Rico
Donnerstag, 19.06.2008 um 2:51 pm
Hat geklappt. Danke schön.
Samstag, 26.07.2008 um 11:56 pm
Klasse Anleitung, hat ohne Probs. geklappt!
Sonntag, 27.07.2008 um 2:09 am
leider habe ich doch noch einen fehler der aufgetaucht ist.
dbg: stats: no DSN specified; HALT!
obwohl ich alle Angaben gemacht habe
user_stats_dsn DBI:mysql:spamassassin:localhost:3306
Hast du ne Idee???
Sonntag, 27.07.2008 um 1:23 pm
Bist Du sicher, das das “Stats”-Plugin auch geladen wird?
Was sagt denn Dein “maillog”?
Spamassassin neu gestartet?
Das Plugin auch richtig kopiert? Das muss evtl. nach:
/xxx/xxx/perl5/vendor_perl/5.8.0/Mail/SpamAssassin
/xxx/xxx/vendor_perl/5.8.0/Mail/SpamAssassin/Plugin
etc.
Evtl. die Datei Stats.pm einfach in alle Verzeichnisse
kopieren, die im maillog mit “not found” o.ä. beanstandet werden.
Gruss Rico
Sonntag, 27.07.2008 um 7:20 pm
Hallo Rico,
danke habe den fehler gefunden, lag an meiner local.cf, jetzt klappts, danke.
Dienstag, 09.09.2008 um 3:30 pm
Klasse Anleitung - Danke
Wann wird denn die spam-sqlstats.php.txt wieder verfügbar sein?
Dienstag, 23.09.2008 um 10:02 pm
Supergeniale Anleitung vielen Dank.
Habe es eingebaut. Blos bei der whitelist, da bekomme ich folgenden Fehler:
Befehl:
perl convert_awl_dbm_to_sql -username -dsn DBI:mysql:bayes:localhost:3306 -ok -sqlusername -sqlpassword -dbautowhitelist /var/spool/spamassassin/auto-whitelist
Cannot open file /var/spool/spamassassin/auto-whitelist: Ungültiger Dateideskriptor
‘Die Datenbank habe ich bayes genannt’
verzeichnis:
/var/spool/spamassassin/
-rw-r–r– 1 root root 0 2008-09-23 21:47 auto-whitelist
selbste ein chmod 766 hat nicht’s genützt…
Evtl hast du noch ein Ratschlag?
Danke …Super Arbeit …weiter so.
Gruß
Mowgly
Sonntag, 01.03.2009 um 1:23 pm
Hi,
hast du deine spam-sqlstats.php.txt noch? Wäre echt super wenn du mir das zukommen lassen könntest, sont muss ich mir das ganze nachbauen.
Danke,
Martin
Sonntag, 01.03.2009 um 5:10 pm
@Martin
Du hast Post.
Der Server ist oft, aber nicht immer online, da dieser bei mir daheim steht.
Grüße,
Rico
Sonntag, 01.03.2009 um 6:12 pm
Genial, vielen Dank für die schnelle Antwort.
Martin
Samstag, 04.04.2009 um 1:37 am
Hinweis:
Ich habe soeben einen Fehler in der MySQL-Abfrage für den aktuellen Monat entdeckt, der dazu führt, daß auch Ergebnisse der vorangegangenen Jahre aufgelistet werden. Die Datei “spam-sqlstats.php.txt” (siehe oben) einfach neu vom Server laden und das Problem ist behoben.
Ansonsten die Zeile (250; $sql=SELECT day…”) nach “$aktmon” um “and YEAR(day) = $aktjahr” erweitern.
Dienstag, 22.12.2009 um 12:53 pm
Hallo Rico,
könntest du bitte die spam-sqlstats.php.txt nochmals zu Verfügung stellen (auf den Server, per Mail). Das wär super, dank.
Manuel
Dienstag, 22.12.2009 um 2:29 pm
Hallo Manuel, Link sollte nun funktionieren. Ich schicke Dir die Datei zur Sicherheit aber nochmals per Mail.
Frohe Weihnachten und einen erfolgreichen Start 2010!
Rico
Montag, 10.05.2010 um 2:28 pm
Leider funktioniert der Link zum Download des Scripts nicht. Kannst du das Script nich direkt auf dieser Seite zum Download anbieten?
Gruß Andreas