PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verständnisfrage Postfix: master.cf



TheGrudge
14.02.07, 10:31
Hallo,

ich habe mal eine Verständnisfrage zu Postfix. Ich beschäftige mich seit 2 Wochen intensiver mit unserem Mailsystem, da wir von SpamAssassin auf ASSP wechseln wollen. Das Mailrelay hat damals eine Firma installiert, mit der wir dummerweise keinen Support mehr haben, irgendwie wurde vergessen das dieser Server doch noch sehr wichtig ist.
;-)

Da ich vorher noch nie was mit Postfix zu tun hatte, habe ich mir ein Buch geholt (O'Reilly - Postfix) und das Internet durchforstet, um herauszufinden, wie dieser MTA eigentlich funktioniert. Ich habe das Meiste eigentlich verstanden, nur eine Datei macht mir seit knapp 2 Wochen Kopfzerbrechen und ich komme einfach auf eine gescheite Antwort: master.cf

Wir haben hier als Anti-Viren-Paket den Trendmicro IMSS laufen, der eingehende Mails auf Viren überprüft. Das Spam-Modul vom IMSS haben wir nicht mit gekauft, da es uns zu teuer waren. Also wurde für Spambekämpfung der SpamAssassin dazu geschaltet.

Dies sieht dann folgendermaßen aus:
Mail kommt rein -> Postfix(25) -> IMSS(10025) -> Postfix(10026) -> SpamAssassin(Procmail) -> Mail geht raus an Exchange

An sich verstehe ich das auch und im Grunde wird mir auch klar wie dies in Postfix umgesetzt wurde, aber ich habe noch ein Verständnisproblem beim Einbinden von Procmail.

Hier erstmal eine Auflistung der wichtigsten Einstellungen in der Postfix-Konfiguration.

main.cf:

#IMSS: increase process limit from 50
default_process_limit=200
imss_timeout=10m
imss_connect_timeout=1s

#IMSS: content filter interface thru transport "imss"
content_filter=imss:localhost:10025
imss_destination_recipient_limit=200
imss_destination_concurrency_limit=20


master.cf:


smtp inet n - y - - smtpd
-o content_filter=procmail:filter

smtp unix - - n - - smtp
-o content_filter=procmail:filter

procmail unix - n n - - pipe
flags=R user=nobody argv=/usr/bin/procmail -t -m /etc/procmailrc ${sender} ${recipient}


#IMSS:content filter smtp transport .imss. for IMSS
imss unix - - n - - smtp
-o disable_dns_lookups=yes
-o smtp_connect_timeout=$imss_connect_timeout
-o smtp_data_done_timeout=$imss_timeout

#IMSS: content filter loop back smtpd
localhost:10026 inet n - n - 20 smtpd
-o content_filter=
-o local_recipient_maps=
-o mynetworks=127.0.0.0/8
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,rej ect
-o smtpd_timeout=$imss_timeout
-o myhostname=mailrelay.xxx.de


procmailrc:


:0fw
| /usr/bin/spamc

# Now mail is tagged by spamassassin
# You may insert other rules here
:0:
* ^X-Spam-Status: Yes
! spam@xxx.de

:0
| /usr/sbin/sendmail -i -f "$SENDER" -- "$@"


Diese Konfiguration funktioniert, obwohl ich nicht ganz verstehe warum. Ich habe dann mal versucht es nach meinem Verständnis von Postfix einzurichten, aber das Resultat war das die Mails in einer Schleife gefangen waren:

master.cf:


smtp inet n - y - - smtpd
smtp unix - - n - - smtp

#IMSS: content filter loop back smtpd
localhost:10026 inet n - n - 20 smtpd
-o content_filter=procmail:filter
-o local_recipient_maps=
-o mynetworks=127.0.0.0/8
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,rej ect
-o smtpd_timeout=$imss_timeout
-o myhostname=mailrelay.xxx.de


Wie gesagt kein Erfolg, obwohl ich wirklich nicht verstehe warum, denn ich sage doch in dieser Konfiguration das der smtpd auf 10026 procmail ausführen soll, sobald eine Mail bei ihm ankommt. Klingt für mich sehr logisch.

Dann folgendes geändert:

master.cf:


smtp inet n - y - - smtpd
-o content_filter=
smtp unix - - n - - smtp
-o content_filter=

#IMSS: content filter loop back smtpd
localhost:10026 inet n - n - 20 smtpd
-o content_filter=procmail:filter
-o local_recipient_maps=
-o mynetworks=127.0.0.0/8
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,rej ect
-o smtpd_timeout=$imss_timeout
-o myhostname=mailrelay.xxx.de


Nun wird es nicht mehr durch den Virenscanner und SpamAssassin geleitet. Komisch.

Danach habe ich die Konfiguration folgendermaßen angepasst:

main.cf:


#IMSS: content filter interface thru transport "imss"
#content_filter=imss:localhost:10025
imss_destination_recipient_limit=200
imss_destination_concurrency_limit=20


master.cf:


smtp inet n - y - - smtpd
-o content_filter=imss:localhost:10025
smtp unix - - n - - smtp
-o content_filter=imss:localhost:10025

#IMSS: content filter loop back smtpd
localhost:10026 inet n - n - 20 smtpd
-o content_filter=procmail:filter
-o local_recipient_maps=
-o mynetworks=127.0.0.0/8
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,rej ect
-o smtpd_timeout=$imss_timeout
-o myhostname=mailrelay.xxx.de


Nun funktioniert es anscheinden auch wieder, jedenfalls werden die Spam-Header-Tags gesetzt. Ob der Virenfilter anspringt weiß ich aber nicht, müsste ich nochmal testen. Irgendwie verstehe ich einfach nicht wie diese Dienste zusammenarbeiten.

Wenn ich einen content_filter in der main.cf definiere, gilt das ja für jede einkommende Mail, also auch lokal erzeugte. Warum muss ich dann, wie in der funktionierenden Konfiguration geschehen, dem smtpd an Port 25 den Procmailfilter zuweisen? Ich denke dieser Port wird gar nicht mehr angesteuert?
Wo schickt denn der smtpd an Port 10026 die Mail hin? Ich dachte die landet in der queue und von dort aus wird sie an den Exchange weitergeleitet. Ich versehe echt nur noch Bahnhof.

Roger Wilco
14.02.07, 17:20
Ich habe das Meiste eigentlich verstanden, nur eine Datei macht mir seit knapp 2 Wochen Kopfzerbrechen und ich komme einfach auf eine gescheite Antwort: master.cf
Schon master(5) (http://www.postfix.org/master.5.html) gelesen?


Diese Konfiguration funktioniert, obwohl ich nicht ganz verstehe warum.
Was verstehst du daran nicht? Der smtpd nimmt die Mails auf Port 25 entgegen, liefert die Mail wegen dem content_filter an 127.0.0.1:10025 (IMSS). Der Überprüft die Mail und liefert das Ergebnis an eine andere smtpd-Instanz auf 127.0.0.1:10026. Diese wiederrum verschickt die Mails dann über den eingetragenen Relayhost.


Wie gesagt kein Erfolg, obwohl ich wirklich nicht verstehe warum, denn ich sage doch in dieser Konfiguration das der smtpd auf 10026 procmail ausführen soll, sobald eine Mail bei ihm ankommt.
Weil du mit deinem Procmail-Rezept die Mail wieder bei dem smtpd auf Port 25 einkippst, der ersten Station. Damit geht das ganze Spiel (smtpd -> IMSS -> smtpd 2 -> procmail -> smtpd -> IMSS -> ...) immer wieder von vorne los.


Nun wird es nicht mehr durch den Virenscanner und SpamAssassin geleitet. Komisch.
Nein, genau richtig. Du hast die content_filter nämlich rausgeworfen. Die Mail wird dadurch gleich über den ersten smtpd (auf Port 25) verschickt. Allerdings nicht über einen Relayhost.


Danach habe ich die Konfiguration folgendermaßen angepasst:
Was hat die content_filter Direktive denn bei "smtp" (nicht smtpd) zu suchen?


Wenn ich einen content_filter in der main.cf definiere, gilt das ja für jede einkommende Mail, also auch lokal erzeugte.

[QUOTE=TheGrudge;1499537]Warum muss ich dann, wie in der funktionierenden Konfiguration geschehen, dem smtpd an Port 25 den Procmailfilter zuweisen?
Siehe http://www.postfix.org/FILTER_README.html


Ich denke dieser Port wird gar nicht mehr angesteuert?
Doch, beim Einliefern der E-Mail.


Wo schickt denn der smtpd an Port 10026 die Mail hin?
Über den Relayhost an die entsprechende Empfängeradresse.