[Postfixbuch-users] Postfix soll nur bestimmte domains auf viren und spam scannen
Daniel
highway-master at gmx.net
Mi Nov 1 13:38:35 CET 2006
Date: Tue, 31 Oct 2006 21:07:44 +0100
From: Patrick Ben Koetter <p at state-of-mind.de>
Subject: Re: [Postfixbuch-users] Postfix soll nur bestimmte domains
auf viren und spam scannen
To: postfixbuch-users at listi.jpberlin.de
Message-ID: <20061031200744.GE25169 at state-of-mind.de>
Content-Type: text/plain; charset=utf-8
* Daniel <Highway-Master at gmx.net>:
> > Hallo zusammen,
> >
> >
> > Ich möchte das Postfix von der "Domainxyz" die mails annimmt aber nicht
> > durch den viren und spam scanner schickt, sondern direkt an einen anderen
> > mailserver weiterleitet.
>
In Transport-Tabelle eintragen.
> > postfix soll aber die "domainabc" durch den viren und spam scanner schicken.
>
2.2 Transport von Postfix zu amavisd-new einrichten
Als erstes gilt es, einen dedizierten Transport einer E-Mail von Postfix zum
amavisd-Daemon hin einzurichten. Der amavisd-Server ist in der Lage, Postfix
sowohl eine SMTP- als auch eine LMTP-Session zur Übermittlung von E-Mail
anzubieten. Postfix kann, entweder mit dem smtp-Client oder dem lmtp-Client,
beide Arten der Übermittlung nutzen. Dieser Abschnitt beschreibt die
notwendigen Konfigurationsschritte für beide Arten.
Note
Postfix benötigt für den Transport zu amavisd-new entweder einen
dedizierten smtp-Service oder einen dedizierten lmtp-Service. Aufgrund der
erweiterten Fähigkeiten des LMTP-Protokolls - es kann bei einer Mail an
mehrere Empfänger, einen Empfänger getrennt von allen anderen Empfängern
über einen Fehler bei der Zustellung unterrichten - ist der Einsatz des
lmtp-Clients vorzuziehen.
2.2.1 Dedizierten lmtp-Client einrichten
Grundsätzlich wäre es möglich, den in /etc/postfix/master.cf bereits
konfigurierten lmtp-, smtp- oder relay-Service zu nutzen. Für den Einsatz mit
amavisd-new müssen jedoch einige, besondere Konfigurationseinstellungen
vorgenommen werden, die für diese global genutzten Clients von Nachteil
hinsichtlich Performance und Skalierbarkeit wären.
So ist es z.B. notwendig, die Anzahl der maximalen, gleichzeitg betriebenden
Prozesse des dedizierten lmtp-Clients auf die maximale Anzahl gestarteter
amavisd-Daemon Kind-Prozesse abzustimmen. Wäre die Anzahl der Postfix
lmtp-Prozesse höher als die der amavisd-Daemon Kind-Prozesse, würde es unter
Last zu einer Abweisung des Postfix lmtp-Clients kommen, weil der
amavisd-Daemon keine weiteren Verbindungen annimmt, und Postfix würde dies als
(temporären) Fehler bei der Zustellung werten.
Fügen Sie deshalb, wie in folgendem Listing beschrieben, in
/etc/postfix/master.cf einen weiteren, dedizierten Service mit dem Namen
amavis hinzu:
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
...
amavis unix - - n - 2 lmtp
-o lmtp_data_done_timeout=1200
-o lmtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
Important
Service-spezifische Optionen werden in master.cf zeilenweise und
eingerückt (leading whitespace) angegeben. Parameter und Werte müssen ohne
Leerzeichen mit einem Ist-Gleich-Zeichen "=" verbunden werden. Mehr dazu
in man 5 master oder master.cf selbst.
[...]
2.3 Dedizierten Postfix SMTP-Server für rückkehrende Nachrichten einrichten
Der zweite Dienst, den es noch einzurichten gilt, schafft einen dedizierten
SMTP-Server, dessen Aufgabe einzig und allein darin besteht, E-Mails, die von
amavisd-new überprüft wurden, anzunehmen und in den Postfix Zustellprozess
zurückzuführen.
Dazu wird eine weitere, dedizierte Instanz des Postfix smtpd-Daemon in
master.cf hinzugefügt. Diese Instanz unterscheidet sich vor allem dadurch,
dass sie den content_filter-Parameter ohne einen Wert setzt und damit
bestehende Delegationen an externe Content Filter aufhebt.
Note
Die Delegation von E-Mails an amavisd-new wird über den
content_filter-Parameter konfiguriert. Fehlt der leere
content_filter-Parameter, wird die aus amavisd-new rückkehrende E-Mail
sofort wieder an amavisd-new delegiert und die E-Mail befindet sich in
einem Endlos-Kreislauf.
Im folgenden Beispiel gehen wir davon aus, dass der dedizierte smtpd-Daemon
auf localhost (127.0.0.1) und Port 10025 auf eingehende Verbindungen warten
soll. In master.cf sieht der Eintrag für den dedizierten smtpd-Daemon dann
folgendermaßen aus:
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
...
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
[...]
3.3 E-Mails pro Empfänger-Domain filtern
Postfix kann E-Mails je nach eingehender Empfänger-Domain filtern. Dazu wird
der content_filter-Parameter nicht, wie in XREF angegeben, global in main.cf
gesetzt, sondern eine Map erstellt, die die zu prüfenden Empfänger-Domains
zusammen mit der FILTER-Aktion listet. Die folgende Beispiel-Map
/etc/postfix/filter_recipient_domains legt fest, dass für die Domain
example.com E-Mails an den Filter amavis gesendet werden sollen:
example.com FILTER amavis:[127.0.0.1]:10024
Mit dem Kommando postmap wird die Datei /etc/postfix/filter_recipient_domains
anschließend in eine indizierte Map umgewandelt:
# postmap /etc/postfix/filter_recipient_domains
Ein weiterer Aufruf des postmap-Kommandos testet die Map, indem es nach der
Domain example.com fragt; findet postmap den Domain-Namen, listet es die damit
verbundene Aktion auf:
# postmap -q "example.com" /etc/postfix/filter_recipient_domains
FILTER amavis:[127.0.0.1]:10024
Die getestete Map wird anschließend in die Liste der
smtpd_recipient_restrictions in main.cf eingebunden. Als Auslöser für die
Prüfung der Map dient dabei der Postfix check_recipient_access-Parameter; er
spricht auf den envelope-recipient an, den ein SMTP-Client in einer
SMTP-Session an Postfix übergeben hat.
Das folgende Beispiel bindet die Map so ein, dass sie auf alle Clients
angewendet wird:
smtpd_recipient_restrictions =
...
check_recipient_access hash:/etc/postfix/filter_recipient_domains
...
permit_mynetworks
reject_unauth_destination
...
Dieses Beispiel bindet die Map so ein, dass nur Inhalte fremder (externer)
Clients, die eine zu überprüfende Empfänger-Domain angegeben haben, an
amavisd-new übergeben werden. Dies geschieht, indem vorher alle bekannte
(interne) Clients durch die permit_mynetworks-Restriktion, von einer weiterer
Auswertung der smtpd_recipient_restrictions ausgenommen werden:
smtpd_recipient_restrictions =
...
permit_mynetworks
reject_unauth_destination
check_recipient_access hash:/etc/postfix/filter_recipient_domains
...
p at rick
Also ich möchte mich erstmal recht herzlich bei Ihnen bedanke, für die Super ausführliche Beschreibung.
Ich werde das Problem morgen gleich umsetzen und testen. Mit der Beschreibung wird das wohl kein Problem sein.:-)
Danke Gruss,
Daniel
Mehr Informationen über die Mailingliste Postfixbuch-users