Postfix: Bedingte Header-Prüfungen

Postfix: Bedingte Header-Prüfungen

Hier ist meine SMTP-Situation.

Der E-Mail-Fluss wird von einem Online-Relay-Anbieter markiert (!!SPAM!!, !!BULK!! usw.)

Der E-Mail-Fluss wird von einem internen Postfix empfangen. Der Transport ist so konfiguriert, dass er an unseren internen Exchange weitergeleitet wird, andernfalls, wenn der Betreff markiert ist. Ich mache das mit Header_checks. Der markierte E-Mail-Fluss wird an unseren Quarantäneserver gesendet (WebUI für einzelne Benutzer usw.).

/^[sS]ubject:.*!!SPAM!!*/ FILTER smtp:192.168.11.250
/^[sS]ubject:.*!!BULK!!*/ FILTER smtp:192.168.11.250
/^[sS]ubject:.*!!SUSPECT!!*/ FILTER smtp:192.168.11.250

Es funktioniert einwandfrei. Unser Quarantäneserver kann eine Liste vertrauenswürdiger Absender für Benutzer erstellen. Diese Whitelist ist verfügbar und ich kann sie auf mein Postfix herunterladen.

Meine Frage ist: Wie kann ich meine Whitelist vor der Header-Prüfung anwenden?

 If Subject contains *!!SPAM!!*
  then
   If from contains [email protected] AND if to contains [email protected]
    Then redirect to internal exchange server
    else redirect to quarantine server
  endif
 endif

Ich weiß nicht, wie das geht. Irgendwelche Tipps?

Antwort1

Nach einem Kommentar von @masegaloeh habe ich eine Lösung gefunden. Die Idee besteht darin, einen zweiten Postfix-SMTP-Server zu haben, der mit einem Richtlinienserver auf 10025 lauscht, um E-Mails an den normalen Server (sofern auf der Whitelist) oder an den Quarantäneserver zu senden.

Die Idee begann als Ihre header_checks-Lösung in main.cf:

header_checks = regexp:/etc/postfix/header_checks

In header_checks:

/^(S|s)ubject: .*!!(SPAM|BULK|SUSPECT)!!.*/ FILTER  smtp:127.0.0.1:10025

Dann in master.cf (bearbeitet mit @masegaloeh-Kommentaren):

10025      inet  n       -       n       -       -       smtpd
        -o receive_override_options=no_header_body_checks
        -o smtpd_recipient_restrictions=${my_switcher_restrictions}
policy  unix    -       n       n       -       0       spawn   user=nobody argv=/etc/postfix/policy-server-switcher

Dadurch wird die Verwendung von header_checks durch die zweite Instanz von Postfix außer Kraft gesetzt.

Und in main.cf

my_switcher_restrictions = check_policy_service unix:private/policy

Und der Inhalt von Policy-Server-Switcher

!/bin/bash

sender=""
recipient=""

while read line
    do
    key=$(echo $line | cut -f1 -d=)
    value=$(echo $line|cut -f2 -d=)
    if [ "$key" == "sender" ] 
        then
        sender=${value}
        logger -p mail.info -t PolicyServer "Sender is: ${value}"
        fi
    if [ "$key" == "recipient" ] 
        then
        recipient=${value}
        logger -p mail.info -t PolicyServer "Recipient is: ${value}"
        fi
    if [  "x${recipient}" != "x" ] && [  "x${sender}" != "x" ]
        then
        if [ "$sender" == "[email protected]" ] && [ "$recipient" == "[email protected]" ]
            then
            echo "action=FILTER smtp:192.168.1.150"
            echo
            exit 0
            fi
        if [ "$sender" == "[email protected]" ] && [ "$recipient" == "[email protected]" ]
            then
            echo "action=FILTER smtp:192.168.1.150"
            echo
            exit 0
            fi
        echo "action=FILTER smtp:192.168.1.151"
        echo
        exit 0
        fi
    done

Natürlich müssen Sie Ihren Richtlinienserver so programmieren, dass er die Whitelist aus der Datenbank oder aus LDAP lädt. Hier ist nur ein Beispiel, um Ihnen einen Eindruck davon zu vermitteln.

Aber das hat noch einige Einschränkungen, nehmen wir an, ich sende eine Mail mit diesem

Aus:[email geschützt]

Zu:[email geschützt]

Zu:[email geschützt]

Dies wird für alphamikevictor und thomas an den normalen Server gesendet, sofern der letzte Test mit dem Richtlinienserver FILTER auf den Normalwert zurücksetzt. Wenn Sie alphamikevictor jedoch an die zweite Position setzen, werden E-Mails für beide Empfänger in die Quarantäne gesendet.

verwandte Informationen