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:
- Wenn eine E-Mail von 127.0.0.1 empfangen wird,
From: root
wird sie wie folgt umgeschrieben (z. B. root@$hostname)From: [email protected]
- Wenn eine E-Mail von 1.2.3.4 empfangen wird,
From: root
wird sie wie folgt umgeschrieben (z. B. root@$mydomain)From: [email protected]
- Wenn eine E-Mail von jemand anderem eingeht,
From: root
wird sie abgelehnt (da eine Einschränkungreject_non_fqdn_sender
besteht)
Das Problem
Die Variable $myorigin
sollte 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:smtp
mit myorigin = $myhostname
und 192.168.1.2:smtp
mit myorigin = $mydomain
–, aber da die Option myorigin mit trivialen Prozessumschreibungen zusammenhängt, wird sie ignoriert.
Die Zuordnung für canonical
/ virtual
scheint unbrauchbar zu sein, da sie nach der Ausführung trivialer Umschreibungen erfolgt.
Die Zuordnung für aliases
scheint 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.cf
Konfiguration, 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.cf
Konfiguration 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