Spamassassin mit Exim4 und Dovecot (Debian)

Aus MattWiki
Version vom 4. März 2017, 16:54 Uhr von Matt (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Spamassassin mit Exim4 und Dovecot (Debian) == Installation == Metapaket exim4-daemon-light deinstallieren. Metapaket exim4-daemon-heavy installieren apt…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

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]