Postfix: Zulässige Absenderadressen eingrenzen

Ganz neu ist es nicht mehr, dass man sich zum Versenden von E-Mails am Mailserver anmelden muss. Zur Konfiguration eines Postfix-Mailservers mit SMTP-Auth gibt es auch reichlich Anleitungen im Internet. Die meisten Anleitungen zeigen eher kurze Ausschnitte von Konfigurationsparametern. So ist es dann auch nicht weiter verwunderlich, dass manche Mailer mit den exemplarischen Werten konfiguriert wurden. Das reicht oftmals, ist aber nicht immer die beste Lösung. Gehen wir von folgender Konfiguration in der main.cf aus:

# Postfix ≥ 2.10
smtpd_relay_restrictions =
  permit_mynetworks
  permit_sasl_authenticated
  reject_unauth_destination

# Postfix < 2.10
smtpd_recipient_restrictions =
  permit_mynetworks
  permit_sasl_authenticated
  reject_unauth_destination

Mit dieser Konfiguration kann jeder Anwender, mit gültigen Zugangsdaten, E-Mails über den Mailserver versenden. Dabei spielt es nicht einmal eine Rolle, welchen Envelope Sender der Anwender dabei wählt. Folglich kann nicht nur joe@kopfkrebs.de E-Mails als jane@kopfkrebs.de versenden, auch ein Schadprogramm kann sich munter austoben.

Denken wir kurz um; E-Mails lesen via IMAP. In dieser Situation kann joe@kopfkrebs.de nur die E-Mails lesen, die an ihn adressiert sind oder die ihn über eine Alias-Adresse, zum Beispiel sales@kopfkrebs.de, erreichen. Also sollte joe@kopfkrebs.de auch nur in der Lage sein, beim E-Mailversand die Adressen joe@kopfkrebs.de und sales@kopfkrebs.de als Envelope Sender zu verwenden.

Da Postfix einfach zu konfigurieren ist, lässt sich die Absender-Prüfung einfach einrichten. Zuerst bedarf es einer Quelle, in der Postfix zulässige SASL-Login-Namen, passende zum Envelope Sender, nachschlagen kann. Wenn Postfix, anhand des Envelope Senders, die Quelle befragt, werden — sofern vorhanden — ein oder mehrere gültige SASL-Login-Namen als Ergebnis zurückgeliefert.

Die Quelle muss also für jede Adresse die zulässigen Login-Namen kennen. Wenn es in der Domain kopfkrebs.de die Accounts für Jane und Joe, sowie den Alias sales@kopfkrebs.de, mit dem Ziel joe@kopfkrebs.de, gäbe, müsste die Quelle folgenden Inhalt haben:

# /etc/postfix/smtpd_sender_login_map.in
# Envelope Sender     login
jane@kopfkrebs.de     jane@kopfkrebs.de
joe@kopfkrebs.de      joe@kopfkrebs.de
sales@kopfkrebs.de    joe@kopfkrebs.de

Je nach Typ der Quelle, muss die Datei eventuell noch mit postmap(1) — besser jedoch mittels make und einem Makefile — behandelt werden.

Postfix’ main.cf wird um die Zeile smtpd_sender_login_maps = ${default_database_type}:${config_directory}/smtpd_sender_login_map ergänzt.

Die smtpd_relay_restrictions, beziehungsweise smtpd_recipient_restrictions, werden wie folgt ergänzt:

smtpd_relay_restrictions =
  permit_mynetworks
  reject_unauthenticated_sender_login_mismatch
  reject_authenticated_sender_login_mismatch
  reject_sender_login_mismatch
  permit_sasl_authenticated
  reject_unauth_destination

Nachdem die Änderungen in der main.cf durch Speichern der Datei übernommen wurden, musst Postfix noch dazu bewegt werden, die Konfiguration neu einzulesen: postfix reload

Die Datei smtpd_sender_login_map.in muss von jetzt an immer dann geändert werden, wenn:

  • ein Alias ergänzt/geändert wird
  • ein Alias hinzukommt oder gelöscht wird
  • ein Account angelegt oder gelöscht wird
  • eine Alias-Domain hinzukommt, geändert oder gelöscht wird

Das Ganze geht natürlich wesentlich einfacher. Wer vmm zum Verwalten virtueller Domains einsetzt, spart jeweils einige Schritte. In die main.cf kommt dann die Zeile: smtpd_sender_login_maps = ${proxysql}pgsql-smtpd_sender_login_maps.cf. Dann werden noch die proxy_read_maps um $smtpd_sender_login_maps ergänzt. Abschließend werden noch die smtpd_relay_restrictions, beziehungsweise smtpd_recipient_restrictions, wie oben gezeigt, erweitert.

Jede Änderung der E-Mail-Bestandsdaten ist sofort wirksam und für Postfix sichtbar.

Von jetzt an erinnert Postfix den Anwender, wenn er vergisst sich anzumelden. Hat sich der Anwender authentifiziert, verwendet aber den falschen™ Envelope Sender, wird Postfix die E-Mail mit einem entsprechenden Hinweis ablehnen.