Schlagwort-Archive: postfix

Postfix Header anonymisieren

Wird ein eigener Mailserver betrieben, ob in der Firma oder für eine Arbeitsgruppe, fügt dieser Received: Header dem Kopf der E-Mail hinzu. Diese Header können im Falle eines Penetrationstests oder eines nicht erlaubten Angriffs genutzt werden, um Informationen über das interne Netzwerk oder den Standard eines Absender zu erhalten. Auch der User-Agent: Header wird übertragen, der vom Mailclient hinzugefügt wird.

Da viele E-Mail Clients diese Information nicht anzeigen, hier ein Auszug aus dem Kopf einer E-Mail.


Received: from [172.16.xxx.xxx] (b2b-46-252-xxx-xxx.unitymedia.biz [46.252.xxx.xxx])
(Authenticated sender: josen)
by outpost.paketsequenz.de (Postfix) with ESMTPSA id 8AED91032364B;
Wed, 13 Jun 2012 16:36:27 +0200 (CEST)
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120615 Thunderbird/13.0.1

Wünschenswert ist es, dass diese Informationen anonymisiert werden. Dafür bietet Postfix die header_checks Variable in der Konfigurationsdatei main.cf an. Das Hinzufügen von Kopfzeilen-Regeln lässt sich durch Hinzufügen einer weiteren Zeile in der main.conf bewerkstelligen, die wie folgt aussieht.

header_checks = pcre:/etc/postfix/header_checks

In der angegebenen Datei können jetzt in diesem Format einfache Aktionen definiert werden. Um die Header Received und User-Agent kommplett zu entfernen reichen die folgenden Zeilen.

/^Received:/ IGNORE
/^User-Agent:/ IGNORE

Diese Lösung funktioniert, ist aber nicht elegant. Zum einen müssen Mailserver nach RFC5321 einen Received Header hinzufügen, und zum anderen werden so bearbeitete E-Mail sofort als Spam enttarnt. Wünschenswert ist eine Anonymisierung des Received Headers, ohne das RFC zu verletzen und ohne als Spam klassifiziert zu werden. Ein Received Header wie der folgende erfüllt diese Anforderungen.

Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: josen) with ESMTPSA id 23DC81017E64E

Und so gehts:

Die folgenden Zeilen in die Datei header_checks einfügen.

/^Received: from \[.*?\] \([\w-.]* \[.*?\]\)\s+\(Authenticated sender: (\w+)\)\s+by outpost.paketsequenz.de \(Postfix\) with (E?SMTPS?A?) id ([A-F\d]+);.*?/
        REPLACE Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: $1) by outpost.pakesequenz.de with $2 id $3
/^User-Agent:/ IGNORE

Zusätzlich muss ein Eintrag in der Postfix main.cf hinzugefügt werden, der wie folgt lautet.

smtpd_sasl_authenticated_header = yes

Mailscanner running with -T switch und Lock.pm

Wird das Debian Squeeze MailScanner Paket mit postfix eingesetzt, tut sich erstmal nichts.

Problem

root@outpost:~# MailScanner --debug
# [...] Gekürzt [...]
Insecure dependency in open while running with -T switch at /usr/share/MailScanner//MailScanner/Lock.pm line 358.

Das Ergebnis ist, dass MailScanner nicht startet. Schaut man sich die an Zeile 347 beginnende Funktion openlock() an, wird schnell klar, worum es geht: File Locking. Und der Fehler ist eigentlich keiner, sondern ein Feature. Leider ein Feature von perl, dass in MailScanner nicht vollständig umgesetzt wird. Einige Module von MailScanner werden im Perl Taint Mode ausgeführt, bei dem keiner Eingabe vertraut wird.

Dabei muss jede Eingabe vom Programmierer als zulässig bestätigt werden, was für die Postfix Anbindung anscheinend noch nicht geschehen ist. Der Thread auf der MailScanner Mailinglist zu diesem Thema (einer von vielen) bestätigt das.

Workaround

Man verändert das Hauptskript unter /usr/sbin/MailScanner und ergänzt am Ende des Shebang ein großes -U. Damit wird Eingaben wieder vertraut.

#!/usr/bin/perl -I/usr/share/MailScanner/ -U