Spamassassin mit Exim4 und Dovecot (Debian): Unterschied zwischen den Versionen

Aus MattWiki
Zeile 34: Zeile 34:
Ohne Split: '''/etc/exim4/exim4.conf.template'''
Ohne Split: '''/etc/exim4/exim4.conf.template'''


Zeilen hinzufügen:
Zeilen hinzufügen, senn mit dem X-Spam-Flag gearbeitet wird:  


   # add line when message is over threshold
   # add line when message is over threshold
   warn  spam = nobody/defer_ok
   warn  spam = nobody/defer_ok
         add_header = X-Spam-Flag: YES       
         add_header = X-Spam-Flag: YES       
Alternativ kann auch mit der X-Spam_bar gearbeitet werden, die im folgenden gezeigt wird. Dafür:
Folgende bestehende Zeilen dekommentieren:
Folgende bestehende Zeilen dekommentieren:


Zeile 114: Zeile 116:
Es sind zwei Lösungsansätze denkbar:
Es sind zwei Lösungsansätze denkbar:
      
      
1. Verzeichnis für Sieve-Regeln erstellen
'''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.
Dies ist sinnvoll, wenn man zusätzlich Skripte durch User erstellen lassen möchte, z. B. mit Managesieve und der Roundcube-Erweiterung.
Zeile 122: Zeile 124:
Neue Sieve-Regeldatei erstellen darin erstellen, z. B. ''movespam.sieve''
Neue Sieve-Regeldatei erstellen darin erstellen, z. B. ''movespam.sieve''


Inhalt:
Inhalt der Datei siehe zweiter Lösungsansatz.


# The “require” lines include functionality to move emails
'''2. Globale Default-Sieve-Datei (Getesteter Weg)'''
# 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.
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.
Zeile 147: Zeile 136:
Datei anlegen: /var/lib/dovecot/sieve/default.sieve
Datei anlegen: /var/lib/dovecot/sieve/default.sieve


Inhalt für Sortierung der Mails anhand des X-Spam-Flag:
# The “require” lines include functionality to move emails
<nowiki>#</nowiki> into certain folders (fileinto) and to create folders if
<nowiki>#</nowiki> they don’t exist yet (mailbox). Then if SpamAssassin marked
<nowiki>#</nowiki> a header as spam it is moved into the Junk folder
<nowiki>#</nowiki> which just appears as “Junk” to the user underneath their inbox.
  require ["fileinto","mailbox"];
  require ["fileinto","mailbox"];
   
   
Zeile 153: Zeile 150:
  }
  }


Inhalt für Sortierung der Mails anhand der X-Spam_bar:
require "fileinto";
 
if header :contains "X-Spam-Bar" "+++++"
{
  fileinto "Junk";
}
In beiden Fällen sollte die Sieve-Regel-Datei zu einer binären Datei kompiliert werden:
In beiden Fällen sollte die Sieve-Regel-Datei zu einer binären Datei kompiliert werden:
   
  sievec /etc/dovecot/sieve/spam-to-junk.sieve
  sievec /etc/dovecot/sieve/spam-to-junk.sieve



Version vom 30. März 2017, 20:46 Uhr

Beschreibung, wie SpamAssassin in einem Debian-Basierten Mailserver mit Exim4, Dovecot und Sieve genutzt werden kann.

Dabei wird als Exim4 nur als MTA genutzt. Als LDA kommt Dovecot zum Einsatz, welches mit Plugins um die Nutzung von Sieve-Skripten erweitert wird.

Quellen:

https://wiki.debian.org/Exim#Spam_scanning

http://www.exim.org/exim-html-current/doc/html/spec_html/ch44.html

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, senn mit dem X-Spam-Flag gearbeitet wird:

  # add line when message is over threshold
  warn  spam = nobody/defer_ok
        add_header = X-Spam-Flag: YES      

Alternativ kann auch mit der X-Spam_bar gearbeitet werden, die im folgenden gezeigt wird. Dafür:

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 der Datei siehe zweiter Lösungsansatz.

2. Globale Default-Sieve-Datei (Getesteter Weg)

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

Inhalt für Sortierung der Mails anhand des X-Spam-Flag:

# 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";
}

Inhalt für Sortierung der Mails anhand der X-Spam_bar:

require "fileinto";
 
if header :contains "X-Spam-Bar" "+++++"
{
  fileinto "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

Razor und Pyzor

Installation:

# apt-get install razor pyzor

Bei Razor registrieren und Serverliste downloaden:

# razor-admin -create
# razor-admin -register

Serverliste aktualisieren:

# pyzor discover

Pyzor testen:

# pyzor ping

Das Ergebnis sollte etwa so lauten:

public.pyzor.org:24441	(200, 'OK')

Als letztes wird noch die SpamAssassin-Konfiguration /etc/spamassassin/local.cf erweitert. Unter dem Bayes-Bereich folgende Zeilen einfügen:

use_pyzor 1
pyzor_path /usr/bin/pyzor
 
use_razor2 1
razor_config /etc/razor/razor-agent.conf

Normalerweise sind in Debian die zugehörigen SpamAssassin-Plugins bereits aktiviert. Diese kan man in /etc/spamassassin/v310.pre nochmal überprüfen:

# Pyzor - perform Pyzor message checks.
#
loadplugin Mail::SpamAssassin::Plugin::Pyzor

# Razor2 - perform Razor2 message checks.
#
loadplugin Mail::SpamAssassin::Plugin::Razor2

Spamassassin neu starten:

/etc/init.d/spamassassin restart

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:

  • /var/log/syslog
  • /var/log/mail.info
  • /var/log/mail.err
  • /var/log/exim/maillog

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