Vor einiger Zeit hatte ich es hinbekommen, dass eine Maschine nicht-lokale Emails (mittels Postfix) an einen anderen lokalen Mail-Server übermittelt, welcher dann die Mail u.U. nach “außen” relayed.

Leider habe ich festgestellt, dass ich die Konfiguration wohl wieder weggeschmissen habe, daher versuche ich es nun nochmal und dokumentiere es gleichzeitig hier.

Also…

Situation

Eine lokale Maschine, nennen wir sie “beebo”, soll Emails sowohl lokal zustellen (für Empfänger der Form ‘user@beebo’) als auch zu einem SMTP-Server übertragen (für Empfänger der Form ‘user@somewhere.tld’) damit dieser sie dann über einen externen SMTP-Server zustellen kann, sog. “Relaying”.

Problem: Normalerweise sind die Installationen von Postfix so eingestellt, dass sie genau das nicht machen, weil man sonst ein sog. “Open Relay” haben könnte, gemeinhin als “Spam-Schleuder” bekannt. Genau das will ich natürlich nicht haben…

Einrichten von Postfix auf dem Relay

Mein Relay wird Postfix verwenden und auf einem Rechner installiert sein, der “cubie” heißen soll.

Folgende Dateien werden angepasst:

/etc/postfix/generic: Enthält das Mapping für Email-Addressen, wenn diese hinausgeschickt werden, d.h. aus “szillat@beebo” wird dann “holger.szillat@posteo.de”.

@beebo.lightyear         holger.szillat@posteo.de

/etc/postfix/canonical: Enthält das Mapping für Email-Addressen, wenn diese empfangen werden, d.h. aus “holger.szillat@posteo.de” würde “szillat@beebo” werden. Da ich das aber nicht will, bleibt “canonical” leer.

/etc/postfix/transport: Enthält die Regeln, wie mit welchem Server, welche Ziel- addresse angesprochen werden soll:

cubie.lightyear :
.lightyear      :
*           smtp:[smtp.posteo.de]:587

Hier heißt das, dass alle lokalen Mails (“@cubie.lightyear”) lokal bleiben, ebenso alle, die an die Domain (“@lightyear”) gerichtet sind, und alle anderen werden an den SMTP-Server von Posteo.de übergeben.

/etc/postfix/sasl_passwd: In dieser Datei steht die Passwörter für die entsprechenden SMTP-Server, hier gibt es eben nur einen, den von posteo.de:

[smtp.posteo.de]:587    holger.szillat@posteo.de:VeryS3cretPassword!?

Die Datei sollte nur von ‘root’ lesbar sein, alle anderen brauchen keinen Zugriff darauf!

/etc/postfix/main.cf: Die Hauptlast trägt natürlich die Haupt-Konfigurations-datei von Postfix. Wichtig ist, dass die entsprechenden oben genannten Dateien durch ‘postmap’ geschickt werden.

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_security_level = may

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = cubie.lightyear
mydomain = lightyear
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
relayhost = smtp.lightyear
relay_domains = $mydestination
mynetworks = 192.168.1.0/24 127.0.0.0/8
mynetworks_style = subnet
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
mailbox_command = /usr/lib/dovecot/deliver
home_mailbox = mail/
local_recipient_maps = unix:passwd.byname $alias_maps

inet_protocols = ipv4

transport_maps = hash:/etc/postfix/transport
smtp_generic_maps = hash:/etc/postfix/generic

Nun nur noch Postfix durchstarten, dann sollte ein kleiner Test mit “szillat@cubie” und “hszillat@gmail.com” zum Erfolg führen und die entsprechenden Mails an die Empfänger schicken.

Einrichten von Postfix auf dem Client

Auf dem Client muss Postfix eigentlich nur so konfiguriert werden, dass lokale Mails lokal bleiben, während andere Mails an das Relay gesendet werden. Das geht mittels der ‘transport’ Datei. (Nicht vergessen: Die Dateien sollten noch durch ‘postmap’ gejagt werden!)

/etc/postfix/transport:

beebo.lightyear :
localhost       :
localhost.localdomain :
localhost.lightyear :
*           smtp:smtp.lightyear:25

/etc/postfix/main.cf: An die Haupt-konfiguration muss dann eigentlich nur noch die Anweisung angefügt werden, wie der Transport erfolgen soll:

transport_maps = hash:/etc/postfix/transport
smtp_generic_maps = hash:/etc/postfix/generic

Die Angabe für ‘generic’ ist eigentlich unnötig. Der springende Punkt erfolgt in der Transport-Datei.

Referenzen