Dies ist eine alte Version des Dokuments!
Anbindung unseres MTAs Postfix 2.11 an einem Backend-Mailserver (Dovecot-IMAP-Server) unter CentOS7
In der Regel werden wir hinter unserem eigentlichen SMTP-Mailserver ein Backend System, so z.B. einen Dovecot-Server, bereithalten, von welchem unsere User ihre elektronische Post abholen. Damit unser Mailserver Postfix, der die Nachrichten von fremden Mailserver annimmt, bewertet und prüft, auch an unser internes Postoffice weiterleiten kann, sind noch Ergänzungen an der Konfiguration des Postfix-Mailservers notwendig.
Hier kommt es nun im Detail darauf an, auf welchen Hosts unser Postfix-SMTP-Server und wo der Dovecot-IMAP-Server betrieben wird.
dovecot-lda - MTA und MDA auf gleichem Host
Will man „nur“ einen kleinen Mailserver betreiben, bietet sich augenscheinlich als praktikabelste und einfachste Lösung die Methode via dovecot-lda.
Konfiguration
In der Postfix-Konfigurationsdatei /etc/postfix/master.cf tragen wir am Ende folgende Zeilen nach.
# vim /etc/postfix/master.cf
... # ==================================================================== # # Django : 2014-11-04 lovecot-lda aktiviert dovecot unix - n n - 5 pipe flags=DRhu user=vmail argv=/usr/libexec/dovecot/dovecot-lda -f ${sender} -d ${mailbox} # # ==================================================================== ...
In der /etc/postfix/main.cf tragen wir in der Section ROUTING _ WEITERLEITEN VON NACHRICHTEN AN DAS EIGENTLICHE ZIEL noch folgende Optionen ein.
# vim /etc/postfix/main.cf
... ################################################################################ ## ROUTING _ WEITERLEITEN VON NACHRICHTEN AN DAS EIGENTLICHE ZIEL # # Django : 2014-10-15 - Relayhost: Alle Nachrichten werden an den Relayhost # smtp-out.dmz.nausch.org gesendet. # default: relayhost = # relayhost = [smtp-out.dmz.nausch.org] # Django : 2014-10-15 - Backup-Relayhost: Sollte der $relayhost nicht erreichbar # sein, soll sich unser MTA an den backup-relayhost # smtp-backup.dmz.nausch.org senden # default: smtp_fallback_relay = $fallback_relay # smtp_fallback_relay = [smtp-backup.dmz.nausch.org] # Django : 2014-10-15 - Relay Domains: Postfix als eingehendes Mailrelay vor # einem anderen Server # default: relay_domains = $mydestination relay_domains = btree:/etc/postfix/relay_domains # Django : 2014-10-15 - Nachrichten für eine bestimmte Richtung sollen # abweichend von den MX-Definitionen im DNS an dedizierte Ziele # geroutet/weitergeleitet werden. # default: transport_maps = transport_maps = btree:/etc/postfix/transport_maps # Django : 2014-11-04 - Lokale Zustellung via pipe an den Dienst dovecot-lda zu # unserem Dovecot-IMAP/POP3-Server # default: mailbox_transport = # dovecot_destination_recipient_limit = 1 mailbox_transport = cyrus ...
Damit nun unser Postfix SMTP-Server auch diese Zustellungsart verwendet kann, benötigen wir noch einen Eintrag in der transport-Tabelle. Diesen fürgen wir nun noch ans Ende der Datei ein.
# vim /etc/postfix/transport_maps
- /etc/postfix/transport_maps
# Kapitel 5.2.5 transport-Tabelle: Abweichende Zustellung # Lookup-Tabelle zum Aktivieren einer alternativen Mailrouting bei der # Zustellung an einen weiteren Mailserver. Nach dem Ändern und/oder # Erweitern der Tabelle, muß noch mittels: # $ postmap /etc/postfix/transport_map # # die zugehörige Datenbank erzeugt werden. # # Alle eMails, die an Subdomains von nausch.org gerichtet sind # ("." am Anfang der Zeile!) werden an den/die Mailserver von # intra.nausch.org (MX-Records) weitergeleitet. (keine "["-Klammern!) #.nausch.org smtp:intra.nausch.org # Alle eMails, die an die Domain tachtler.net gerichtet sind, werden an # den bzw. die Mailserver der Mail-Domäne t-offline.de (MX-Records) # weitergeleitet. (keine "["-Klammern!) # tachtler.net smtp:t-offline.de # Mails an backup.nausch.org werden an den Mailserver (A-Record) auf Port 25 # mit Namen mail.intra.nausch.org geschickt. #backup.nausch.org smtp:[mail.intra.nausch.org]:25 # Django : 2013-02-21 # eMails an den Fax-Server an den Host vml000020 weiterleiten fax.nausch.org smtp:[10.0.0.20]:25 # eMails an den Key-Server sollen an den Host vml000030 weitergeleitet # werden. keyserver.nausch.org smtp:[10.0.0.30]:25 # Django : 2013-02-22 # eMails an den Mailinglisten-Server an das Programm mailman weiterreichen #lists.nausch.org mailman: # Django : 2014-11-04 # eMails der Maildomäne nausch.org an das Programm dovecot-lda weiterleiten nausch.org dovecot:
WICHTIG:
Diese Art der Anbindung ist jedoch nicht zu empfehlen und zwar aus folgenden drei Gründen!
- Der Mailtransport ist nicht sehr performant, da für jede Mailzustellung ein separater Prozess gestartet werden.
- Sind eMails mit mehreren Empfängern an den Dovecot-Server zu übergeben, so muss diese eMail entsprechend oft einzeln an jeden Empfänger übergeben werden.
- Eine dynamische Empfängervalidierung ist bei dovecot-lda nicht möglich!
Darüber hinaus ist bei einer eventuell späteren Migration des Dovecot-IMAP-Servers auf einen separaten Server der Umprogrammierungsaufwand ungemein größer, als bei der nachfolgend beschriebenen Anbindungsvariante via LMTP. Also empfiehlt es sich lieber gleich, es vernünftig und richtig zu machen! ;)
LMTP - MTA und MDA auf gleichem bzw. getrennten Host(s)
Postfix (LMTP)
Da unser Mailserver nicht nur für die Hauptdomäne nausch.org eMails annehmen soll, sondern auch für die anderen (sub)Domains, erweiteren wir unsere Postfix-Konfiguration um ein paar Optionen.
Postfix nimmt immer dann Post außerhalb unseres $mynetworks an, wenn er sich zuständig fühlt. Hierzu kennt Postfix drei Klassen von Domains:
- echte Domains $mydestination
Diese Variante haben wir schon bei der Installation eines sicheren Mailservers mit Postfix unter CentOS 7.x erschlagen. - zu relayende Domains $relay_domains
Mit diese Variante haben wir uns bereits bei der Anbingung unseres Mailservers an ein Backend-Mailgateway im Kapitel Anbindung an einem Backend-Mailserver (Cyrus-IMAP-Server) befasst. - virtuelle Domains $virtual_alias_domains
Eine alternative Einbindung virtueller Domains ist die Verwendung von virtual_alias_domains und virtual_alias_maps
Wichtig: Dabei ist es logisch ausgeschlossen, daß eine Domain mehreren dieser Klassen angehört. Also immer nur einer, aber niemals zwei oder gar drei!
Da wir unsere Maildomänen und Nutzerkonten mit Hilfe von Postfixadmin zur Verwaltung des Dovecot-IMAP-Server unter CentOS 7.x nutzen, werden wir die Option 3, also $virtual_alias_domains verwenden.
Konfiguration
In der Postfix-Konfigurationsdatei /etc/postfix/main.cf definieren wir also die nötigen Optionen zur Nutzung der virtuelle Mailboxen. Unsere Änderungen tragen wir in die Section LOOKUP-TABELLEN ein.
# vim /etc/postfix/main.cf
... # Django : 2014-10-15 - virtuelle Mail-Domains und Mailboxen mit Anbindung an # das mySQL-Datenbankbackend (Verwaltung mit Hilfe von postfixadmin) # default: virtual_mailbox_domains = $virtual_mailbox_maps # virtual_alias_maps = $virtual_maps # virtual_mailbox_maps = virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf proxy:mysql:/etc/postfix/mysql_virtual_alias_domain_maps.cf proxy:mysql:/etc/postfix/mysql_virtual_alias_domain_catchall_maps.cf # virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf proxy:mysql:/etc/postfix/mysql_virtual_alias_domain_mailbox_maps.cf ...
Für den Transport definieren wir nun den virtual_transport in Richtung Dovecot-Server, in unserem Konfigurationsbeispiel der Host mit der IP-adresse 10.0.0.77. Diese tragen wir in der Section ROUTING _ WEITERLEITEN VON NACHRICHTEN AN DAS EIGENTLICHE ZIEL nach.
# vim /etc/postfix/main.cf
... # Django : 2014-10-15 - Definition zur Erreichbarkeit unseres MDA-Servers # Dovecot-IMAP # default: virtual_transport = virtual virtual_transport = lmtp:[10.0.0.77]:24