Benutzer-Werkzeuge

Webseiten-Werkzeuge


postfix

Allgemein

  • MTA → Mail Transfer Agent
  • Nimmt Mails via SMTP entgegen (sowohl von Clients, als auch von anderen Servern)



Postfix besteht aus dem Startdienst postfix und einer Reihe von Unterdiensten

  • Unterdienste werden durch Startdienst gestartet
  • Unterdienste laufen teilweise mit weniger Privilegien (nicht als root)
  • Unterdienste laufen teilweise chrooted unter /var/spool/postfix

Konfiguration

Dateien

  • /etc/postfix/main.cfg → Hauptkonfigurationsatdatei
  • /etc/postfix/master.cfg → Einstellungsdatei für die Dienste (welche wann gestartet werden, ob in chroot oder ohne usw.)

Konzept

Postfix nimmt Mails für alle Domains an, die mit dem Parameter mydestination definiert wurden, diese werden standardmäßig in die mbox (/var/mail) des jeweiligen Benutzers eingespeist. Alternativ kann postfix die Mails auch an einen anderen Dienst weiterleiten, das kann über den Parameter mailbox_transport definiert werden.
Letzteres kann sinnvoll sein wenn Dienste wie Cyrus imap benutzt werden.

Mails weiterleiten macht postfix nur für die unter mynetworks angegebenen Netze (vertraute Netze)(Hinweis: smtp_recipient_restriction beachten, wenn gesetzt ist, das deaktiviert das unter Umständen), oder für alle Domains unter relayhosts angegeben sind.
Alternativ kann man per smtp_recipient_restrictions und der Option permit_sasl_authenticated zusätzlich die Benutzer freischalten die sich per sasl authentifiziert haben.
Hinweis: Auch Mailclients zählen zu den relayenden Stationen - wenn nicht in mynetworks müssen sie authentifizieriert werden und die Authentifizierungsmethode (zum Beispiel sasl_authenticated) in smtpd_recipient_restrictions freigeschaltet werden.

Welche Benutzer existieren prüft postfix gegen /etc/alias und /etc/passwd. Mails an Benutzer die in diesen nicht vorkommen werden abgelehnt.
Um auch Postfächer verwalten zu können für Benutzer die auf dem System nicht existieren, kann per local_recipient_list eine Liste der zusätzlichen (nicht im System angelegten) Benutzer angegeben werden. Achtung: Diese Liste muss per postmap in eine Hashmap umgewandelt werden - Außerdem müssen im Parameter local_recipient_list (wenn dieser definiert wird) auch die /etc/aliasas und /etc/passwd angegeben werden → sonst keine lokale Mailzustellung innerhalb des Systems mehr. Für Detials siehe Liste der Parameter im folgenden.

Wichtige Parameter

Name Beschreibung
mydestinationAlle Domains für die das lokale System zuständig ist (die auf dem lokalen System gehostet werden - ihre Postfächer haben)

Die Einträge werden mit Komma getrennt
mynetworksNetzwerke die relayen dürfen (Mails an andere Server über den lokalen Server versenden).

Alle Hosts die eine IP-Adresse aus diesem Bereich haben können Mails über den Server senden (und nicht nur an den Server als Ziel).
Die einzelnen Bereiche werden durch Leerzeichen getrennt.

Achtung: Im Parameter (wenn er gesetzt wird) smtp_recipient_restrictions muss permit_mynetworks als Option gesetzt sein.

Achtung: Hier sollte mindestens immer 127.0.0.1 und die IPv6-Entsprechung eingetragen sein - sonst geht der lokale Mailversand nicht
relayhostFull Qualified Names (Domains) für die der Server immer relayed (wenn diese als To angegeben sind) (auch wenn sie nicht in mynetworks oder anderweitig berechtigt sind) - in der Regel leer
myhostnameOptional - Hostname - wird ansonsten vom System ausgelesen

Parameter wird an verschiedenen Stellen genutzt

Achtung: Das wird für den Host und Domain im HELO-Befehl genutzt und muss im DNS über die IP-Adresse Reverse-Lookup-Fähig sein - sonst lehnen einige Mailserver die Verbindung ab

Achtung: Wird bei SALS-Authentification als Realm benutzt wenn hinter dem Benutzernamen für die Authentification kein @Realm kommt. Die Benutzer in der saslpasswd müsen mit dem gleichen Realm angelegt werden. Dieser Verhalten kann durch den Parameter smtpd_sasl_local_domain geändert werden (kann optional ein andere Default-Realm für die AUthentifizierung gesetzt werden
mydomainOptional - Domainname - wird ansonsten vom System ausgelesen

Parameter wird an verschiedenen Stellen genutzt
inet_interfaceNetzwerk-Interfaces an denen auf eingehende Mails gelauscht werden soll

Interfacenamen oder all für alle.

Achtung: Wird hier nicht „all“ angegeben, muss lo angegeben werden, sonst können intern (System) keine Mails mehr versendet werden
smtpd_recipient_restrictionsListe anhand derer die Weiterverarbeitung der Mail zugelassen wird oder abgelehnt werden kann.

Wird nach smtp_client_restrictions, smtp_helo_restrictions, smtp_sender_restrictions ausgeführt.

Ist sozusagen eine Black- und Whitelist in einem.
Eigenschaften des Senders/der Mail die zu einem weitertransport führen sollen werden permit_Eigenschaft geschrieben, Eigenschaften die zu einer Ablehnung der Mail führen sollen mit einem deny_Eigenschaft.
Sobald eine permit_ oder deny_-Regel gegriffen hat, wird der Rest der Regeln nicht mehr durchlaufen.
Das bedeutet auch, das Ausnahmen von deny_-Regeln in Form von permit-Regeln vor den deny_-Regeln stehen müssen.


Beispiel: smtpd_recipient_restrictions = permit_mynetworks, reject_unlisted_recipient, reject_non_fqdn_sender, reject_unknown_sender_domain, permit_sasl_authenticated, reject_unauth_destination

Da permit_mynetworks als erstes kommt, dürfen Hosts die in mynetworks stehen unter Angabe beliebiger Domains an alle anderen beibigen Domains Mails senden - es gibt also keine Verbote die hier greifen würden, da der Parameter vor allen anderen kommt.
Mails an Ziele auf dem lokalen System die nicht existieren (reject_unlisted_recipient) werden verworfen (das dient dazu die Mailwarteschlange nicht blockieren zu lassen), das gleiche gilt für Mails bei denen im Absender keine komplette Domain steht (reject_non_fqdn_sender) oder die Absender-Domain nicht im DNS existiert (sich nicht in einen MX-Eintrag oder Host-Eintrag auflösen lässt).
Anschließend werden Hosts die sich per SASL-Authentifzierung authentifiziert haben für das Senden von Mails über diesen Rechner freigeschaltet (permit_sasl_authenticated). Allerdings unterliegen diese bereits den Restriktionen die durch die reject_-Parameter ergeben. Denn sobald ein Parameter in der Liste matcht, wird der Rest nicht mehr überprüft. Ist also bei einem Sasl-Auhentifizierten Sender die Prüfung ob die Domain von der er sendet existiert (reject_unknown_sender_domain) zutreffend, dann wird die Mail von ihm nicht transportiert. Trifft hingegen keine der Regeln vor dem Parameter zu, dann wird die permit_sasl_authenticated-Regel ausgeführt und die Mail transportiert, auch wenn Regeln die nach dem Parameter stehen dies vielleicht unterbinden würden.
Der letzte Parameter verweigert das relayen (weitertransportieren an einen anderen Host) von allen Systemen die nicht authentifiziert sind und deren Ziel nicht in relay_hosts steht oder das System selbst ist. Dieser Parameter steht am Ende der Liste, da wenn er am Anfang der Liste stehen würde und dahinter permit_sasl_authenticated und permit_mynetworks diese Parameter gar nicht mehr zum tragen kommen würden, sondern alle Mails die nicht an Ziele in relay_hosts oder das System selbst gerichtet sind grundsätzlich abgelehent werden würden. Dieser Parameter ist wichtig, da sonst beliebige Server/Clients unauthentifiziert Mails an beliebige Ziele senden können, auch über relay_hosts hinaus.


Einige Mögliche Werte:
Wert Bedeutung
permit_my_networksSchaltet alle Netze die in my_networks stehen frei
reject_unlisted_recipientMails an Empfänger die nicht in /etc/passwd oder in der Alias-Datei stehen (in der Regel /etc/aliases → kann gesetzt werden) und auch nicht in anderen Dateien/Datenbanken die über den Parameter local_recipient_maps gesetzt sind, werden abgelehnt
reject_non_fqdn_senderLehne Mails ab die von einem Absender kommen der keinen Full Qualfied Domainname angegeben hat.

Zum Beispiel nur Benutzername oder benutzer@IP-adresse
reject_unknown_sender_domainMails von Domains die nicht existieren (kein A-Rekord bzw. kein MX-Rekord) werden abgelehnt
permit_sasl_authenticatedLasse Mails von per sasl authentifizierten Benutzern zu.

Meist authentifizieren sich Mailclients und können dann Mails über postfix relayen.

sals-Authentifzierung wird über die Parameter smtpd_sasl_auth_enable, smtpd_sasl_path eingerichtet
reject_unauth_destinationMails an Ziele die nicht lokal sind (mydestination, inet_ingterfaces, virtual_alias_domains oder virtual_mailbox_domains) oder die nicht in relay_hosts stehen.

Sollte einer der letzten Parameter sein, da sonst alle Mails die relayed werden weil sie von einem Absender aus my_networks kommen (permit_my_networks) oder von einem per sasl authentifziertem Mail-Client (permit_sasl_authenticated) verworfen werden würden, da diese Mails an keinen Host in mydestination oder an einen in relayhost geht.

Achtung: Diese Option sollte immer gesetzt werden (als letzte in der Regel) wenn smtpd_recipient_restrictions konfiguriert wird (per default ist sie gesetzt) - sonst können andere den Server zu relayen und damit zum Spam versenden benutzen.

Nur so wird sicher gestellt, dass nur Mails an das System selbst oder an Hosts die in relay_hosts angegeben sind durchgelassen werden (bzw. bei Zusatzoptionen von Clients/Servern die sich authentifiziert haben oder in mynetowkrs stehen)
local_recipient_mapsListe mit Dateien/Datenbanken in denen die lokalen Epfänger gelistet sind

Insebsondere wichtig wenn in smtpd_recipient_restrictions reject_unlisted_recipients gestezt ist.

Sollte mindestens die Aliases-Tabelle und /etc/passwd für den lokalen Mailtransport enthalten.
In der Regel wird mindestens eine eitere Datei benötigt für Benutzer die auf dem System nicht angelegt sind (also nicht in /etc/passwd) die aber als Mailkonto auf dem System existieren.

Beispiel: local_recipient_maps = proxy:unix:passwd.byname, $alias_maps,hash:/etc/postfix/recipient_list

Erste Argument ist das Einbinden der passwd, das Zweite der alias_maps (in der Regel unter /etc/aliases) und der letzte das Einbinden einer benutzerdefinierten Liste zusätzlicher Empfänger die nicht in den beiden anderen beiden Dateien vorhanden sind, weil im System nicht angelegt.


Private Listen (zusätzliche Listen mit lokalen Empfängern) müssen wie folgt aufgebaut sein:

Empfänger     OK
Empfänger2   OK

Prinzipiell ist nur wichtig das vorne der Empfänger steht, dann ein oder mehrere Leerzeichen und ein weiteres beliebiges Wort.
Die Liste muss anschließend mit dem Kommando postmap Dateiname in ein File Dateiname.db - eine Hasmap - gewandelt werden.
Der Parameter hash:Dateipfad in der Konfiguration von local_recipient_maps zeigt an das es sich um eine Hash-Map handelt.

alias_database und alias_mapsVerweise auf Alias-Datenbanken/-Dateien

Alias-Datenbanken mappen Benutzernamen auf andere Postfächer - sozusagen wie Umleitungen

Der Benutzer admin kann auf den Benutzer root gemappt werden, so das alle Mails an admin in das Postfach von root geschrieben werden.


Beispiel: aliash_database=hash:/etc/aliases bzw. alias_maps=hash:/etc/aliases


Aufbau der Datei:
Empfänger: Neuer Empfänger
Empfänger2: Neuer Emfänger
  • Empfänger: Der Adressat an den die Mail gesendet wurde
  • Neuer Empfänger: Der Benutzer an den die Mail weitergeleitet werden soll

Es ist dabei möglich das der neue Empfänger in einem weiter unten folgenden Auftrag wieder an ein anderes Postfach umgeleitet wird.

Hinweis: Nach Veränderungen an dieser Datei muss sie „aktiviert“ werden per Aufruf von newaliases

smtpd_sasl_auth_enableyes - aktiviere sasl-Auth für die Authentifizierung von Clients/Servern per SASL

Per SASL authentifizierte Benutzer können Mails über den Server relayen (aus Clientsicht einfach versenden) - allerdings muss smtpd_recipient_restrictions permit_sasl_autneticated enthalten.

Sasl steht für Simple Authentication and Security Layer - ein Framework zum Authentifizieren von Benutzern und verschlüsselter Übertragung von Passwörtern
smtpd_sasl_pathPfad zur Date in der die sasl-Konfiguration für den smtpd hinterlegt ist.

In der Regel genügt der Dateiname.
Die Datei mus dann unter /etc/postfix/sasl mit dem entsprechenden Namen angelegt werden.

In der Datei wird festgelegt auf welche Weise die (pwcheck_method) die Authentifizierung durchgeführt wird - letztendlich wo nach dem Benutzer und dem Passwort geguckt wird (in einer Textdatenbank, oder in einer Datenbank oder über den saslauthd oder per ldap, gegebenfalls welches Plugin eingesetzt werden soll. Außerdem welche Mechanismen zur Übertragung des Passworts verwendet werden dürfen (mech_list).

Die Parameter und Werte werden durch : getrennt - Parameter:Wert

Beispieldatei:
 pwcheck_method: auxprop
auxprop_plugin:sasldb
mech_list:CRAM-MD5 DIGEST-MD5 NTLM

Das Beispiel zeigt die Authentifizierung über sasldb (liegt gewöhnlich unter /etc/sasldb2 → Hash-Textdatei) und die Freischaltung der Übertragungsmechanismen für das Passwort CRAM-MD5,DIGEST-MD5,NTLM


  • pwcheck_method: Über welches Verfahren soll die Überprüfung des Passwortes erfolgen - auxprop → über ein Plugin
  • auxprop_plugin: Angabe des für die Überprüfung des Passworts zu benutzende sasl-Plugin - in diesem Falle sasldb → Prüfung des Passworts gegen sasldb
  • mech_list:Liste der Mechanismen zur Übertragung des Passworts durch Leerzeichen getrennt CRAM-MD5 DIGEST-MD5 NTLM → Verschlüsselte Übertragung, LOGIN PLAIN - unverschlüsselte Übertragung (sollte nur zugelassen werden in Verbindung mit TLS/SSL)



Wenn sasldb verwendet wird müssen die Benutzer per saslpasswd2 Benutzername angelegt werden und das Passwort darüber eingegeben werden.
Unter /etc/saslpasswd2 ensteht dann die Passwortdatei.
Achtung: Ein Teil der Dienste wird chrooted (/ ist dann für diese Dienste unter /var/spool/postfix) - entsprechend können diese nicht auf die echte /etc/sasldb2 zugreifen - es sollte ein Link unter /var/spool/postfix/etc/sasldb2 auf /etc/sasldb2 erstellt werden, damit diese Dienste auch auf die sasldb zugreifen können

broken_sasl_auth_clientsAktiviert die Unterstützung eines obsoleten Standards für ältere Clients
smtp_sasl_security_optionsSciherheitsoptionen für sasl-Authentifizierung

noanonymous → Verbiete alle Methoden die eine anonyme Authentizierung erlauben

An sich sollte bei richtiger Konfiguration alles was hier einstellbar ist auf anderen Wegen bereits konfigriert sein - es dient letztendlich nur als zusätzlicher Schutz um gefährliche Optionen die eventuell unebwusst gesetzt wurden noch einmal explizit zu unterbinden
smtpd_sasl_local_domainOptional - Definiert den Default-Realm für Benutzer die keinen mitsenden

Benutzer die sich authentifizieren können einen Realm angeben → iwan-iwanowitsch@bar.foo.de → wäre der Realm bar.foo.de und es würde in den Sasl-Authentification-Mechanismen nachdiesme Benutzer gesucht werden (inkl- Realm).

Alternativ kann man den Realm weglassen und als Benutzernamen nur iwan-iwanowitsch angeben.
In diesem Fall wird der Realm aus der Variabele myhostname gesetzt. Der Benutzer sendet zwar nur iwan-iwanowitsch, für die Authentifizierung innerhalb SASL wird dann aber iwan-iwanowitsch@$myhostname, also zum Beispiel iwan-iwanowitsch@bla.de benutzt.

Da myhostname für verschiedenen Sachen benutzt wird (u.a. als Hostname in der helo-Nachricht) kann der Default-Realm abweichend sein. Diesen kann man dann über smtpd_sasl_local_domain ändern.
mailbox_transportTransportweg der genutzt werden soll um Mails an lokale Mailboxen zuzustellen

Normalerweise werden Mails von postfix in die unix-Posfächer gespeichert.
Wenn die Mails durch andere Dienste wie Cyrus imap weiterverarbeitet werden sollen bzw. durch diese gespeichert werden sollen, kann man hier einen Transport angeben.


Bei Cyrus Imap: mailbox_transport=lmtp:unix:/var/run/cyrus/socket/lmtp

lmtp → Lokal mail transport protocol (eine vereinfachte Form von smtp)
unix: → Unix-Socket
Pfad: Der Pfad zum Unix-Socket von Cyrus imap.

Achtung: Gegebenfalls müssen die Rechte für den Socket angepasst werden, so das postfix in diesen schrieben kann.
myoriginDomain die an die Adressen für lokal versendete Mails angehängt wird und an die Mails gehen die keine Domain als Ziel angegeben haben

Muss in der Regel nicht gesetzt werden, wird auf $myhostname gesetzt per Default

Achtung:append_dot_domain entscheidet letztendlich ob das was unter myorigin angegeben ist tatsächlich an die Absenderadresse angehängt wird
append_dot_domainEntscheidet ob myorigin an Abesenderadressen von Mails die von lokal versendet werden angehängt wird oder nicht

Braucht nicht geändert werden, ist per Default yes.
smtpd_bannerText der in der 202-Status-Nachricht gesendet werden soll

Wird an sich automatisch gesetzt, kann aber geändert werden
mailbox_size_limitMaximale größe lokaler Mailboxen bzw. allen Dateien in die Postfix Mails schreibt

  • Angabe wahrscheinlich in Byte
  • Default 51000000
  • 0 → keine Größenbeschränkung
  • sehr wahrscheinlich hat das keine Auswirkungen auf Mails die via mailbox_transport an einen anderen Dienst übergeben werden
notify_classesDefiniert Klassen von Fehlern die geloggt werden sollen

Für mich sinnvoll: notify_classes=delay,software,resource,2bounce
readme_directorySinn erschließt sich mir nicht - soll ein Dokumentationsverzeichnis zur Verfügung stellen (wem ist unklar und wie auch)
message_size_limitMaximale Nachrichtengröße (inkl. Anhänge) die durch Postfix akzeptiert wird

Wert gilt für eingehende und ausgehende Nachrichten.
Angabe ist in IbiByte (1024 als Basis, nichgt 1000) und als Byte-Wert → 50 MB → 52428800)

Generelle wichtig für Mailserver

postfix.txt · Zuletzt geändert: 2014/09/07 18:23 (Externe Bearbeitung)