Mailserver mit Spamfilter

Seite 5: Kaskade

Inhaltsverzeichnis

SpamAssassin lässt sich wie Amavis als Content-Filter in Postfix einschleifen. Als Mechanismus dafür hat sich das Weiterreichen der Mails zwischen Postfix und Filter (und zurück) via TCP/IP bewährt (siehe Grafik). Der Vorteil: Anders als bei der Content-Filterung über lokale Interprozess- kommunikation (IPC) dürfen Mail-Relay, Virenscanner und Spam-Blocker auf unterschiedlichen Rechnern laufen. Das ist praktisch, um die von der Filter-Kaskade beanspruchte Rechenleistung auf mehrere Maschinen zu verteilen, denn die Spam-Analyse kann selbst für nur wenige KByte große Mails durchaus mal 10 bis 15 Sekunden dauern. Den Löwenanteil machen dabei Anfragen an den Razor-Server aus.

Leider versteht sich SpamAssassin nur auf den Datentransport über Pipes sowie Ein- und Ausgabeumleitungen, aber nicht auf die Kommunikation per TCP-Socket. Als Lösung für dieses Problem bietet sich der SpamAssassin Proxy Daemon (spampd) an, der ständig im Hintergrund läuft, über einen Socket Mails empfängt, diese mit Hilfe der SpamAssassin-Bibliothek prüft und das Resultat über eine neue TCP/IP-Verbindung an Postfix zurücksendet.

Das spampd-Perl-Skript laden Sie einfach unter [12] herunter und speichern es zum Beispiel ins Verzeichnis /usr/bin. Der Befehl

chmod a+x /usr/bin/spampd

kennzeichnet es als ausführbar. Sie können auch ein anderes Verzeichnis wählen, wenn Sie sicherstellen, dass es sich im Systempfad (Umgebungsvariable PATH) befindet.

Damit der SpamAssassin Proxy Daemon bei jedem Booten automatisch gestartet wird, legen Sie das Boot-Skript spampd.rc aus dem Listing-Archiv zu diesem Artikel im Verzeichnis /etc/init.d ab und benennen es danach in spampd um. Anschließend aktivieren Sie es im Runlevel-Editor von Yast.

Das Boot-Skript liest die Kommandozeilenparameter für den Spam-Filter aus der Datei /etc/sysconfig/spampd. Da diese Datei noch nicht vorhanden ist, müssen Sie sie als root neu anlegen. Sie enthält nur eine Zeile:

SPAMPD_OPTIONS="--port=10026 --relayhost=127.0.0.1:10027 --tagall"

Mit diesen Optionen lauscht spampd an Port 10026 auf eingehende Mails und leitet sie nach erfolgter Spam-Analyse an Port 10027 des lokalen Rechners weiter – an Postfix. Der Parameter --tagall bewirkt, dass sämtliche Mails mit einem X-Spam-Level-Header versehen werden und nicht nur die, die einen Spam-Level erzielt haben, der den Wert des Parameters required_score (normalerweise 5) in der SpamAssassin-Konfigurationsdatei /etc/mail/spamassassin/local.cf übersteigt.

Weil der Virenscanner nach dem gleichen Prinzip wie der Spam-Blocker auf Port 10024 Mails empfängt und über den Port 10025 an Postfix weiterleitet, ergeben sich die folgenden Einstellungen in der Postfix-Konfigurationsdatei /etc/postfix/master.cf:

smtp inet n - n - 2 smtpd -o content_filter=smtp:[127.0.0.1]:10024
localhost:10025 inet n - y - - smtpd -o content_filter=smtp:[127.0.0.1]:10026
localhost:10027 inet n - n - - smtpd -o content_filter=

Die erste Zeile ist bereits vorgegeben, die zweite, weiter unten in der Konfigurationsdatei zu findende Zeile ist um die Angabe des auf dem lokalen Rechner (127.0.0.1) auf Port 10026 hörenden Content-Filters zu ergänzen, die dritte Zeile an beliebiger Stelle in der Datei hinzuzufügen.

Besonders kritische Zeitgenossen werden an dieser Stelle einwenden, dass eine auf Port 25 bei Postfix eingehende Mail nach der Prozedur dreimal in der Queue steht. Dem ist aber nicht so, weil der Postfix-Queue-Manager Duplikate automatisch verwirft und stets nur die neueste Version einer Mail übrig bleibt.

Bevor Sie den Mail-Server neustarten, sollten Sie einen Blick in die Log-Datei /var/log/messages werfen. Wenn Sie dort Einträge wie "May 31 09:06:16 homeserver kernel: audit (1149059176.208:4): REJECTING w access to /var/spool/postfix/pid/inet.local host: 10025 (smtpd ..." finden, sind noch weitere Konfigurationen nötig, die mit AppArmor, Novells Software-Paket zur Zugriffskontrolle zusammenhängen. Man kann in AppArmor Regelwerke, so genannte Profile, für Programme erstellen. Die Regeln legen fest, welche Rechte die Anwendung hat, beispielsweise auf welchem Netzwerkport sie lauscht, auf welche Dateien sie zugreifen darf und so weiter. Postfix bildet keine Ausnahme: Wenn der Mailer auf einem weiteren TCP-Port als dem Standard-Port 25 lauschen soll  in diesem Fall der Socket 127.0.0.1:10025 – möchte er beim Start eine leere Datei mit dem Namen "inet.localhost:10025" im Verzeichnis /var/spool/postfix/pid anlegen. Und genau das schlägt fehl, wenn OpenSuse beim Booten AppArmor über das Skript /etc/init.d/boot.apparmor gestartet hat.

Abhilfe schaffen eine Reihe von Änderungen in den unter /etc/apparmor.d zu findenden Konfigurationsdateien. Der Einfachheit halber haben wir alle betroffenen Dateien in einer gezippten tar-Datei zusammengefasst (Download via [12] ), die Sie als root im Hauptverzeichnis des Mail-Servers entpacken:

tar -xzvf apparmor-config.tar.gz

Nach dem Neustart von Mail-Server und AppArmor als root mit

/etc/init.d/postfix restart
/etc/init.d/boot.apparmor restart

schließen Sie die Inbetriebnahme des Viren und Spam filternden Mail-Gateways ab.