Postgrey greylisting fuer postfix: Unterschied zwischen den Versionen

Aus
 
Zeile 10: Zeile 10:
** [http://search.cpan.org/dist/BerkeleyDB/ BerkeleyDB (Perl module)]
** [http://search.cpan.org/dist/BerkeleyDB/ BerkeleyDB (Perl module)]
** [http://www.sleepycat.com/download/db/index.shtml Berkeley DB (Library, version ≥ 4.1)]
** [http://www.sleepycat.com/download/db/index.shtml Berkeley DB (Library, version ≥ 4.1)]
* [http://postgrey.schweikert.ch/pub/postgrey-1.32.tar.gz Postgrey Source]
* [http://http://postgrey.schweikert.ch/pub/postgrey-1.33.tar.gz Postgrey Source]
 
=== Installation ===
=== 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).
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).

Aktuelle Version vom 8. Februar 2011, 22:12 Uhr

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

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,
...