Als erstes benötigt man eine Datenbank – ich hab dafür der einfachheit halber PhpMyAdmin verwendet und einen neuen User ’spamassassin‘ samt gleichnamiger Datenbank angelegt.
Dann die einzelnen Tabellen (leider hatte ich ein bisschen Probleme mit der maximalen Keylength bei den Datenbanken, weswegen ich etwas tricksen musste):
CREATE TABLE `awl` ( `username` varchar(100) NOT NULL DEFAULT '', `email` varbinary(255) NOT NULL DEFAULT '', `ip` varchar(40) NOT NULL DEFAULT '', `count` int(11) NOT NULL DEFAULT '0', `totscore` float NOT NULL DEFAULT '0', `signedby` varchar(255) NOT NULL DEFAULT '', `lastupdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE `bayes_expire` ( `id` int(11) NOT NULL DEFAULT '0', `runtime` int(11) NOT NULL DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `bayes_global_vars` ( `variable` varchar(30) NOT NULL DEFAULT '', `value` varchar(200) NOT NULL DEFAULT '' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; INSERT INTO `bayes_global_vars` (`variable`, `value`) VALUES ('VERSION', '3'); CREATE TABLE `bayes_seen` ( `id` int(11) NOT NULL DEFAULT '0', `msgid` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '', `flag` char(1) NOT NULL DEFAULT '' ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4; CREATE TABLE `bayes_token` ( `id` int(11) NOT NULL DEFAULT '0', `token` char(5) NOT NULL DEFAULT '', `spam_count` int(11) NOT NULL DEFAULT '0', `ham_count` int(11) NOT NULL DEFAULT '0', `atime` int(11) NOT NULL DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `bayes_vars` ( `id` int(11) NOT NULL, `username` varchar(200) NOT NULL DEFAULT '', `spam_count` int(11) NOT NULL DEFAULT '0', `ham_count` int(11) NOT NULL DEFAULT '0', `token_count` int(11) NOT NULL DEFAULT '0', `last_expire` int(11) NOT NULL DEFAULT '0', `last_atime_delta` int(11) NOT NULL DEFAULT '0', `last_expire_reduce` int(11) NOT NULL DEFAULT '0', `oldest_token_age` int(11) NOT NULL DEFAULT '2147483647', `newest_token_age` int(11) NOT NULL DEFAULT '0' ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4; CREATE TABLE `userpref` ( `username` varchar(100) NOT NULL DEFAULT '', `preference` varchar(50) NOT NULL DEFAULT '', `value` varchar(100) NOT NULL DEFAULT '', `prefid` int(11) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4; INSERT INTO `userpref` (`username`, `preference`, `value`, `prefid`) VALUES ('@GLOBAL', 'required_hits', '5.0', 1); ALTER TABLE `awl` ADD PRIMARY KEY (`username`,`email`(100),`signedby`,`ip`); ALTER TABLE `bayes_expire` ADD KEY `bayes_expire_idx1` (`id`); ALTER TABLE `bayes_global_vars` ADD PRIMARY KEY (`variable`); ALTER TABLE `bayes_seen` ADD PRIMARY KEY (`id`,`msgid`); ALTER TABLE `bayes_token` ADD PRIMARY KEY (`id`,`token`), ADD KEY `bayes_token_idx1` (`id`,`atime`); ALTER TABLE `bayes_vars` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `bayes_vars_idx1` (`username`); ALTER TABLE `userpref` ADD PRIMARY KEY (`prefid`), ADD KEY `username` (`username`); ALTER TABLE `bayes_vars` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; ALTER TABLE `userpref` MODIFY `prefid` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
/etc/default/spamassassin anpassen:
OPTIONS="--create-prefs --max-children 5 --helper-home-dir --sql-config --nouser-config -u vmail"
In /etc/spamassassin/v310.pre habe ich folgende Zeile einkommentiert:
loadplugin Mail::SpamAssassin::Plugin::AWL
und danach /etc/spamassassin/local.cf angepasst:
# Mysql User Scores user_scores_dsn dbi:mysql:spamassassin:localhost user_scores_sql_username spamassassin user_scores_sql_password DATENBANKPASSWORT user_scores_sql_custom_query SELECT preference, value FROM _TABLE_ WHERE username = _USERNAME_ OR username = '@GLOBAL' OR username = CONCAT('%',_DOMAIN_) ORDER BY username ASC # Bayes bayes_store_module Mail::SpamAssassin::BayesStore::SQL bayes_sql_dsn dbi:mysql:spamassassin:localhost:3306 bayes_sql_username spamassassin bayes_sql_password DATENBANKPASSWORT #AWL auto_whitelist_factory Mail::SpamAssassin::SQLBasedAddrList user_awl_dsn DBI:mysql:spamassassin:localhost user_awl_sql_username spamassassin user_awl_sql_password DATENBANKPASSWORT user_awl_sql_table awl
Danach noch in die /etc/amavis/conf.d/50-user
@sa_userconf_maps = ({ '.' => 'sql:' }); @sa_username_maps = new_RE ( [ qr'^([^@]+@.*)'i => '${1}' ] );
eintragen, damit Amavis den Username (Bei mir ist der Username die E-Mail Adresse) korrekt an Spamassassin übergibt.
Roundcube SAUserpref Plugin
Das Plugin ansich war bei mir schon installiert, weil ich Roundcube über das APT Package mit allen Plugins installiert habe. Als erstes habe ich in der /etc/roundcube/config.inc.php ’sauserprefs‘ in config[‚plugins‘] ergänzt, die Originalconfig aus /usr/share/roundcube/plugins/sauserprefs/config.inc.php.dist nach/etc/roundcube/plugins/sauserprefs/config.inc.php kopiert und diese dann nach meinen Wünschen angepasst und mit den Zugangsdaten zur Mysql Tabelle ausgestattet. Wenn man das (richtig) gemacht hat, taucht im Einstellungsmenü von Roundcube der neue Reiter „Spam“ auf.
Dovecot Antispam Plugin
Mit dem Dovecot Antispam Plugin, kann man Dovecot automatisch E-Mails als Spam lernen lassen, wenn Sie manuell in den Spam Ordner verschoben werden und als Ham, wenn Sie wieder herausgenommen werden. Dafür habe ich die dovecot.conf folgendermassen angepasst:
protocol imap { mail_plugins = $mail_plugins antispam mail_max_userip_connections = 20 imap_idle_notify_interval = 29 mins } plugin { # Zum Debuggen kann man folgende Zeilen einkommentieren #antispam_debug_target = syslog #antispam_verbose_debug = 1 antispam_backend = pipe antispam_trash = Trash;trash;Deleted Items; Deleted Messages antispam_spam = Spam antispam_pipe_program_spam_arg = --spam antispam_pipe_program_notspam_arg = --ham antispam_pipe_program = /usr/bin/sa-learn antispam_pipe_program_args = --username=%Lu }
Das wars auch schon.
Quellen:
https://wiki.dhits.nl/index.php/SpamAssassin
http://svn.apache.org/repos/asf/spamassassin/tags/spamassassin_current_release_3.4.x/sql/README
https://web-yard.net/wiki/Setup_(production)#2011-07-11:_dovecot-antispam_update
https://tty1.net/blog/2014/spamassassin-with-mysql_en.html