[Postfixbuch-users] FILTER_README.html
Michael Will
micha.will at gmx.net
Sa Apr 23 09:11:16 CEST 2011
Hallo,
erstmal Danke für die ausführliche Antwort!
> > Im ersten Beispiel war das ein Shellskript. Kommt hier
> > nun dann das weiter oben genannten "PERL/SMTP content
> > filtering framework" zum Einsatz?
>
> Oder eben Dein eigener (selbstimplementierter) Filter.
>
> Gemäß http://www.postfix.org/spawn.8.html darfst Du Dir Spawn wie inet.d
> vorstellen.
> D.h. er lauscht auf einem Port. Wird auf diesem Port eine Verbidnung
> aufgebaut, dann startet Spawn das per Argument angegebene Script und
> übergibt diesem dann die Verbindung die auf dem Port aufgebaut wurde.
> (Wenn ich mich nicht ganz täusche dann entspricht STDIN und STDOUT dann
> der Empfangs- bzw. Senderichtung auf dem Port.)
Achso! D.h. das aufgerufene Programm muss nur mit stdin und stdout
umgehen können. Ok, dann könnte man ja doch wieder Shellskripting
verwenden.
Merkwürdig aber, dass dann der Autor des Dokumentes auf das Perl
Skript von Bennett Todd verweist.
> Die einfachste Implementierung eines Filter ist ein SMTP-Proxy, d.h. die
> komplette eingehende SMTP-Kommunikation wird einfach ausgehend
> weiterverwendet.
> Bei SMTP wird die Übertragung einer Mail mit einem einzelnen Punkt,
> (".") der zwischen zwei Zeilenumbrüchen (<CR><LF>) steht, abgeschlossen
> Also "<CR><LF>.<CR><LF>".
ok, das mit dem Punkt kannte ich schon. Aber offenbar war mein
Englisch hier zu schlecht, das richtig zuzuordnen.
> Der beschriebene "einfachste Filter" würde nun, wenn er auf dem
> eingehenden Socket "<CR><LF>.<CR><LF>" empfängt seine Prüfungen des
> Mail-Contents durchführen und im Ablehnungsfall einen SMTP-Code 5xx
> senden um dem einliefernden Client mitzuteilen, dass er die Mail nicht
> annehmen will.
> (Denkbar wäre in bestimmten Szenarien (i.d.R. allerdings nur, wenn aus
> technischen Gründen aktuell keine Überprüfung der Mail durchgeführt
> werden kann) auch ein 4xx-Code um anzuzeigen, dass ein späterer
> Zustellversuch eventuell angenommen werden könnte.)
ok, verstanden.
> Würde stattdessen die Mail angenommen werden, dann würde auf dem
> eingehenden Socket ein 2xx-Code gesendet und die (eingehende)
> SMTP-Kommunikation des eingehenden Sockets 1:1 ausgehend auf dem
> ausgehenden Socket an den "Next Hop" gesendet.
>
> Sinnvollerweise geschieht die Weitergabe der eingehenden
> SMTP-Kommunikation auf den ausgehenden Socket blockweise 1:1 um eine
> eventuelle Ablehnung des "Next Hop" direkt an den einliefernden Client
> weiterzureichen.
> Blockweise bezeichnet damit, dass der HELO, MAIL FROM, RCPT TO und der
> Content der Mail (DATA) jeweils erst an den Next Hop weitergegeben
> werden und dessen Antwort dann vom Filter an den einliefernden Client,
> so dass sich Filter wirklich transparent verhält.
>
> Als einfachster Filter wird dieses Konzept deshalb bezeichnet, da auch
> in den früheren Stadien der SMTP-Kommunikation bereits eine Ablehnung
> durch den Filter stattfinden könnte (also nach HELO/EHLO, MAIL FROM oder
> RCPT TO).
>
> Das Ganze funktioniert natürlich auch bei ESMTP.
>
> Jetzt alles klar?
Jo, ich glaube schon.
Das empfohlene Perl-Skript von Bennett Todd habe ich getestet, allerdings
kann es nur mit CR/LF umgehen, d.h. zum Testen mittels netcat muss man
CTRL-V und Enter eingeben. Diese Stolperfalle hat auch nochmal ordentlich
Zeit gefressen.
Vielen Dank
Micha
Mehr Informationen über die Mailingliste Postfixbuch-users