Rspamd als content_filter in Postfix nutzen

Rspamd ist ein moderner Spam- und Virenscanner für Linux-Server. Er kann in beliebige MTAs integriert werden. Seit der Version 1.6 lässt sich dabei die Software direkt als Milter andocken. Während dies für eingehende E-Mails sehr unproblematisch ist, weil die Verarbeitung der E-Mail ohne Wissen des Empfängers geschieht, sieht das in Senderichtung leider anders aus.

Anhand von Postfix zeige ich Ihnen, wie sie dennoch den Dienst transparent in Postfix integrieren können. Postfix kennt dafür den Parameter content_filter. Diese Option erwartet einen SMTP-Service. Da Rspamd leider von Haus aus keinen solchen Dienst als Schnittstelle anbietet, greife ich zu einem kleinen Kunsttrick.

In der Konfigurationsdatei master.cf wird dazu einfach ein weiterer Listener erstellt, der über die Milter (es können auch andere Dienste auf diese Weise ausgetrickst werden) kommuniziert. Dieser spezielle Listener wird dann als Parameter an content_filter übergeben.

Vorteil

Sobald ein Anwender seine E-Mail verschickt, wird diese direkt angenommen und es entsteht keine Wartezeit. Selbst wenn es zu Problemen mit der versendeten E-Mail käme, wären die Absender vertraulich und bekannt und die E-Mail kann stressfrei gebounct werden.

Die E-Mail wird dann intern über den zweiten Listener von den Miltern verarbeitet.

Nachteil

Die Milter sehen leider nicht mehr die Original-IP-Adresse des Absenders. Es muss also in Rspamd und anderen Miltern gewährleistet sein, dass die Absender-IP des Submission-Servers als vertraut und local bekannt ist. Daher fallen dann überflüssige Prüfungen wie SPF, DKIM und DMARC weg. Der Nachteil ist also nicht wirklich vorhanden.

Die Konfiguration

Folgender exemplarischer Block kann in der Datei /etc/postfix/master.cf ergänzt werden:

# Content filter
[::1]:2525
          inet  n       -       n       -       -       smtpd
    -o syslog_name=postfix/content-filter
    -o mynetworks=HIER die Liste der IPs Ihrer Submission-Server
    -o content_filter=
    -o smtpd_milters=${rspamd}
    -o smtpd_tls_security_level=none
    -o smtpd_client_restrictions=
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o smtpd_relay_restrictions=permit_mynetworks,reject
    -o smtpd_authorized_xforward_hosts=${mynetworks}

In der Datei /etc/postfix/main.cf werden folgende Einstellungen ergänzend empfohlen:

rspamd = {
    inet:[::1]:11332,
    connect_timeout=5s,
    default_action=accept
    }

content_filter = smtp:[::1]:2525

Auch Rspamd benötigt nun Informationen zu Ihren Server-IPs. Passen Sie dazu die Datei /etc/rspamd/local.d/options.inc an und setzen Sie den Parameter local_addrs korrekt:

local_addrs = "192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, fd00::/8, 169.254.0.0/16, fe80::/10, Hier die Liste Ihrer vertrauten Server in CIDR-Notation";

Stoppen und starten Sie anschließend Ihren Postfix- und Rspamd-Dienst neu.

[ratings]