Posted on 18 May 2022

Eine Sache die mich bei der Mailserverkonfiguration immer etwas gestört hat, ist die Vielzahl von Tools die man für einen gut funktionierenden Mailserver ineinanderstecken muss. Klar, postfix allein ist schnell installiert und konfiguriert. Aber wenn man den Server ernsthaft benutzen möchte, sollte man einen Spam- und ggf. Virenscanner haben, eingehende Mails gegen Blacklisten prüfen und obendrein noch Standard wie DKIM, DMARC, ARC und SPF einhalten. Der ein oder andere macht vielleicht auch immer noch Greylisting.

Da kommen dann schnell viele Zusatztools zusammen. Spamassassin und ClamAV kann man mit Amavis integrieren und DKIM geht mit OpenDKIM, dann noch was für ARC und Greylisting (da wüsste ich aus dem Stehgreif nicht mal mehr ein Tool, welches bei Debian mit dabei wäre). Die Configfiles von amavis haben mir noch nie gefallen. Meistens laufen diese Tools dann als eigener Dienst, den man dann auch noch überwachen sollte, sonst geht einem im schlimmsten Fall der Empfang/das Senden von Mails kaputt, im wenig schlimmen Fall fehlen eben die jeweiligen Prüfungen/Merkmale und das sieht man oft erst einmal gar nicht. Viel Aufwand für Verfahren die eigentlich zum Standard für heutige Mailserver gelten.

rspamd verspricht es besser zu machen.

Zunächst ist an rspamd einmal recht erfreulich, dass es nur noch einen milter-Eintrag in Postfix braucht und man im Grunde auch nur noch einem Dienst auf die Finger schauen braucht. Auch die Konfigurationsdateien sind sehr einheitlich gehalten. Aber was kann rspamd eigentlich überhaupt alles? Hierzu gibt es auf der rspamd Website einen Überblick über die verfügbaren Module: https://rspamd.com/doc/modules/

Besonders hervorzuheben sind (für mich) die Module: antivirus, arc, dkim, dkim-signing, dmarc, milter_headers, rbl, spamassassin und spf

Um die Module zu aktivieren, kann man entweder die Beispielkonfiguration des Moduls von der rspamd-Webseite kopieren, oder man kopiert einfach die jeweilige Konfigurationsdatei des Moduls aus /etc/rspamd/modules.d/ nach /etc/rspamd/local.d/.

Wählt man die Kopiermethode, sollte man ggf. die includes aus der Kopie entfernen, also z.B. bei dkim.conf die Zeilen:

  .include(try=true,priority=5) "${DBDIR}/dynamic/dkim.conf"
  .include(try=true,priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/dkim.conf"
  .include(try=true,priority=10) "$LOCAL_CONFDIR/override.d/dkim.conf"

Die Zeilen dienen lediglich dazu, die lokalen Anpassungen der Konfigdateien einzulesen und das passiert an dieser Stelle ja bereits.

Aber gehen wir noch einmal einen Schritt zurück und installieren rspamd:

  apt install rspamd redis

Die initiale Grundkonfiguration kann man mit dem folgenden Befehl erledigen:

 rspamadm configwizard

Hier kann man die Verbindung zu redis herstellen, sowie das Kennwort für die rspamd-WebUI festlegen. Nicht viel, aber immerhin.

Im nächsten Schritt sollte der worker-proxy konfiguriert werden. Er stellt die Schnittstelle zwischen rspamd und postfix dar und definiert u.a. die Rückmeldungen, die rspamd an postfix weiterreicht.

# local.d/worker-proxy.inc

milter = yes; # Enable milter mode
timeout = 120s; # Needed for Milter usually
upstream "local" {
  default = yes; # Self-scan upstreams are always default
  self_scan = yes; # Enable self-scan
}
count = 4; # Spawn more processes in self-scan mode
max_retries = 5; # How many times master is queried in case of failure
discard_on_reject = false; # Discard message instead of rejection
quarantine_on_reject = false; # Tell MTA to quarantine rejected messages
spam_header = "X-Spam"; # Use the specific spam header
reject_message = "Spam message rejected"; # Use custom rejection message

bind_socket = "localhost:11332";

Im Anschluss kopiert man die Konfigurationsdateien der gewünschten Module nach local.d. Die Konfigurationsdateien von der rspamd-Website sind in der Regel alle gut kommentiert oder selbsterklärend.

Will man arc und/oder dkim_signing nutzen, benötigt man noch einen DKIM-Key. Diesen kann man mit dem rspamadm dkim_keygen erzeugen. Standardmäßig erwartet rspamd die Keys in /var/lib/rspamd/dkim/$domainname/. Bevor man diesen ausführt, sollte man aber die dkim_signing.conf in folgenden Punkten anpassen:

Die zugehörigen Einträge in der dkim_signing.conf sehen dann wie folgt aus:

# Default path to key, can include '$domain' and '$selector' variables
path = "/var/lib/rspamd/dkim/$domain.$selector.key";

# Default selector to use
selector = "dkim";

Den Wert für $domain zieht sich rspamd anhand des Absenders der Mail. Der $selector ist frei wählbar, hat aber Einfluss auf den im DNS zu hinterlegenden DKIM-Eintrag.

Wenn nun einen DKIM-Key für 21x9.org erzeugen will, geht dies wie folgt:

rspamadm dkim_keygen -d pukiyama-kakuzo.com -s dkim -k /var/lib/rspamd/dkim/21x9.org.dkim.key -b 2048

Der Parameter -s muss auf den Wert des $selectors aus der dkim_signing.conf gesetzt werden. Außerdem wird der Wert Bestandteil des Dateinamen des Keys. Wird der Befehl ausgeführt erzeugt er die .key-Datei und gibt einen Zonefile-Eintrag aus, der so 1:1 in das Zonefile der Domain aufgenommen werden muss.

Sehr wichtig finde ich auch noch das Modul milter_headers, die Konfigurationsdatei kann man auch einfach wieder von modules.d nach local.d kopieren und muss eigentlich (bis auf die include-Einträge) nichts weiter tun. Das Modul sorgt dafür, dass die Dinge die rspamd tut, in den Header der Mail geschrieben werden. Gerade während der Einrichtung ist das sehr hilfreich.

Hat man alle gewünschten Module konfiguriert startet man rspamd mit dem Befehl: systemctl start rspamd

Abschließend muss rspamd natürlich noch mit postfix verheiratet werden, hierzu fügt man die folgenden Zeilen in /etc/postfix/main.cf ein:

# Milter setup
smtpd_milters = inet:localhost:11332
non_smtpd_milters = $smtpd_milters
milter_default_action = tempfail
milter_protocol = 6
milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}

Ein postfix reload und fertig.