Postfix als Mail-Gateway / Smart Host / Relay-Server

Manchmal ist es sinnvoll, E-Mails von einem Server aus nicht direkt in das Internet zu verschicken, sondern ein E-Mail Gateway / einen Postfix-Relayserver zu nutzen. Der absendende Server funktioniert dann wie ein normaler E-Mail Client und schickt seine E-Mail zuerst an einen zentralen Mailserver, der diese dann an das Ziel weiterleitet. Das kann z.B. aus folgenden Gründen sinnvoll sein:

  • Ein Server an einem DSL-Anschluss soll E-Mails versenden. Ein direkter Versand wird aus verschiedenen Gründen nicht empfohlen (Dynamische IP-Adresse, kein passendes Reverse DNS, …)
  • Mehrere Server werden betrieben. Um nur einen einzigen Mailserver mit seinen Komponenten warten zu müssen, soll ein zentrales E-Mail Gateway genutzt werden. DKIM müsste dann z.B. nur für das Gateway eingerichtet werden, und nicht für jeden sendenden Server einzeln.

Ich beschreibe hier im folgenden, wie ihr einen bereits bestehenden Postfix-Mailserver zu einem Gateway erweitern könnt, und wie ihr Postfix auf allen anderen Servern einrichtet. Den bereits eingerichteten Postfix-Server nenne ich “Gateway”; alle anderen Server werden “Clients” genannt (da sie hier nur eine Rolle als Mailclients spielen").

Authentifizierung

Die Authentifizierung des Clients gegenüber dem Gateway kann auf zwei verschiedene Arten erfolgen:

  1. Freigabe der Client-IP auf dem Gateway via “mynetworks”
  2. SMTP-Auth des Clients mittels Mailbox-Account auf dem Gateway-Server (wie bei üblichen Mailclients für den Anwender)

Die Authentifizierung über die IP-Adresse ist praktischer, aber nur möglich, wenn die Adresse des Clients nicht wechselt und garantiert gleich bleibt. Gateway vorbereiten

Das Gateway muss nur konfiguriert werden, wenn über die IP-Adresse des Clients authentifiziert werden soll. (Variante #1) Die IP-Adressen des Clients werden dann am Gateway unter “mynetworks” eingetragen. Bei einer korrekten Gesamtkonfiguration ist dieser Server dann von relevanten Beschränkungen freigestellt, die für alle anderen Mailclients gelten. Beispiel:

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
             5.1.76.155/32 [2a00:f820:417::be19:7b23]/128

Durch die zweite Zeile erhält der Client mit den passenden Adressen Zugriff auf das Gateway und kann über dieses beliebig versenden.

Client konfigurieren

Nun muss Postfix auf dem Client (dem sendenden Server) konfiguriert werden. Eine minimale Postfix-Konfiguration für den Versand sieht so aus:

Variante 1: Authentifizierung des Clients via IP-Adresse / “mynetworks”

myhostname = backupserver.mydomain.tld
inet_protocols = all
inet_interfaces = 127.0.0.1, 192.168.2.222


##
## Mail-Queue Einstellungen
##

maximal_queue_lifetime = 1h
bounce_queue_lifetime = 1h
maximal_backoff_time = 15m
minimal_backoff_time = 5m
queue_run_delay = 5m


##
## TLS
##

smtp_tls_security_level = verify
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt


##
## Relayhost
##

relayhost = gateway.mydomain.tld

Variante 2: Authentifizierung über SMTP-Auth

(… wie normaler User-Mailclient)

myhostname = backupserver.mydomain.tld
inet_protocols = all
inet_interfaces = 127.0.0.1, 192.168.2.222


##
## Mail-Queue Einstellungen
##

maximal_queue_lifetime = 1h
bounce_queue_lifetime = 1h
maximal_backoff_time = 15m
minimal_backoff_time = 5m
queue_run_delay = 5m


##
## TLS
##

smtp_tls_security_level = verify
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt


##
## Relayhost
##

relayhost = [gateway.mydomain.tld]:587


##
## Authentifizierung am Relayhost
##

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/relay_passwd
smtp_sasl_security_options = noanonymous

Mit welchem Mailbox-Account sich Postfix am Gateway-Server authentifiziert, wird in /etc/postfix/relay_passwd festgelegt. Die Datei enthält einen Eintrag, der festlegt, welcher Account am Gateway mit welchem Passwort für welchen Server verwendet werden soll:

[gateway.mydomain.tld]:587 backup@gateway.mydomain.tld:passwort

Jetzt noch ein “postmap” für die neue Datei ausführen, damit sie in ein für Postfix lesbares Format konvertiert wird:

postmap hash:/etc/postfix/relay_passwd

Vergesst nicht, die angegebene Mailbox (z.B. backup@gateway.mydomain.tld) auf eurem Gateway-Server anzulegen! ;-)

Denkt daran, dass euer Postfix bei dieser Variante über nur eine einzige Mailbox sendet! Das kann bedeuten, dass ihr nur zugordnete Mailadressen als Absender angeben könnt - andernfalls akzeptiert der Gateway-Server eure Mails möglicherweise nicht.

Funktion überprüfen

Startet dann Postfix an eurem Client (und ggf. auch am Gateway) neu. Ihr könnt die Funktion überprüfen, indem ihr vom Client aus eine Mail schickt:

echo "Dies ist eine Testmail." | mailx -r backup@gateway.mydomain.tld -s "Gateway-Testmail" postmaster@gateway.mydomain.tld

Sollte keine E-Mail an der Zieladresse eintreffen, lohnt es sich, einen Blick in die Logfiles beider beteiligter Postfix-Instanzen zu werfen (Gateway und Client).