rspamd mit postfix
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.