Rspamd logging optimiert für rsyslog

Sicher gefällt nicht jedem das Logging in Rspamd. Standardmäßig wird alles in eine Datei in /var/log/rspamd.log geschrieben. Dabei ist Rspamd im Normalfall recht geschwätzig. Ich habe daher das Logging auf syslog geändert und splitte die Informationen auf zwei verschiedene Dateien. In eine zentrale mail.log-Datei schreibe ich nur noch das Resultat einer Spamprüfung hinein. Im Wesentlichen sehe ich so recht schnell, welchen Score die Nachricht erreicht hat, welche Symbole mit welchen Teilpunkten erkannt wurden, etc.

Das Logformat selbst habe ich vorerst nicht geändert.

Alle restlichen Logmeldungen von Rspamd bleiben in der o.g. Standarddatei. Man könnte dies natürlich nach belieben auch komplett abschalten, wenn man in rsyslog dann einfach eine „stop“-Regel setzt. Das bleibt dem Leser dann als Übung überlassen.

Für Rspamd ist folgende Dateien anzulegen:

/etc/rspamd/override.d/logging.inc

type = "syslog";
facility = "local1";

Hier wird der Type von „file“ (Default) auf „syslog“ geändert. Ich entscheide mich absichtlich für die Facility local1, damit ich frei in den Meldungen von Rspamd filtern kann. Sonst würde die Standardkonfiguration von rsyslog automatisch alle Meldungen nach mail.log protokollieren.

Für rsyslog selbst erstelle ich eine Datei unter /etc/rsyslog.d/90-rns-filters.conf. Die Datei könnte  von Distribution zu Distribution anders lauten.

Generell schreibe ich alle Mail-Meldungen in einem Unterordner in eine zentrale Datei mail.log. Das ist historisch entstanden, als noch Dinge wie Datenvorratshaltung drohten. Heute finde ich es einfach sehr praktisch. Des weiteren lasse ich Dovecot in eine extra Datei schreiben, da ich in der Datei mail.log wirklich nur die Informationen sehen will, die mit dem SMTP und LMTP-Transport zu tun haben. Wem das zu viel ist, der kann die Teile im Beispiel unten entfernen.

Hier die Anpassungen an rsyslog.

/etc/rsyslog.d/90-rns-filter.conf

:programname, isequal, "dovecot" {
        action(
                type="omfile"
                File="/var/log/mail/dovecot.log"
                FileOwner="root"
                FileGroup="adm"
        )
        stop
}

# Filter some Rspamd messages
if $programname == "rspamd" then {

        # Only log the result to mail.log
        if $msg contains "proxy; rspamd_task_write_log" then {
                action(
                        type="omfile"
                        File="/var/log/mail/mail.log"
                        FileOwner="root"
                        FileGroup="adm"
                )
                stop
        }

        # Anything else goes here
        else {
                action(
                        type="omfile"
                        File="/var/log/rspamd/rspamd.log"
                        FileOwner="rspamd"
                        FileGroup="rspamd"
                )
        }
}

mail.warn action(
        type="omfile"
        File="/var/log/mail/mail.warn.log"
        FileOwner="root"
        FileGroup="adm"
)

mail.info action(
        type="omfile"
        File="/var/log/mail/mail.log"
        FileOwner="root"
        FileGroup="adm"
)

Das Logging ähnelt so etwas dem bekannten Amavisd-Logging. Wer das Format noch anpassen möchte, kann in der zu erstellenden Datei /etc/rspamd/local.d/logging.inc Anpassungen vornehmen. Interessant ist hier vielleicht die Variable symbols_scores_params. Dazu verweise ich den Leser auf die offizielle Dokumentation unter https://rspamd.com/doc/configuration/logging.html

Viel Spaß.

[ratings]