Wie füge ich mit Postfix einen einzelnen Header für jede eingehende E-Mail hinzu?

Wie füge ich mit Postfix einen einzelnen Header für jede eingehende E-Mail hinzu?

Bei mir läuft Postfix mit einer Reihe von SMTP-Prozessen, die in master.cf wie folgt konfiguriert sind:

# Internet facing one
1.2.3.4:25      inet  n       -       y       -       -       smtpd
  -o ...   # internet-only overrides

# Internal facing one
10.0.0.1:10026      inet  n       -       y       -       -       smtpd
  -o ...   # internal-only overrides

Nun möchte ich einen einzelnen Header mit statischem Namen und Wert hinzufügen zueingehendE-Mail, abhängig davon, über welches SMTP-Gerät sie empfangen wurde.

Beispiel:

X-Gert-Postfix-Received-From: the evil internet

Meine Optionen:

  1. Ergänzen Sie dieheader_checksOption und verwenden Sie die PREPENDAktion in der Datei.

    Fast geschafft, aber:

    • Es muss mit einem vorhandenen Header übereinstimmen und fügt bei nachfolgenden Übereinstimmungen einen weiteren hinzu.
    • Nicht immer ist bei mir eine bestimmte Überschrift schon vorhanden, vielleicht Fromfehlt zum Beispiel auch eine.
    • Falls Sie bereits über verfügen header_checks, gibt es header_checkmeiner Meinung nach keine einfache Möglichkeit, zwei Dateien zu stapeln.
  2. Erstellen Sie eine benutzerdefinierte App, die dieMilter-Protokollund schließen Sie es mit an Postfix an smtpd_milters.

    Natürlich funktioniert das. Ich kann die E-Mail in meiner eigenen App prüfen und dann den Header dort einfügen. Für eine einfache Aufgabe wie das Hinzufügen eines Headers scheint das zu viel Aufwand zu sein. Darüber hinaus erfordert es zusätzliche Wartung, da eine weitere Daemon-App ausgeführt werden muss, ziemlich viel Boilerplate-Code usw.

  3. Wie in einem Kommentar vorgeschlagen, verwenden Sie check_recipient_access(zugehörige Frage).

    Dieselben Nachteile wie header_checks(siehe 1).

Ich habe das Gefühl, dass mir etwas Einfaches entgeht. Hat jemand eine bessere Idee?

Antwort1

Falls Sie vorhandene Header_Checks haben, gibt es meiner Meinung nach keine einfache Möglichkeit, zwei Header_Check-Dateien zu stapeln.

Es gibt tatsächlich eine Möglichkeit, mehrere unabhängige Header_Checks-Dateien pro Daemon zu haben.

jedeOption in Ihrer master.cf überschreibt einen Standardwert oder einen beliebigen Postfix-Konfigurationsparameter in main.cf. Um einen anderen header_checks pro Daemon zu haben (sagen wir/etc/postfix/header_checks1Und/etc/postfix/header_checks2), müssen Sie jedesheader_checksParameter:

# Internet facing one
1.2.3.4:25      inet  n       -       y       -       -       smtpd
-o header_checks = regexp:/etc/postfix/header_checks1

# Internal facing one
10.0.0.1:10026      inet  n       -       y       -       -       smtpd
-o header_checks = regexp:/etc/postfix/header_checks2

Auf diese Weise haben Sie völlig unabhängigeheader_checksDateien pro SMTP-Daemon. Von dort aus können Sie Regeln hinzufügen, die das Tag, von dem Sie gesprochen haben, VORANSTELLEN.

Antwort2

So umgehen Sie die Einschränkungen von smtpd_*_restrictions:

Eine Nachricht – sogar eine mit „null“ Absender – hat genau einen Umschlagabsender. Verwenden Sie also check_sender_accessanstelle von check_recipient_access. Der verwendete Suchtyp kann sein, static:weil uns die Einzelheiten des Rückwegs egal sind. Fügen Sie ihn Ihrer Liste der smtpd_sender_restrictions hinzu, bevor irgendwelche Prüfungen Ergebnisse generieren ACCEPT(Postfix würde darüber hinaus keine weiteren Suchvorgänge abfragen).

# in main.cf
common_sender_restrictions =
  reject_non_fqdn_sender
  reject_unknown_sender_domain
  ..
internet_sender_restrictions =
  $common_sender_restrictions
  check_sender_access static:{PREPEND X-Gert-Postfix-Received-From: the evil internet}

# in master.cf
192.0.2.0:25        inet  n       -       y       -       -       smtpd
 -o smtpd_sender_restrictions=$internet_sender_restrictions
10.0.0.1:10026      inet  n       -       y       -       -       smtpd
 -o smtpd_sender_restrictions=$common_sender_restrictions

verwandte Informationen