Spamassassin Konfiguration und Bayes User-Abhängig verwalten und managen mit Roundcube SaUserPrefs & Dovecot Antispam unter Ubuntu 16.04 mit Amavis

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert