Spamfilter und DKIM mit rspamd

Kürzlich war eine größere Aktualisierung der Serverumgebung nötig, auf der ich auch einen Mailserver betreibe. Ich habe das zum Anlass genommen, rspamd als Alternative zur Kombination aus SpamAssassin und amavisd-new anzusehen und kann das uneingeschränkt empfehlen.

Wesentliche Eigenschaften von rspamd:

  • Web-Oberfläche für Status-Informationen und einfache Anpassung der Konfiguration.
  • Bis zu 10× schneller als SpamAssassin (siehe auch die Erläuterungen dazu bei rspamd).
  • Direkte Einbindung als milter in Postfix, wodurch E-Mails bereits während der Zustellung geprüft und auch ggf. aktiv abgelehnt oder durch Greylisting verzögert werden können.
  • Optional Erzeugung von DKIM-Signaturen für ausgehende E-Mails.

Integration in ISPConfig

Da die Nutzer/innen des Servers ihre E-Mail-Adressen auf einfache Weise selber verwalten können sollen, nutze ich ISPConfig. ISPConfig unterstützt auch rspamd statt SpamAssassin. Der Wechsel ist nicht besonders schwer. Eine Anleitung für Debian und Ubuntu findet man bei HowtoForge.

Sieve-Regeln für Spam-Ordner aktualisieren

Je nach dem, wie lange man ISPConfig schon nutzt, kann es nötig sein, die Option zum Verschieben von Spam in den Spam-Ordner bei allen Postfächern einmal aus- und wieder einzuschalten (jeweils danach speichern), damit die Sieve-Regeln für Dovecot aktualisiert werden und als Spam gekennzeichnete E-Mails zuverlässig im Spam-Ordner landen. Aktuelle Versionen von ISPConfg erzeugen dann Regeln, die sowohl bei SpamAssassin wie auch rspamd funktionieren.

Grundsätzlich kann man rspamd auch so konfiguriereren, dass es für Spam-Kennzeichnungen den selben Header setzt, wie SpamAssassin – ich bevorzuge es allerdings, so wenig wie möglich gegenüber der Standardkonfiguration anzupassen.

DKIM

ISPConfig unterstützt auch die Nutzung von DKIM für ausgehende E-Mails in den Einstellungen der jeweiligen Mail-Domain. Damit das auch mit rspamd zuverlässig funktioniert, waren bei mir aber noch ein paar manuelle Anpassungen nötig.

Der Pfad für die DKIM-Schlüssel muss in der Server-Konfiguration (System → Server Config → Mail) auf /var/lib/rspamd/dkim gesetzt werden. Man sollte auch die Schlüsselstärke von 1024 auf 2048 Bit erhöhen.

Zusätzlich legt man die Datei /etc/rspamd/local.d/dkim_signing.conf mit folgendem Inhalt an:

try_fallback = false;
path_map = "/etc/rspamd/local.d/dkim_domains.map";
selector_map "/etc/rspamd/local.d/dkim_selectors.map";

Damit diese Änderungen wirksam ist, muss man rspamd einmal neu starten:

systemctl restart rspamd

Damit wird sichergestellt, dass rspamd die DKIM-Schlüssel laden kann, die korrekten Selektoren nutzt und nur für E-Mails Signaturen erzeugt, für deren Absender-Domains DKIM in ISPConfig aktiviert wurde.

Danach kann man für jede Mail-Domain, für die man DKIM nutzen will, ein Schlüsselpaar erzeugen und die Einstellung speichern – zunächst ohne aktiviertes „enable DKIM“!

Der angezeigte TXT-Record mit dem öffentlichen Schlüssel muss im zuständigen Nameserver eingetragen werden. Bevor man DKIM aktiviert, sollte man zunächst sicherstellen, dass der öffentliche DKIM-Schlüssel auch abrufbar ist, z.B. mit https://mxtoolbox.com/dkim.aspx. Das kann abhängig von der eingestellten TTL einige Stunden bis hin zu einem Tag dauern. Vorher sollte man DKIM für den E-Mail-Versand nicht aktivieren!

Wenn der öffentliche DKIM-Schlüssel funktioniert, kann man schließlich DKIM in ISPConfig aktivieren, indem man die Option „enable DKIM“ in der Mail-Domain einschaltet und die Einstellungen speichert. ISPConfig schreibt dann den die Schlüssel der Domain in das Verzeichnis /var/lib/rspamd/dkim und aktualisiert die Domain- und Selector-Map in /etc/rspamd/local.d/dkim_domains.map und /etc/rspamd/local.d/dkim_selectors.map entsprechend.

Ein Test auf korrekte Funktion kann auf einer der folgenden Websites durchgeführt werden:

https://dkimvalidator.com

https://www.appmaildev.com/de/dkim

https://www.mail-tester.com

Für Thunderbird gibt es das AddOn „DKIM Verifier“, das man ebenfalls nutzen kann, wenn man sich zur Überprüfung selbst eine E-Mail schicken will.

Zusätzliche Mail-Header mit Prüfergebnissen einfügen

Es ist hilfreich, wenn man bei E-Mails sehen kann, warum eine E-Mail als Spam eingestuft wurde (X-Spam: Yes im Header) oder auch nicht. Um die Ausgabe der zusätzlichen Header mit detaillierten Prüfergebnissen zu aktivieren, legt man die Datei /etc/rspamd/local.d/milter_headers.conf mit folgendem Inhalt an:

extended_spam_headers = true
skip_local = false
skip_authenticated = true

Im Mail-Header X-Rspamd-Server: fügt rspamd den automatisch ermittelten Namen des Servers ein. Wenn gewünscht, kann man den Namen aber auch manuell vorgeben, indem man noch folgenden Abschnitt in die Konfigurationsdatei einträgt:

routines {
  x-rspamd-server {
    hostname = my.host.example
  }
}

Statt my.host.example trägt man hier natürlich den Namen des eigenen Servers ein.

Danach ist auch wieder ein Neustart von rspamd wie oben beschrieben nötig.

Weitere Informationen zur Konfiguration findet man in der Dokumentation von rspamd.

Praktische Erfahrungen nach 6 Monaten

rspamd hat sich als sehr zuverlässige Lösung herausgestellt. Besonders angenehm ist die Tatsache, dass Spam bereits bei der Zustellung aktiv abgelehnt werden kann, was die regelmäßige Kontrolle eines Spamordners erspart.

Falls erwünschte Absender irrtümlich abgelehnt wurden, kann man diese auch in der Whitelist von ISPConfig eintragen. Anpassungen an den Einstellungen und Filterregeln von rspamd sind in der Weboberfläche im laufenden Betrieb möglich, was gegenüber SpamAssassin auch eine Vereinfachung ist.

6 Gedanken zu „Spamfilter und DKIM mit rspamd“

  1. „Spam bereits bei der Zustellung aktiv abgelehnt werden kann, was die regelmäßige Kontrolle eines Spamordners erspart.“

    Und sich dem Risiko von Mahnungen (privat) und Abmahnungen (gewerblich) aussetzt, da die Erreichbarkeit via elektronische Post vertraglich oder gesetzlich (TMG) vereinbart wurde.

    Die Krone sind Arbeitgeber/Auftraggeber, die o.g. System für für ihre Personalstelle verwenden. Natürlich werden die aufgrund ihrer naturgemäßen Aufmachung und gleichartigen Formulierung regelmäßig als Spam missinterpretiert. Soll ich denen nun die Bewerbung – auf deren Kosten – per Post (ausgedruckt und kuvertiert über meinen Büroservice) senden? ^^

    Fazit: es ist generell sinnvoller, alle E-Mails zu empfangen. Sicher sollte man heutzutage Filter verwenden, die potenziellen Spam gleich in das entsprechende Verzeichnis packen, damit das Hauptpostfach übersichtlich bleibt. Aber was spricht dagegen, einmal wöchentlich oder zumindest alle 14 Tage den Spamordner zu prüfen, meist reicht schon ein Blick auf die Absenderadresse und Betreffzeile aus. Damit erspart man sich und anderen unnötigen Ärger (s.O.).

    1. Arno Welzel

      Mahnungen oder Abmahnungen wegen nicht funktionierender E-Mail-Zustellung habe ich noch nie erlebt und ich betreibe rspamd mittlerweile über zwei Jahre. Es kann auch technische Gründe geben, wieso eine E-Mail unzustellbar ist – etwa weil der Server längere Zeit ausfällt.

      Wenn es konkrete Gerichtsurteile gibt, die Spamfilter mit aktiver Ablehnung der E-Mail-Zustellung verbieten, wären Quellen dazu hilfreich.

      1. S
        Siegfried Caccia

        Es geht nicht um ein direktes Verbot, sondern wie bereits beschrieben um das Risiko, (Ab-)Mahnungen (nicht) zu erhalten. Die Rechtsfolgen die dies hat sind offensichtlich. Und Rechtsgrundlage ist wie geschildert bei Privatleuten die vertragliche Vereinbarung (Kontakt und Rechnung per E-Mail) und bei Gewerbetreibenden zusätzlich gesetzliche Regelungen, die diesen Kontaktweg voraussetzen, nach aktueller Rechtsprechung zumindest dann, wenn er angeboten wird (z.B. §5 Abs. 1 Nr. 2 TMG).

        Und nochmal: Was bitte spricht dagegen, einen Spamordner zu nutzen und in regelmäßigen Abständen zu prüfen? Und wenn auch nur eine von hundert Emails brauchbar und wichtig ist, hat es sich schon gelohnt.

        1. Arno Welzel

          Ein Spamordner bedeutet, dass E-Mail in jedem Fall angenommen wird, selbst wenn man sie nicht gleich liest, sondern erst nach 1-2 Wochen zufällig davon Kenntnis nimmt.

          Für die Einhaltung von Fristen kann das schon zu lang sein. Weiterhin besteht die Gefahr, dass man in einem Spamordner wichtige Anschrieben unter hunderten von Spam-Mails schlicht übersieht.

          Damit ist also bezüglich „(Ab)mahnungen rechtzeitig mitbekommen“ nicht viel gewonnen.

          Umgekehrt kann ein Abmahner, der eine E-Mail nicht loswird, weil sie als vermeintlicher Spam vom Server abgelehnt wurde, nicht behaupten, dass er erfolgreich abgemahnt hätte. Er mag vielleicht dann Briefpost bemühen und möglicherweise auch die temporäre Nicht-Erreichbarkeit per E-Mail ebenfalls abmahnen – aber für letzteres hätte ich gerne Belege und nicht nur Vermutungen.

      2. S
        Siegfried Caccia

        Achso, und warum die Nachricht nicht zugestellt wurde, kann man zum Glück wenigstens leicht erkennen, da der Rücklaufgrund entsprechend vermerkt ist:

        Action: failed
        Status: 5.7.1
        Remote-MTA: dns; mailforward.netbeat.de
        Diagnostic-Code: smtp; 550 5.7.1 message content rejected
        X-Rspamd-Server: rspamd
        X-Spam: Yes

        Die Personalstelle wird auf meine Bewerbung verzichten müssen, außer Sie zahlt für den Postversand. Ihr höre schon das Gejaule vom „Fachkräftemangel“ ;-)

        1. Arno Welzel

          Ich würde in diesem Fall auch mal beim eigenen Hoster nachfragen, wieso der eigene Mailserver bei Anderen gesperrt ist. Ja, Mailserver zu betreiben, ist Arbeit, nein, nur weil es einmal funktioniert, bedeutet nicht, dass der Zustand ewig so bleibt. Und ja, ich betreibe selber Mailserver für Andere.

Öffentlichen Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Dies ist kein Kontaktformular! Wenn Du mir eine persönliche Nachricht schreiben möchtest, benutze die E-Mail-Adresse in meinem Impressum.

Du kannst die folgenden HTML-Tags im Kommentar verwenden:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>