Postifix: Verwenden Sie myorigin=$myhostname für lokale E-Mails und myorigin=$mydomain für vertrauenswürdige Netzwerke

Postifix: Verwenden Sie myorigin=$myhostname für lokale E-Mails und myorigin=$mydomain für vertrauenswürdige Netzwerke

Ich habe eine Postfix-Instanz für die Adressumschreibung konfiguriert, die eine Kanonisierung des From-Headers ermöglicht.

Aktuelle (erforderliche?) Konfigurationen

Dies sind die relevanten Konfigurationen:

# Basic conf
myhostname = hostname.example.test
mydomain = example.test
mynetworks = 127.0.0.0/8,1.2.3.4/32
myorigin = $mydomain
mydestination =

# Rewrite options
append_at_myorigin = yes
local_header_rewrite_clients = permit_mynetworks
sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps = hash:/etc/postfix/sender_canonical
recipient_canonical_classes = envelope_recipient, header_recipient
recipient_canonical_maps = hash:/etc/postfix/recipient_canonical

# restrictions (redacted for readability)
smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender, permit

Erwünschtes Ergebnis

Das möchte ich erreichen:

  1. Wenn eine E-Mail von 127.0.0.1 empfangen wird, From: rootwird sie wie folgt umgeschrieben (z. B. root@$hostname)From: [email protected]
  2. Wenn eine E-Mail von 1.2.3.4 empfangen wird, From: rootwird sie wie folgt umgeschrieben (z. B. root@$mydomain)From: [email protected]
  3. Wenn eine E-Mail von jemand anderem eingeht, From: rootwird sie abgelehnt (da eine Einschränkung reject_non_fqdn_senderbesteht)

Das Problem

Die Variable $myoriginsollte je nach Empfangsadresse unterschiedlich sein, aber ich kann keine Möglichkeit finden, dies zu tun. Bisher habe ich viele Lösungen ausprobiert, aber es hat nicht geklappt.

Erfolgloser Versuch...

Ich habe versucht, zwei SMTP-Masterdienste zu erstellen – 127.0.0.1:smtpmit myorigin = $myhostnameund 192.168.1.2:smtpmit myorigin = $mydomain–, aber da die Option myorigin mit trivialen Prozessumschreibungen zusammenhängt, wird sie ignoriert.

Die Zuordnung für canonical/ virtualscheint unbrauchbar zu sein, da sie nach der Ausführung trivialer Umschreibungen erfolgt.

Die Zuordnung für aliasesscheint unbrauchbar zu sein, da sie verwendet wird, nachdem festgestellt wurde, dass die Nachricht an gesendet werden soll $mydestination, diese Nachrichten jedoch woanders hingehen.

Antwort1

Dank ananxFeedback Ich habe die Lösung gefunden.

Das Lösungsschema

EntsprechendOffizielle Postfix-DokumenteZum Umschreiben sieht der Hauptprozessbaum wie folgt aus:

smtp   --+--> cleanup --> rewrite --> [queue]
pickup --/

Also habe ich schließlich eine Pipeline speziell für localhost erstellt, etwa wie folgt:

192.168.1.2:smtp  --+--> cleanup --> rewrite ------------+--> [queue]
127.0.0.1:smtp  --+--> cleanup_local --> rewrite_local --/
pickup -----------/

Die Konfiguration

Dies ist die main.cfKonfiguration, die externe IP-Konfigurationen darstellt:

#  configure the global desiderata

# Basic conf (for display purpose, use your own configuration)
# myhostname = hostname.example.test
# mydomain = example.test
# mydestination =
# mynetworks = 127.0.0.0/8,1.2.3.4/32

# Rewrite options
myorigin = $mydomain
append_at_myorigin = yes
local_header_rewrite_clients = permit_mynetworks
sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps = hash:/etc/postfix/sender_canonical
recipient_canonical_classes = envelope_recipient, header_recipient
recipient_canonical_maps = hash:/etc/postfix/recipient_canonical

# restrictions (redacted for readability)
smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender, permit

Dies ist die master.cfKonfiguration mit der angepassten Pipeline:

# add this for local smtp service
127.0.0.1:smtp      inet  n       -       n       -       -       smtpd
  -o myorigin=$myhostname
  -o cleanup_service_name=cleanup_local
  -o inet_interfaces=loopback-only
  -o local_header_rewrite_clients=permit_inet_interfaces

# edit pickup sevice with this two options
pickup    unix  n       -       n       60      1       pickup
  -o myorigin=$myhostname
  -o cleanup_service_name=cleanup_local

# add this for local email cleanup
cleanup_local   unix  n       -       n       -       0       cleanup
  -o myorigin=$myhostname
  -o rewrite_service_name=rewrite_local

# add this for local email basic rewrite
rewrite_local   unix  -       -       n       -       -       trivial-rewrite
  -o myorigin=$myhostname
  -o local_header_rewrite_clients=permit_inet_interfaces

# Then for each public IP assigned to the machine, add smtp service like this
192.168.3.85:smtp      inet  n       -       n       -       -       smtpd
# and remove default service smtp inet [..cut..] smtpd

verwandte Informationen