Postfwd firewall fuer postfix
Postfwd - Postfix Firewall Daemon
Postfwd - Postfix Firewall Daemon - ist ein Policy Server, der wie eine Firewall für den Postfix Prozess agieren kann.
Voraussetzungen
- Zugang auf die DS als root via telnet oder ssh
- Umgang mit einem Konsoleneditor wie z.B. vi oder nano (via ipkg)
- Perl installiert (ich habe es mit der ipkg Version gemacht, weiss aber nicht ob die Default Version auch funktionieren würde)
- postfwd.pl
- Perl Module:
- Net::Server::Multiplex
- Net::DNS
Diese Module sollte es in ipkg geben und sonst kann man sie von cpan direkt laden
perl -MCPAN -e shell install <Module>
Installation
Wenn die benötigten Module vorhanden sind, dann kann man einfach das Perlscript runterladen und in einem beliebigen Verzeichnis auf der DS speichern. Zusätzlich zum Perlscript muss eine Config Datei erstellt werden (beliebiger Name und Verzeichnis, der Einfachheit halber am besten postfwd.cf im gleichen Verzeichnis wie das Perlscript)
Beim Perlscript muss man ggf den Pfad zum Perl Interpreter noch anpassen v.a. wenn man die ipkg Version von Perl verwendet (erste Zeile im Perlscript)
Damit ist die Installation auch schon abgeschlossen
Konfiguration
Damit postfwd überhaupt weiss was zu tun ist, müssen im Config File Regeln und Aktionen definiert sein. Die Regeln und Aktionen in postfwd sind ein sehr sehr umfangreiches Thema. Es hat jedoch in der Doc einige Beispiele. (z.B. [1] und [2])
Grundsätzlich ist eine Regel so aufgebaut
id=RULE-02 ; sender==$$recipient ; action=REJECT not allowed
id ist eine beliebige Zeichenfolge. Sollte jedoch im Config File eindeutig sein. Danach folgt die Bedingung (hier Senderadresse gleich Empfängeradresse) und danach die durchzuführende Aktion.
Dabei ist wichtig zu verstehen, dass nicht postfwd die Email verwirft, sondern die Aktion an Postfix zurückmeldet und dieser dann die Email ablehnt. Bei action= kann also alles übergeben werden, was Postfix an Aktionen kennt (z.B. DEFER, OK, REJECT oder auch nummerische Fehlercodes z.B. 550 oder 450 oder auch eine selber definierte Postfix Aktion, dazu mehr beim Beitrag zu Postgrey).
Starten
Damit postfwd losrennen kann muss er auch gestartet werden. Das geht mit folgendem Befehl relativ einfach
/path/to/postfwd -d -f /path/to/postfwd.cf
Per default startet postfwd unter dem User nobody und lauscht auf Port 10040. Ob alles geklappt hat könnt ihr z.B. so prüfen
netstat -an | grep 10040
Intergration in Postfix
Damit der Postfix Server diesen Daemon auch verwenden kann muss man Postfix in dessen Konfig noch beibringen, diesen zu verwenden. Das geschieht in der main.cf unter dem Parameter smtpd_recipient_restrictions z.B.
smtpd_recipient_restrictions = ... , check_policy_service = inet:127.0.0.1:10040, ...
Nach einem Reload des Postfix sollte der policy service in die Mailzustellung integriert sein
Falls in der Postfix Konfiguration bereits greylist eingebunden wurde, muss dieser in eine eigene Regel ausgelagert werden, da es nur eine Einstellung für check_policy_service geben kann, die letzte Zuweisung würde die vorige(n) überschreiben. Daher legt man für postgrey dann eine eigene Regel an:
... smtpd_restriction_classes = greylist greylist = check_policy_service inet:127.0.0.1:60000 ...