Spamassassin mit Exim4 und Dovecot (Debian)
Spamassassin mit Exim4 und Dovecot (Debian)
Installation
Metapaket exim4-daemon-light deinstallieren.
Metapaket exim4-daemon-heavy installieren
apt-get install exim4-daemon-heavy
SpamAssassin installieren:
apt-get install spamassassin (spamc?)
SpamAssassin aktivieren und starten
systemctl enable spamassassin.service systemctl status spamassassin.service
Konfiguration
Configfile anpassen:
Splitkonfiguration: /etc/exim4/conf.d/acl/40_exim4-config_check_data
Ohne Split: /etc/exim4/exim4.conf.template
Zeilen hinzufügen:
# add line when message is over threshold warn spam = nobody/defer_ok add_header = X-Spam-Flag: YES
Folgende bestehende Zeilen dekommentieren:
# See the exim docs and the exim wiki for more suitable examples. # warn spam = Debian-exim:true add_header = X-Spam_score: $spam_score\n\ X-Spam_score_int: $spam_score_int\n\ X-Spam_bar: $spam_bar\n\ X-Spam_report: $spam_report
Wenn Fetchmail genutzt wird, muss es so konfiguriert werden, dass es E-Mails an den SMTP-Server weitergibt.
Dazu in der .fetchmailrc-Datei folgende Zeile hinzufügen:
smtp <smtp-server-name>
Dovecot zu lokalem LDA einrichten
Quelle: http://wiki.dovecot.org/LDA/Exim
Damit Sieve für Dovecot genutzt wird, muss Dovecot als LDA genutzt werden.
Findet die Abholung der Mails per Fetchmail statt, kann Fetchmail die Mails direkt an den Dovecot-LDA "deliver" weitergeben.
Dies kann ggf. mit Zwischenschritt über Spamasssassin bzw. spamc, welches dann die Daten per Standardausgabe an Dovecot-LDA weiter gibt, passieren.
Alternativ muss Exim angepasst werden, damit es nicht selbst als LDA fungiert, sondern die Mails an den Dovecot-LDA weiter gibt.
In dem Zuge muss die Nutzung von Procmail ggf. unterbunden werden. Procmail wird als LDA in Exim genutzt, wenn es eine Datei /etc/procmailrc gibt. Diese muss dann ggf. entfernt werden.
Am einfachsten ist es, die verteilte Konfiguration von Exim zu verwenden.
In diesem Falle wird eine neuer Transport für den Dovecot-LDA erstellt:
/etc/exim4/conf.d/transport/30_exim4-config_dovecot_pipe
Inhalt:
dovecot_pipe: debug_print = "T: maildrop_pipe for $local_part@$domain" driver = pipe # Use /usr/lib/dovecot/dovecot-lda if using Debian's package. # You may or may not want to add -d $local_part@$domain depending on if you need a userdb lookup done. # command = /usr/local/libexec/dovecot/dovecot-lda -f $sender_address command = /usr/lib/dovecot/dovecot-lda -f $sender_address message_prefix = message_suffix = log_output delivery_date_add envelope_to_add return_path_add #group = mail #mode = 0660 temp_errors = 64 : 69 : 70: 71 : 72 : 73 : 74 : 75 : 78
Anschließend wird der Dovecot-LDA für den lokalen Transport hinterlegt. Anpassung von: router/900_exim4-config_local_user
# transport = LOCAL_DELIVERY transport = dovecot_pipe
Abschließend Exim neu starten:
service exim4 restart
Dovecot-Sieve sowie Managesieve
Installation von Sieve:
# apt-get install dovecot-sieve dovecot-managesieved (dovecot-antispam?)
Es sind zwei Lösungsansätze denkbar:
1. Verzeichnis für Sieve-Regeln erstellen
Dies ist sinnvoll, wenn man zusätzlich Skripte durch User erstellen lassen möchte, z. B. mit Managesieve und der Roundcube-Erweiterung.
# mkdir /etc/dovecot/sieve-after
Neue Sieve-Regeldatei erstellen darin erstellen, z. B. movespam.sieve
Inhalt:
# The “require” lines include functionality to move emails # into certain folders (fileinto) and to create folders if # they don’t exist yet (mailbox). Then if SpamAssassin marked # a header as spam it is moved into the Junk folder # which just appears as “Junk” to the user underneath their inbox. require ["fileinto","mailbox"]; if header :contains "X-Spam-Flag" "Yes" { fileinto :create "Junk"; stop; }
2. Globale Default-Sieve-Datei
Diese Default-Sieve-Datei wird verwendet, wenn keine persönliche Sieve-Datei für den User vorhanden ist. Dies ist z. B. dann der Fall, wenn Managesieve nicht genutzt werden soll.
Alternativ ist dies sinnvoll, wenn der User ohne persönliche Sieve-Datei ein Standardverhalten erhalten soll, dieses aber vollständig vom User übersteuert können werden soll.
# mkdir /var/lib/dovecot/sieve
Datei anlegen: /var/lib/dovecot/sieve/default.sieve
require ["fileinto","mailbox"]; if header :contains "X-Spam-Flag" "Yes" { fileinto :create "Junk"; }
In beiden Fällen sollte die Sieve-Regel-Datei zu einer binären Datei kompiliert werden:
sievec /etc/dovecot/sieve/spam-to-junk.sieve
bzw.
sievec /var/lib/dovecot/sieve/default.sieve
Sieve-Configdatei 20-managesieve.conf bearbeiten und folgende Zeile einfügen, um Sieve zu aktivieren:
protocols = $protocols sieve
Dovecot-Configdatei 90-sieve.conf bearbeiten und folgende Zeile einfügen:
sieve = ~/.dovecot.sieve sieve_dir = ~/sieve sieve_default = /var/lib/dovecot/sieve/default.sieve # Für Default-Skript sieve_global_dir = /etc/dovecot/sieve sieve_after = /etc/dovecot/sieve-after # Für Sieve-After-Skripte
LDA-Plugins aktivieren in 15-lda.conf durch erweitern der folgenden Zeilen um Sieve:
protocol lda { # Space separated list of plugins to load (default is global mail_plugins). mail_plugins = $mail_plugins sieve }
Evtl. auch "protocol lmtp" erweitern? (Findet sich in einer anderen Conf-Datei)
Dovecot neu starten
service dovecot restart
Verfügbarkeit Sieve testen, Port 4190 sollte von Dovecot geöffnet sein
netstat -tulpen | grep -i dovecot
Bei Problemen: http://wiki2.dovecot.org/Pigeonhole/Sieve/Troubleshooting
Dovecot Managesieve / Roundcube
Das Dovecot-Paket Managesieve ermöglicht es Usern, ihre eigenen Sieve-Regeln zu definieren, die vom Server ausgeführt werden, wenn eine neue E-Mail eingeht.
Um userspezifische Regeln mit Managesieve in Roundcube verwalten zu können, muss das Roundcube-Plugin aktiviert werden in /etc/roundcube/config.inc.php:
$config['plugins'] = array( 'archive', 'zipdownload', 'managesieve', );
SA-Learn
SpamAssassin-Learn einrichten:
sa-learn --spam <spamfolder> sa-learn --ham <hamfolder>
Alternativ
sa-learn --folders=foldersfile
Wobei foldersfile folgenden Aufbau haben muss:
ham:dir:/path/to/hamfolder1 ham:dir:/path/to/hamfolder2 ham:dir:/path/to/hamfolder3 spam:dir:/path/to/spamfolder1 spam:dir:/path/to/spamfolder2 spam:dir:/path/to/spamfolder3
Statt dir kann man auch mbox verwenden. Vgl. Dokumentation https://spamassassin.apache.org/full/3.4.x/doc/sa-learn.txt
Status SA-Learn überprüfen:
sa-learn --dump magic sa-learn --dbpath /path/to/bayesdb --dump magic
Troubleshooting
Erweitertes Logging kann aktiviert werden in /etc/dovecot/conf.d/10-logging.conf
# Enable mail process debugging. This can help you figure out why Dovecot # isn't finding your mails. mail_debug = yes
Die Logs werden nach /var/log/syslog geschrieben.
Alternativ lohnt es sich auch noch folgende Dateien zu prüfen:
Testen
Testdaten befinden sich in Debian unter /usr/share/doc/spamassassin/examples/
Testdurchführung Spamassassin
spamassassin -t < sample-nonspam.txt > nonspam.out spamassassin -t < sample-spam.txt > spam.out spamc < sample-nonspam.txt > nonspam.out spamc -t < sample-spam.txt > spam.out
Testmail senden um gesamten SMTP-Stack zu testen:
Vgl. [Exim_als_SMTP-Server_(Debian)#Versenden_von_Testmails]