Kategorien

Druckansicht des Beitrags Druckansicht des Beitrags

Dovecot, Exim, OpenLDAP und getmail unter Ubuntu – (5) DSpam

Es ist nun schon eine ganze Weile her seit ich zum letzten Mal über mein Mailserversetup geschrieben habe. In den letzten vier Blogartikeln wurde das Zusammenspiel der Grundkomponenten mit Dovecot, Exim, OpenLDAP und getmail konfiguriert. Jetzt geht es ans Feintuning – das Einrichten eines Spamfilters mit dspam und dovecot-antispam.

Weshalb dspam?

Warum dspam wird vielleicht manch einer fragen und nicht das weitverbreitetere spamassassin? Ich habe mich für dspam entschieden, weil es anders als Spamassassin nicht regelbasiert ist. Spamassassin legt bestimmte Regeln fest, nach denen Punkte vergeben werden und kombiniert dies mit lernenden Elementen (je nach Konfiguration). Regelbasiertes Filtern von Nachrichten hat einen Vorteil: Man hat einen sofort einigermaßen brauchbaren Spamfiltern. Einigermaßen sage ich deswegen, weil natürlich statische Filter so allgemein sein müssen, dass sie für den eigenen spezifischen Spamschutz nicht maßgeschneidert sein können. Man wird damit, wenn man die Regeln auch noch ein bischen für sich anpasst weit kommen, allerdings sind dem Grenzen gesetzt. Mit dspam setze ich auf einen Spamfilter, der rein auf adaptives Lernen setzt und dabei modernste Algorithmen einsetzt. Das hat zwar den Nachteil, dass es eine Lernphase braucht und deshalb anfangs einen relativ hohen Anteil von Spam/Ham nicht richtig klassifiziert, mit der Zeit jedoch erhält man einen auf die persönlichen Bedürfnisse maßgeschneiderten Spamfilter. Diese Argumentation findet sich übrigens auch in der DSPAM FAQ. Ob das jetzt tatsächlich so ist, wird sich bei mir im Praxistest zeigen. Ich werde berichten..

Das Spamfilter-Setup im Überblick

In diesem Abschnitt möchte ich einen Überblick darüber geben, wie sich dspam in die Grundkonfiguration einfügt. Zunächst wird jede Nachricht, die exim zustellt, vor der Übergabe an den dovecot local delivery agent (LDA) von dspam analysiert und das Ergebnis im Mailheader festgehalten. Per Sieve-Filterregel kann man dann die Spammails in den Spamordner verschieben lassen. Wenn eine Mail falsch klassifiziert ist, kann man sie – falls es sich richtigerweise um Spam handelt – an spam@myserver oder andernfalls an ham@myserver schicken. Auf Dauer wäre das jedoch sehr aufwendig. Deswegen gibt es dovecot-antispam, ein Plugin für dovecot, welches beim Verschieben von Nachrichten in den Spamordner diese an spam@myserver schickt bzw. beim Verschieben von Nachrichten aus dem Spamordner in normale Ordner (nicht den Papierkorb) diese an ham@myserver schickt. DSpam kann die nutzerspezifischen Daten auf verschiedene Weisen speichern. In diesem Howto wird MySQL als Backend für dspam genutzt.

Installation und Kompilieren benötigter Pakete

So, beginnen wir mit einer kleinen Korrektur unserer Exim-Installation, die später bei der Prüfung von Paketabhängigkeiten wichtig wird. Wir installieren nämlich das Paket exim, welches auf eines der verschiedenen exim-Pakete verweist (wir haben im dritten Teil des Howtos den exim4-daemon-heavy installiert). Zusätzlich benötigen wir noch MySQL, das Dovecot-Antispam Plugin und dbconfig-common zur Einrichtung eines MySQL-Benutzers. Bei der Installation wird übrigens nach dem MySQL-Root-Passwort gefragt, bitte dieses unbedingt merken, denn wir benötigen es später noch.

sudo apt-get install exim4 dovecot-antispam mysql-server dbconfig-common

Im nächsten Schritt installieren wir dspam. Ich habe mich allerdings dafür entschieden, nicht die in den Repositories erhältliche Version 3.6.8 zu verwenden, sondern selbst die Pakete für die Version 3.9.0 RC2 zu erstellen. Dabei bin ich analog zu der Beschreibung von Jason Axley vorgegangen

sudo apt-get install build-essential
sudo apt-get build-dep dspam

Glücklicherweise gibt es einen aktiven Debian-Nutzer, der quasi alles (Sourcen+Patches) in einem Repository öffentlich zur Verfügung stellt unter http://packages.kirya.net/debian/pool/main/d/dspam/ (übrigens gibt es auch eine Anleitung auf kirya.net). Von dort laden wir nun die Quelldateien und Patches herunter, entpacken sie und wechseln in das Unterverzeichnis dspam

wget http://packages.kirya.net/debian/pool/main/d/dspam/dspam_3.9.0~rc2+git20091231.orig.tar.gz
wget http://packages.kirya.net/debian/pool/main/d/dspam/dspam_3.9.0~rc2+git20091231-1.debian.tar.gz
tar xvzf dspam_3.9.0~rc2+git20091231.orig.tar.gz
tar xvzf dspam_3.9.0~rc2+git20091231-1.debian.tar.gz -C dspam
cd dspam

Dann editieren wir die Datei debian/control, um die Paketabhängigkeiten so zu verändern, dass auch exim als Delivery Agent akzeptiert wird. Wir ergänzen deshalb in der depends-Zeile exim. Aus

Package: dspam
Architecture: any
Depends: ${misc:Depends}, procmail | maildrop | courier-maildrop | sensible-mda, lsb-base (>= 3.0-6), ${shlibs:Depends}

wird dann

Package: dspam
Architecture: any
Depends: ${misc:Depends}, exim4 | procmail | maildrop | courier-maildrop | sensible-mda, lsb-base (>= 3.0-6), ${shlibs:Depends}

Nun können wir die Binärpakete erstellen und installieren mit

fakeroot debian/rules binary
cd ..
sudo dpkg -i dspam_3.9.0~rc2+git20091231-1_i386.deb libdspam7_3.9.0~rc2+git20091231-1_i386.deb libdspam7-drv-mysql_3.9.0~rc2+git20091231-1_i386.deb dspam-doc_3.9.0~rc2+git20091231-1_all.deb

Dabei werden wir gefragt, ob die Datenbankkonfiguration jetzt oder manuell (später) erfolgen soll. Wir wählen die erste Option. Nun wird nach dem MySQL-Passwort von oben gefragt, das wir eingeben. Das Passwort für dspam können wir automatisch festlegen lassen.

Konfigurationsdateien

Ich habe mir die Mühe gemacht und die im Vergleich zur Standardkonfiguration, die in den Teilen (1) bis (4) beschrieben wurde, angepassten Dateien in einem Archiv zusammenzupacken. Dieses Archiv ist damit kein Ersatz für das dort aufgeführte Paket der Konfigurationsdateien, sondern vielmehr eine Ergänzung. Wichtige Anmerkung: Die Konfigurationsdateien können immer nur Ausgangspunkt für die eigene Konfiguration sein u.a. auch deshalb, weil die Berechtigungen für diese Dateien angepasst werden müssen!

Konfiguration von dspam

Jetzt machen wir uns ans Eingemachte, der Konfiguration von dspam, welches leider keine sehr ausführliche Dokumentation bietet. Es gibt jedoch eine kurze Quick-and-Dirty Anleitung von der dspam-user Mailingliste und in der Readme unter /usr/share/doc/dspam/README.gz sind auch einige Informationen zu finden. Außerdem fand ich die Kommentare in einer weiteren Anleitung sehr hilfreich. Wir passen zunächst das MySQL-Datenbankschema an. Ich bevorzuge nämlich das geschwindigkeitsoptimierte Datenbankschema gegenüber dem speicherplatzoptimierten, welches standardmäßig installiert wird. Deshalb habe ich mit

mysql -u root -p -e "drop database dspam; create database dspam; GRANT SELECT, INSERT, UPDATE, DELETE ON dspam.* to dspam@localhost identified by '$(sudo cat /etc/dspam/dspam.d/mysql.conf | grep MySQLPass | cut -f3)';"

erstmal das komplette dspam -Schema gelöscht und neu erzeugt. Dazu wird natürlich wieder das MySQL root Passwort von oben benötigt. Anschließend installieren wir mit

mysql -u dspam -p$(sudo cat /etc/dspam/dspam.d/mysql.conf | grep MySQLPass | cut -f3) dspam < /usr/share/doc/libdspam7-drv-mysql/sql/mysql_objects-speed.sql

das geschwindigkeitsoptimierte Datenbankschema. Wer alternativ doch das speicherplatzoptimierte Schema verwenden will, installiert es mit einem

mysql -u dspam -p$(sudo cat /etc/dspam/dspam.d/mysql.conf | grep MySQLPass | cut -f3) dspam < /usr/share/doc/libdspam7-drv-mysql/sql/mysql_objects-space.sql

Nun schaffen wir die Voraussetzungen dafür, dass virtuelle Benutzer verwendet werden können. Ich habe mich dafür entschieden, dass Datenbankschema so einzurichten, dass nicht existierende Benutzer automatisch angelegt werden.

mysql -u dspam -p$(sudo cat /etc/dspam/dspam.d/mysql.conf | grep MySQLPass | cut -f3) dspam < /usr/share/doc/libdspam7-drv-mysql/sql/virtual_users.sql

Wer alternativ die Benutzer manuell anlegen will, führt stattdessen

mysql -u dspam -p$(sudo cat /etc/dspam/dspam.d/mysql.conf | grep MySQLPass | cut -f3) dspam < /usr/share/doc/libdspam7-drv-mysql/sql/virtual_user_aliases.sql

aus. Jetzt passen wir die Datei /etc/dspam/dspam.d/mysql.conf so an, dass wir virtuelle Benutzer nutzen und die Verbindung von dspam zu MySQL über einen Unix-Socket hergestellt wird (Passwort – hier donotchange – unbedingt so lassen, wie es voreingestellt ist). Mit der Option MySQLUIDInSignature legen wir fest, dass in der DSPAM-Signatur der Benutzer gespeichert wird, für den die Spam-Klassifizierung durchgeführt wurde, so dass zwei serverweite Mail-Adressen (hier ham@ und spam@) ausreichen, um die Mail umzuklassifizieren.

MySQLServer             /var/run/mysqld/mysqld.sock
MySQLUser               dspam
MySQLPass               donotchange
MySQLDb         dspam
MySQLReconnect          true
MySQLVirtualTable               dspam_virtual_uids
MySQLVirtualUIDField            uid
MySQLVirtualUsernameField       username
MySQLUIDInSignature     on

Auch die Datei /etc/dspam/dspam.conf muss angepasst werden. Wir legen secmail, der Benutzer, unter dem der Dovecot LDA Mails zustellt und mit dem später dspam von exim aufgerufen wird, als vertrauenswürdigen Benutzer fest und schließen außerdem die Konfigurationsdateien im Verzeichnis /etc/dspam/dspam.d mitein. Zudem soll die dspam-Signatur nur im Header sein, was mit der Preference  signatureLocation eingestellt wird. Die Bedeutung der einzelnen Preference-Optionen wird im dspam-Wiki erklärt. Der Standardpfad für dspam.pid muss aufgrund von Berechtigungsproblemen korrigiert werden. Wir ergänzen bzw. ändern deshalb folgende Zeilen

# Trust user secmail
Trust secmail

# Changed to only have MessageIDs in the header
Preference "signatureLocation=headers"

# Change dspam.pid location to
ServerPID               /var/run/dspam/dspam.pid

# dspam only has to work together with the dspam client in our configuration
ServerMode dspam

# Authetication password required for dspam client
# change secret to something else!!
ServerPass.Relay1      "secret"

# Use local unix socket to minimize overhead
ServerDomainSocketPath "/tmp/dspam.sock"

# Parameters used by dspam client to connect  to the server
# change secret to the password you have chosen above..
ClientHost     /tmp/dspam.sock
ClientIdent    "secret@Relay1"

# Include config files from /etc/dspam/dspam.d
Include /etc/dspam/dspam.d/

Als nächstes editieren wir /etc/default/dspam und setzen die Variable START auf YES, damit dspam im Daemon-Mode beim Hochfahren des Systems gestartet wird.

# Variables for dspam.
#
# Do start dspam.
START=yes

Das Startskript für dspam wird angepasst, da dspam nicht automatisch in den Hintergrund geht. Deshalb editieren wir /etc/init.d/dspam und ergänzen die Option –background. Aus

        start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid $USER --exec $DAEMON -- $DAEMON_ARGS \
        || return 2

wird somit

        start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid $USER --exec $DAEMON --background -- $DAEMON_ARGS \
        || return 2

Jetzt fügen wir noch den Benutzer secmail zur Gruppe dspam hinzu, damit es beim Aufruf von exim, der unter dem Nutzer secmail erfolgt, keine Berechtigungsprobleme gibt.

sudo adduser secmail dspam

Nun können wir dspam im Daemon-Modus testen, indem wir es via

sudo dspam --debug --daemon

aufrufen, um es via Strg-C nach einer Minute beenden. Ob es Probleme gibt, sollte man anhand der Logdateien im Verzeichnis /var/log/dspam und der Syslog verfolgen. Wenn das soweit geklappt hat, starten wir dspam dauerhaft mit

sudo service dspam start

Nun prüfen wir das Zusammenspiel von Client und Server und legen gleichzeitig einen Benutzer namens globaluser an. Diesen Benutzer benötigen wir, da dspam beim Reklassifizieren einer Mail die Angabe eines Parameters –user mit gültigem User verlangt, selbst wenn es eigentlich anhand der dspam-Signatur auf den Benutzer schließen könnte, für den die Mail klassifiziert wurde. Ryan Kolak beschreibt dieses Problem ausführlicher, das schon häufiger diskutiert wurde und bei dem es sich meiner Meinung nach um einen Bug handelt (Fehlermeldung:  Unable to determine the destination user). Wenn wir den Befehl

echo Subject:test | sudo -u secmail dspam --client --debug --mode=notrain --user globaluser --deliver=spam,innocent --stdout

ausführen und anschließend die dspam-Statistik mit

sudo dspam_stats

abrufen, sollten wir folgendes Ergebnis erhalten

globaluser        TP:     0 TN:     1 FP:     0 FN:     0 SC:     0 NC:     0

Falls Fehler aufgetreten sind, werden diese in den obigen Logdateien bzw.der Syslog festgehalten. Die Konfiguration von dspam ist nun abgeschlossen. Einen kleinen Tip zu dspam von der dspam-user Mailingliste, möchte ich aber noch loswerden. Mit

strings $(which dspam) | grep build

lässt sich feststellen, welche Parameter beim Kompilieren von dspam verwendet wurden. Das kann hilfreich sein, denn bei dspam werden viele Optionen schon beim Kompilieren festgelegt.

Anpassung der exim-Konfiguration

Jetzt machen wir uns daran, Exim zu konfigurieren. Hier habe ich mich an der Anleitung von Robert Fendt und einer Dokumentation in einem Forum orientiert. Zunächst fügen wir zu den bestehen Transporten an die lokalen Mailboxen zwei Zeilen hinzu. Der transport_filter leitet die Nachrichten durch den Spamfilter während die headers_remove Zeile dazu führt, dass in der Nachricht vorhandene DSpam-Header entfernt werden, so dass diese Header tatsächlich nur von dspam stammen können. Wir editieren also die beiden Dateien /etc/exim4/conf.d/transport/30_exim4-config_dovecot_delivery_pipe und /etc/exim4/conf.d/transport/30_exim4-config_dovecot_delivery_pipe_secmail und ergänzen die beiden erwähnten Zeilen:

  driver = pipe
  transport_filter = /usr/bin/dspam --deliver=innocent,spam --user "GET_LOCAL_MAIL" --stdout
  headers_remove = X-DSPAM-Result:X-DSPAM-Processed:X-DSPAM-Confidence:X-DSPAM-Probability:X-DSPAM-Signature
  command = /usr/lib/dovecot/deliver -d "GET_LOCAL_MAIL"

Jetzt müssen wir noch die beiden Mail-Adressen spam@myserver und ham@myserver einrichten. Natürlich sollen nur vom Server selbst oder von authentifizierten Benutzern E-Mails an diese Adressen geschickt werden dürfen. In der Datei /etc/exim4/conf.d/main/00_local_macros ergänzen wir deshalb Macros für eine Hostliste und diese beiden E-Mail-Adressen

# @[] list of all local IPs
# If exim is used localy in batch mode (exim4 -bs) then "$host" is empty, the ": :" adds the empty string.
hostlist own_hosts = @[] : :

# address for reclassifying/learning false positive spam mails
MAIL_ADDRESS_HAM = ham

# address for reclassifying/learning undetected spam
MAIL_ADDRESS_SPAM = spam

Nun verweigern wir allen nicht authentifizierten Usern von entfernten Hosts das Senden von Mails durch Ergänzung der folgenden Zeilen in der Datei /etc/exim4/conf.d/acl/30_exim4-config_check_rcpt (bitte unbedingt nach der Stelle mit accept authenticated=*)

# Accept if the message arrived over an authenticated connection, from
# any host. Again, these messages are usually from MUAs, so recipient
# verification is omitted, and submission mode is set. And again, we do this
# check before any black list tests.
accept
  authenticated = *
  # Nur unter der Bedingung, dass der Absender ein valider, entfernter User in LDAP
  # ist Empfänger bedingungslos akzeptieren
  condition = IS_SENDER_REMOTE
  #control = submission/sender_retain

# Deny all unauthenticated remote hosts to send mail to
# spam or ham email addresses
deny
  hosts = !+own_hosts
  local_parts = MAIL_ADDRESS_HAM : MAIL_ADDRESS_SPAM

Jetzt brauchen wir nur noch einen Router und einen Transporter für das Lernen von Spam bzw. Ham. Den Router erzeugen wir durch die Datei /etc/exim4/conf.d/router/410_exim4-config_spam_classification mit folgendem Inhalt

################################################
### router/410_exim4-config_spam_classification
################################################

# This router matches the local spam and ham mailboxes
# which are used to train the spam filter with false
# spam positives or unrecognized spam.

router_spam_training:
  debug_print = "R: spam training issued by mail from $sender_address@$sender_address_domain to $local_part@$domain"
  driver = accept
  domains = +local_domains
  local_parts = MAIL_ADDRESS_HAM : MAIL_ADDRESS_SPAM
  transport = transport_spam_training

################################################
### router/410_exim4-config_spam_classification
################################################

Den Transporter erstellen wir analog durch die Datei /etc/exim4/conf.d/transport/30_exim4-config_transport_spam_training mit dem Inhalt

#####################################################
### transport/30_exim4-config_transport_spam_training
#####################################################

transport_spam_training:
  debug_print = "T: spam training issued by mail from $sender_address@$sender_address_domain to $local_part@$domain"
  driver = pipe
  command = /usr/bin/dspam "${if eq{$local_part}{MAIL_ADDRESS_HAM} {--class=innocent}{--class=spam}}" --source=error --delivery=stdout --user globaluser
  message_prefix =
  message_suffix =
  # Do not add additional Headers
  delivery_date_add = false
  envelope_to_add = false
  return_path_add = false
  log_output
  user = secmail
  group = secmail

#####################################################
### transport/30_exim4-config_transport_spam_training
#####################################################

Was mich lange aufgehalten hat, waren die String-Expansions in der command Angabe. Hier kommt es darauf an, die Anführungszeichen zu setzen, wie es sowohl in der FAQ als auch in der Dokumentation von command und unter anderem auch bei der von transport_filter erwähnt wird. Der Grund, warum hier für dspam nicht der Parameter –stdout, sondern –delivery=stdout gewählt wurde, liegt darin, dass ansonsten teilweise die Fehlermeldung „Client exited with error -5“ auftaucht. Dieser Hinweis zur Fehlerbehebung stammt übrigens von der dspam-users Mailinglist. Abschließend wird die Konfigurationsdatei erzeugt und Exim neu gestartet durch ein

sudo update-exim4.conf && sudo /etc/init.d/exim4 restart

Nun kann man mit dem Befehl

echo Subject:test | sudo -u secmail dspam --client --debug --mode=notrain --user globaluser --deliver=spam,innocent --stdout | mail -s "Reclassify" spam

testen, ob die Konfiguration funktioniert. Ein erneutes

sudo dspam_stats

sollte dann dieses Ergebnis

globaluser        TP:     0 TN:     1 FP:     0 FN:     1 SC:     0 NC:     0

ausgeben.

Einrichtung des dovecot-antispam Plugins

Im nächsten Schritt konfigurieren wir das dovecot-antispam plugin. Bei diesem Plugin wird beim Kompilieren festgelegt, welches Backend (dspam-exec, mailtrain oder crm114-exec) verwendet werden soll. Wenn man die Paket-Version von Debian/Ubuntu verwendet, ist man deshalb automatisch auf das mailtrain-Backend festgelegt. Dies kann man zwar erst der Beschreibung des Pakets in Lucid Lynx lesen, trifft aber auch auf vorherige Versionen zu. Passen wir also jetzt die Konfigurationsdatei unter /etc/dovecot/dovecot.conf an. Wir aktivieren das antispam-Plugin im Imap-Abschnitt folgendermaßen

protocol imap {
  mail_plugins = antispam
  # mail_plugin_dir = /usr/lib/dovecot/modules/imap
}

anschließend ergänzen wir den plugin-Abschnitt um die Konfigurationsparameter für dovecot-antispam. Dabei sind unter Umständen die Ordnerbezeichnungen für den Papierkorb und Spam anzupassen.

plugin {
 ##################
 # DSPAM
 # GENERIC OPTIONS

 # mail signature (used with any backend requiring a signature)
 antispam_signature = X-DSPAM-Signature

 # action to take on mails without signature
 # (used with any backend requiring a signature)
 # (we recommend only setting this to 'move' after verifying that the
 # whole setup is working)
 # antispam_signature_missing = move # move silently without training
 antispam_signature_missing = move

 # semicolon-separated list of Trash folders (default unset i.e. none)
 # antispam_trash =
 antispam_trash = trash;Trash;Deleted Items

 # semicolon-separated list of spam folders
 antispam_spam = SPAM;Spam;spam

 # semicolon-separated list of unsure folders (default unset i.e. none)
 # antispam_unsure =

 # Whether to allow APPENDing to SPAM folders or not. Must be set to
 # "yes" (case insensitive) to be activated. Before activating, please
 # read the discussion below.
 # antispam_allow_append_to_spam = no

 ###########################
 # BACKEND SPECIFIC OPTIONS
 # please note: the backend has to be specified at compile time
 # the backend used in the Debian/Ubuntu standard package is mailtrain

 #===================
 # dspam-exec plugin

 # dspam binary
 antispam_dspam_binary = /usr/bin/dspam

 # semicolon-separated list of extra arguments to dspam
 # (default unset i.e. none)
 # antispam_dspam_args =
 # antispam_dspam_args = --deliver=;--user;%u  # % expansion done by dovecot
 # antispam_dspam_args = --mode=teft

 # Ignore mails where the DSPAM result header contains any of the
 # strings listed in the blacklist
 # (default unset i.e. none)
 # antispam_dspam_result_header = X-DSPAM-Result
 # semicolon-separated list of blacklisted results, case insensitive
 # antispam_dspam_result_blacklist = Virus

 #=====================
 # mail sending plugin
 #
 # Because of the way this plugin works, you can also use it
 # to train via an arbitrary program that receives the message
 # on standard input, in that case you can use the config
 # options antispam_mail_spam and antispam_mail_notspam for
 # the argument that distinguishes between ham and spam.
 # For example:
 #   antispam_mail_sendmail = /path/to/mailtrain
 #   antispam_mail_sendmail_args = --for;%u
 #   antispam_mail_spam = --spam
 #   antispam_mail_notspam = --ham
 # will call it, for example, like this:
 #   /path/to/mailtrain --for jberg --spam

 # temporary directory
 antispam_mail_tmpdir = /tmp

 # spam/not-spam addresses (default unset which will give errors)
 antispam_mail_spam = spam
 antispam_mail_notspam = ham

 # sendmail binary
 antispam_mail_sendmail = /usr/sbin/sendmail
 #antispam_mail_sendmail_args = -f;%u@example.com # % expansion done by dovecot

 #===================
 # crm114-exec plugin

 # mailreaver binary
 antispam_crm_binary = /bin/false
 # antispam_crm_binary = /usr/share/crm114/mailreaver.crm

 # semicolon-separated list of extra arguments to dspam
 # (default unset i.e. none)
 # antispam_crm_args =
 # antispam_crm_args = --config=/path/to/config

 # NOTE: you need to set the signature for this backend
 antispam_signature = X-CRM114-CacheID
}

Sieve zum automatischen Verschieben der Spamnachrichten

Das Einzige, was jetzt noch fehlt, ist die Einrichtung des Sieve-Filters durch den die Spam-Nachrichten direkt in den Spam-Ordner verschoben und als gelesen markiert werden. Auch hier bitte ggfs. den Namen des Spamordners anpassen.

require ["fileinto","imapflags"];

# Spam
# Catch mail tagged as spam, except spam retrained and delivered to the mailbox
if allof(header :contains "X-DSPAM-Result" "Spam",
 not header :contains "X-DSPAM-Reclassified" "Innocent") {

 # Mark as read
 setflag "\\Seen";

 # Move into the Junk folder
 fileinto "Spam";

 # Stop processing here
 stop;
}

# The rest goes into INBOX
# default is "implicit keep", we do it explicitly here
keep;

So, damit ist der Spamfilter fertig eingerichtet. Was jetzt noch fehlt, ist das Webinterface für dspam (das Binär-Paket dafür haben wir aber schon erzeugt) und der Webmail-Zugriff mit Roundcube. Fortsetzung folgt..

8 comments to Dovecot, Exim, OpenLDAP und getmail unter Ubuntu – (5) DSpam

  • cLinx

    Wow, was ein Artikel! Wie wärs mit einer Überführung ins Wiki von uu.de? Dort hat deine Arbeit warscheinlich mehr Nutznießer als hier. 😉

  • Dem Kommentar von cLinx kann ich nur zustimmen. Trotzdem Super Artikel, sehr informativ. Danke dafür!

  • Hi,

    benutze selbst auch Sieve zur Mailsortierung.
    In welcher Datei/Config hast du die Regeln für den Spam definiert?
    Ich hab das Problem, dass bei mir die globale Regel für den Spam
    durch die Benutzer-Sieve-Regeln überschrieben/ignoriert wird…

  • Der beste Spamfilter ist für mich immer noch ein aktives Greylisting. Wer wirklich viel Spam bekommt, hat mit aktiviertem Greylisten sofort mindestens 90% weniger Müll im Posteingang. Das müsste es doch eigentlich auch für exim geben. Ich nutze postgrey für Postfix, was sich sehr einfach einrichten lässt.

    • Mit Greylisting hatte ich mich noch nicht beschäftigt. Auf der postgrey-Webseite ist ja beschrieben wie es funktioniert und das hört sich gut an. Einen Patch für Exim und eine Kurzanleitung für die Integration in exim gibt es schon. Das werde ich mir bei Gelegenheit anschauen. Vielen Dank für den Hinweis!
      Einen kleinen Wermutstropfen hat das allerdings. Das Ganz ist nur durchführbar, wenn man auch die Kontrolle über den Mailserver hat. Bei meinen Adressen von Freemailanbietern wie GMX & Co sieht das leider schlecht aus – und auf deren Standardspamfiltering möchte ich nicht vertrauen. Da setze ich doch lieber mein eigenes Dspam auf..

  • Ich habe leider erfolglos probiert dspam und dovcot-antispam zum laufen zu bringen.
    Beide Pakete funktionieren bei mir in Ubuntu überhaupt nicht. Nur selberübersetzte Versionen laufen. Allerdings bekomme ich beim Verschieben von Email seltsame Warnungen von Thunderbird:
    Der aktuelle Vorgang in „Posteingang ist fehlgeschlagen. Der Server des Kontos „Dovecot“ antwortete: [CANNOT] antispam signature not found.
    Ansonsten ein toller Artikel 🙂

    • Dass dovecot nicht funktioniert, ist schon seltsam, da es der Standard-Mailserver von Ubuntu ist. In Zukunft werde ich die Anleitung ohnehin überarbeiten müssen, um das Ganze mit dovecot 2.0 kompatibel zu machen.
      Zu deinem Fehler beim Verschieben: Gibt es bei deinen Mails im Header eine Zeile die mit „X-DSPAM-Signature:“ beginnt? Falls nicht, funktioniert dein Setup mit Exim nicht, das dspam aufrufen sollte. Das solltest du dann genauer prüfen.

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

  

  

  

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.