Postgrey greylisting fuer postfix
Greylist mit postgrey
Normalerweise ist bei Postfix bereits eine Greylist Methode implementiert. Diese scheint aber im Umgang mit der Datenbank etwas Probleme zu machen. Deshalb habe ich mich für diese (http://postgrey.schweikert.ch/) Version entschieden.
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 funzen würde)
- Perl Module
- Postgrey Source
Installation
Archiv an beliebigen Platz entpacken. In postgrey den Pfad zur Config und den Pfad (Verzeichnis) für die Datenbank angeben. Die Datenbank selber wird dann von postgrey beim Starten falls nicht vorhanden angelegt. Darum musst der User unter dem postgrey läuft auch Schreibrechte auf dieses Verzeichnis haben (läuft bei mir unter nobody). Auch sollte wieder der Pfad zum Perlinterpreter in postgrey falls nötig angepasst werden.
Konfiguration
postgrey hat in dem Sinne keine Konfig, sondern die Konfig wird beim Starten auf der Kommandozeile mittels Parameter übergeben
Starten
Zum Starten reicht auf der Kommandozeile ein
/path/to/postgrey -d --inet=127.0.0.1:10050 --delay=60 --user=nobody --group=nobody
damit sollte postgrey unter nobody:nobody auf Port 10050 und dem localhost laufen.
Integration in Postfix Prozess
Man könnte versucht sein in der main.cf einfach bei smtpd_recipient_restrictions einen weiteren check_policy_service einzubauen. Das wird aber in die Hose gehen, weil Postfix dann nur den zuletzt angegebenen Service nutzt. Die erste Var wird also von der zweiten Überschrieben. Um das zu umgehen legt man in der main.cf am besten eine eigene Restriction Class an
smtpd_recipient_restrictions = ..., check_policy_service inet:127.0.0.1:10040, ... smtpd_restriction_classes = greylist greylist = check_policy_service inet:127.0.0.1:10050
greylist kann beliebig gewählt werden. Es darf nur nich so heissen wie eine default Action von Postfix (z.B. OK, DEFER oder REJECT)
Danach kann postfwd über action=greylist den Postfix anweisen eine Mail durch den Greylist Service zu schleusen z.B
#postfwd.cf .... id=GREY ; action=greylist
Damit schickt postfwd alle Emails durch den postgrey Service, welcher dann entscheidet ob eine Email verworfen oder akzeptiert wird
Optimierung
So eingestellt wird postgrey bei Absendern Probleme machen, die Einmalempfangsadressen verwenden (wie z.B. viele Mailinglisten). Um das zu umgehen, kann man eine sender_access Datei anlegen
dovecot.org OK postfix.org OK
diese mit postmap behandeln und dann in der main.cf diese Datei VOR dem policy check einbauen. Es ist extrem wichtig, dass ihr sicherstellt, das VOR dem sender_access check und dem policy_check ein reject_unauth_destination steht. Sonst habt ihr ganz schnell einen offenen relay Server produziert
smtpd_recipient_restrictions = ..., reject_unauth_destination, check_sender_access hash:/path/to/sender_access, check_policy_service inet:127.0.0.1:10040, ...