[Postfixbuch-users] Postfix soll nur bestimmte domains auf viren und spam scannen

Patrick Ben Koetter p at state-of-mind.de
Di Okt 31 21:07:44 CET 2006


* 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

-- 
Das Postfix-Buch
<http://www.postfix-buch.com>
saslfinger (debugging SMTP AUTH):
<http://postfix.state-of-mind.de/patrick.koetter/saslfinger/>



Mehr Informationen über die Mailingliste Postfixbuch-users