📱 Erkannter Endgerättyp ⛱️ Tag und Nacht. Verbraucht keinen oder einen 🍪.
guest
Login 🧬 0 Ihre DNS in den Krei.se-DNS-Servern, führt zum Bio-Labor 🍪 1 Anzahl Ihrer gespeicherten Kekse, führt zur Keksdose

Postfix Mailserver Glossar

Pipeline

smtpd --> cleanup --> qmgr --> [transport]

SMTPD (receives)  
↓  ─── reject_unlisted_recipient etc.
cleanup(8)
↓  ─── address rewriting stage
        ├─ canonical_maps
        ├─ virtual_alias_maps (may recurse)
        └─ recipient_canonical_maps
QUEUE  (qmgr(8))
↓  ─── classification stage
        ├─ local → local_transport
        ├─ virtual → virtual_transport (LMTP)
        ├─ relay → relay_transport
        └─ default → default_transport
           └─ relayhost can intercept sent mails here
DELIVERY
↓  ─── lmtp/local/relay/smtp
DOVECOT LMTP (if virtual_transport = lmtp)
↓  ─── userdb lookups → final mailbox

Domain-Klassen

local domain class --> local_transport

  1. Lokale Domains sind erstens Domains die sich aus mydomain oder myhostname ableiten

Postfix nennt diese Domains canonical was im Deutschen Normalform bedeutet, aber etwas anderes als normalization ist, denn canonical ist unique, normalization nicht :D Canonical bedeutet hier, dass aus anderen Werten Domains abgeleitet werden, z.B. aus dem hostname oder der Server-IP

  • Sowohl alle Server-IPs von ìnet_interfaces als auch hostname -f sind gĂĽltige Domains, Sie können mails an root@[server-ip] oder root@servername.domain.tld senden, das kommt an!
  • myhostname = server.domain.tld, mydomain = domain.tld leiten sich ggf. beide vom hostname ab
  • Am Ende haben Sie aus einem Server 3 Domains gemacht
  1. Dazu kommen noch alle Domains in mydestination

virtual alias domain class --> !no transport!

  • Domains die keine Postfächer besitzen und nur weitergeleitet werden - im Gegensatz zu relay domains werden Mails auch nicht vorgehalten.

virtual mailbox domain class --> virtual_transport

  • Domains die virtuelle Postfächer besitzen

relay domain class --> relay_transport

  • Domains fĂĽr die wir Mails vorhalten. Diese Klasse braucht die 🏤 Poststelle häufig, da Mails an 📯 lokale Postboten weitergegeben werden, aber auch bis zu 7 Tage vorgehalten wenn der Postbote mal krank ist. Achtung, das ist nicht der relayhost :D

default domain class --> default_transport

  • Domain Klasse die genutzt wird wenn Sie ĂĽber den Postfix-Server als authentifizierter Nutzer Mails versenden (i.d.R. ist dieser Transport einfach SMTP) - das ist eher eine Behelfs-Klasse, denn es bedeutet nur dass keine Domain-Klasse bekannt ist wenn eine Mail versendet wird.

Variablen fĂĽr den Postfix-Server selbst

My

myhostname

Standard: Ausgabe von hostname -f, also server.domain.tld

  • Wird in Einstellungen als Variable mit benutzt, z.B. als Grundlage fĂĽr die eigene Domain.
  • Taucht im Mail-Quelltext und im EHLO mit auf, daher ĂĽberlegen wieviel Infos Sie ĂĽber Ihre interne Infrastruktur ausgeben wollen.

Hier empfehle ich daher mail.domain.tld zu setzen, auch wenn der Server selbst anders heisst - solange ihr Router mail.domain.tld auf die Server-IP leitet ist das die einfachste Möglichkeit interne Strukturen nicht frei Haus mitzuschicken.

đź‘·đź‘·đź‘· Notiz: PrĂĽfen ob myhostname mit dem SSL-Zertifikat ĂĽbereinstimmen muss oder der Name im DNS genĂĽgt.

mydomain

Standard: localdomain - sollte domain.tld sein

  • Wird in Einstellungen als Variable mit benutzt, z.B. in myorigin
  • Wird im Standard in mydestination mit genutzt

myorigin

Standard: $myhostname (Wert von myhostname)

Setzen Sie hier den Wert auf $mydomain oder manuell auf mail.domain.tld

Dieser Wert gibt an mit welcher standard-Absender-Domain Mails von Postfix verschickt werden wenn keine Domain bekannt ist, das ist also global wie lokal sinnvoll auf eine Domain zu setzen. Erhalten Sie dann aus irgendeinem Grund Mails mit dem Absender mail.domain.tld statt nur domain.tld wissen Sie, dass Postfix versucht Ihnen Mails ohne bekannte Domain zuzustellen - ein Hinweis auf Probleme mit den Mailserver.

Keine Sorge, Domains die weitergeleitet oder zusätzlich verwaltet werden hängt postfix korrekt an.

Postfix hängt nur mit compatibility_level 1 (derzeit 3.7) mydomain an unbekannte absender an

mynetworks

Standard: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

Hier können Sie Netzwerk-Bereiche definieren die ohne Anmeldung Mails versenden dürfen. Das sollten Sie in keinem Fall tun, auch wenn es bequem ist. Selbst wenn Ihre Server in z.B. 10.0.x.x liegen und alle Nutzer-Geräte 10.20.x.x haben können Sie ohne VLAN-Authentifizierung einfach ein Gerät mit 10.0.x.x betreiben und dann Mails mit beliebigem Absender dem lokalen Postboten unterschieben.

Behalten Sie hier unbedingt die Standard-Werte bei oder setzen Sie maximal extra VPN-Bereiche ein.

Das betrifft keine Server-Berichte - diese gehen an root oder bekannte Empfänger und werden daher immer ohne Anmeldung angenommen. Auch hier ist kein Eintrag in mynetworks nötig

mydestination

Standard: $myhostname, localhost.$mydomain, localhost

Gibt alle Empfänger-Domains an für die Mails lokal abgespeichert wird. Siehe auch local domain class

Wir nutzen das in keinem Fall, daher ist hier immer nur localhost angegeben mydestination = localhost

📝 Die bisherigen Einstellungen sind in unseren Servern so minimal, weil Postfix lokal wie als globaler Post-Server i.d.R. nur Mails mit bekannten Domains weiterverteilt oder einsortiert. Stellen Sie sich das also so vor: Sie erhalten i.d.R. Post von der Poststelle und die bringt der Postbote. Aber diese beiden werden nur bei Problemen im Postverkehr mit dem eigenen Namen als Absender: Poststelle oder Postbote Briefe an Sie oder jemand anderen schreiben.

Daher haben wir nur postmaster und root als Nutzer ohne domain und diese Berichte erhält in unserem Fall immer ein Nutzer der im LDAP-Verzeichnis vorliegt.

Variablen fĂĽr User

Der Lookup-Ablauf ist:

  • Empfänger hat keine Domain? Hänge myorigin an

Der Empfänger hat jetzt immer eine Domain, Postfix macht generall nix ohne Domain.

  • Domain liegt in virtual_alias_domains? --> Mail wird ggf. in eine andere Domainklasse weitergeleitet
  • Domain liegt in virtual_mailbox_domains? --> Mail wird an den virtual_transport weitergeleitet
  • Domain liegt in relay_domain? --> Mail wird mit relay_maps weitergeleitet
  • Domain liegt in mydestination? --> lokale Zustellung (brauchen wir NIE, maximal fĂĽr mails direkt an root@localhost)

Aliase

Normale aliase lösen von user -> user@domain.tld oder user -> user auf und werden daher nur mit bekanntem lokalen Username abgefragt, siehe auch local domain class

Wenn Sie nur localhost in mydestination haben wie empfohlen können Sie das auch testen:

root@mail.domain.tld:~# echo "This is a test message body" | mail -s "Test subject" root

Diese Mail wird mit @mail.domain.tld von myorigin ergänzt und erneut als root@mail.domain.tld abgefragt, kann dann auch in LDAP ein User als Mail-Adresse haben.

root@mail.domain.tld:~# echo "This is a test message body" | mail -s "Test subject" root@localhost

Diese Mail wird Postfix versuchen direkt lokal zuzustellen, da localhost nicht in virtual_alias_domains, virtual_mailbox_domains oder relay_domains liegt, sondern als mydestination --> local domain class erkannt wird.

JETZT wird der alias aus alias_maps geprĂĽft.

alias_maps - Standard: hash:/etc/aliases, nis:mail.aliases

Dort wird gesetzt welche lokalen User, also z.B. Mail fĂĽr postmaster oder root an welche Adresse weitergeleitet werden soll. Im Standard-Fall macht Sinn:

root: admin@domain.tld    
postmaster: root

Das catcht alle mails an root@localhost oder root@server-ip oder root@serverhostname die Postfix versuchen wĂĽrde lokal zuzustellen.

! Nach Änderungen immer newaliases oder postmap /etc/aliases ausführen damit /etc/aliases.db geschrieben wird.

Virtuelle Aliase

Größter Punkt für Verwirrung und warum Postfix so "schwierig" ist. Hier werden 2 Bezeichnungen vermischt und auf andere Bereiche angewendet - das ist falsch und nutzerunfreundlich und ich hoffe in Postfix 4 oder so verschwindet das.

Das Problem ist, dass virtual_alias_maps IMMER fĂĽr Zuordnungen angewandt wird und nicht klar ist wie oft eine Adresse umgescrhieben wird. Vermeiden Sie diese Tabelle fĂĽr Zuordnungen zu Usern und nutzen Sie virtual_mailbox_maps. Ihre virtual_alias_maps sollte maximal ein paar Domain-Zeilen enthalten. Nutzen Sie fĂĽr alle n->1 Zuordnung von Mail-Adressen zu Usern immer virtual_mailbox_maps.

Virtuelle Aliase lösen von user@domain.tld -> user@anotherdomain.tld oder user@domain.tld --> localuser auf. Mit normalen Aliasen ist das nicht möglich.

Virtuelle Aliase können auch @domain.tld -> @anderedomain.tld auflösen und den user dabei beibehalten. Mehr Infos: https://www.postfix.org/virtual.5.html

virtual_alias_maps greift fĂĽr alle Domain-Klassen

Diese Map greift immer, also auch bevor eine Mail als virtual_mailbox einsortiert wird.

Der einzige Unterschied ist, dass eine Domain als virtual_alias_domain eingetragen anschliessend keinerlei Weiterverarbeitung erfährt - diese Domains werden ausschl. umgeleitet.

Siehe Beispiel: https://www.postfix.org/VIRTUAL_README.html -> Non-Postfix mailbox store: separate domains, non-UNIX accounts - sowie den Hinweis in https://www.postfix.org/ADDRESS_CLASS_README.html: "Note: for historical reasons, virtual_alias_maps apply to recipients in all domain classes, not only the virtual alias domain class."

Für lokale Nutzer wird Postfix die Domain anhängen, d.h. wenn Sie Post an root schicken und Postfix keinen Eintrag für root in seiner Alias-DB findet wird @domain.tld von mydomain angehangen und damit nochmal gesucht. Mehr Infos für alle die es ganz genau wissen wollen: https://www.postfix.org/ADDRESS_REWRITING_README.html

Bildend ist auch https://www.postfix.org/ADDRESS_CLASS_README.html#classes

Wir nutzen das aufgrund der Mehrdeutigkeit hier nie - hier würde gespeichert, dass Sie alice@domain.tld auf bob@anderedomain.tld oder andereruser@domain.tld umleiten wollen. Unser LDAP-Server kennt aber i.d.R. mit einer eindeutigen mail@domain.tld bereits sowohl die Domain, als auch den endgültigen user für den die Mails abgespeichert werden sollen, auch für mehrere Empfängeraddressen und verschiedene Domains - und das klärt virtual_mailbox_*.

Ein Mapping von @anderedomain.tld -> user@domain.tld ist problemlos mit einem LDAP-Eintrag möglich.

virtual_alias_domains - Standard leer

Diese domains per LDAP holen: virtual_alias_domains = ldap:/etc/postfix/ldap_lookups/virtual_alias_domains

Ein Domain die Sie hier eintragen kann nicht mehr virtual_mailbox_domain werden

virtual_alias_maps - Standard leer

Listet alle vollen Mail-Adressen auf (mit Domain) die auf andere volle Mail-Adressen abgebildet werden.

Maps per LDAP: virtual_alias_maps = ldap:/etc/postfix/ldap_lookups/virtual_alias_maps

Virtuelle Mailboxen

Virtuelle Mailboxen sind die Postfächer in die Postfix einsortieren will, hierfür wird virtual_transport genutzt und in unserem Standardfall ist das Dovecot auf LMTP Port 24.

Hier können Sie also Mails an einen Transport weiterreichen - er wird aber immer die originale Empfängeraddresse haben. Alternativ ist auch ein Speichern direkt im Mailordner möglich, ich lasse das aber lieber Dovecot machen weil Dovecot den Index der Mails pflegt. Soll das Postfix übernehmen brauchen Sie den sogenannten maildrop als Rückgabewert (z.B. /var/mail/domain.tld/user)

virtual_mailbox_domains

Dieser Lookup checkt nur den Domain-Teil gegen LDAP und listet die Domain dann fĂĽr den virtual_transport, bei uns LMTP und Dovecot

Der Filter hier läuft i.d.R. gegen mailacceptinggeneralid = *@domain.tld

LDAP: virtual_mailbox_domains = ldap:/etc/postfix/ldap_lookups/virtual_mailbox_domains

virtual_mailbox_maps

Dieser Lookup checkt zusätzlich ob die Empfangsaddresse überhaupt valide ist - wenn Dovecot einen User nicht finden wird kann Postfix hier schon Mails zurückweisen. Hier setzen wir i.d.R. wie in Dovecot 2 Lookups, einmal für den Exact-Match gegen mail= und mailacceptinggeneralid= sowie als 2. Filter den Domainteil gegen den Catch-All User für diese Domain (mailacceptinggeneralid=@domain.tld)

LDAP: virtual_mailbox_maps = ldap:/etc/postfix/ldap_lookups/virtual_mailbox_maps, ldap:/etc/postfix/ldap_lookups/virtual_mailbox_maps_catchall

Achtung, der RĂĽckgabewert welcher User diese Mail dann bekommt wird von Postfix IGNORIERT und die Mail wird 1:1 weiter an Dovecot gereicht.

🏤 globale Poststelle (Postfix)

Hier brauchen wir i.d.R. nur relay-domains, z.B. geben wir ĂĽber LDAP oder manuell an Post fĂĽr domain.tld an einen eigenen Host vor Ort weiterzuleiten und ggf. vorzuhalten (der Postbote)

📯 lokaler Postbote (Postfix)

Neben den Mappings ĂĽber virtual_mailbox_maps hat dieser nur die Aufgabe Mails ĂĽber einen relayhost weiterzuleiten, da er selbst mit seiner dynamischen IP keine Mails versenden sollte.

📤 Versand

myorigin - @Domain die an Mails angehängt wird die vom lokalen Postboten verschickt wird

📯 lokaler Postbote (Postfix)

Hier brauchen Sie diesen Eintrag nicht ändern, da Sie nie

myhostname - Hostname des Servers

📯 lokaler Postbote (Postfix)

📥 Empfang (Dovecot)

📬 Einsortieren (LDA)

📪 Postfach (Maildir)

Hintergrund ändern. Verbraucht keinen oder einen 🍪.

Verknüpften Viewport öffnen

Sie sind leider kein Entwickler :(

FPS

Vertex-Count