Wie erzwinge ich, dass die Absenderadresse in Postfix "eingeloggt-inbenutzer@beispiel.org" ist?


15

Ich habe einen Postfix-Server mit SMTP AUTH eingerichtet (STARTTLS an Port 587). Alle meine Benutzer befinden sich in der Domain "example.org". Ich möchte erzwingen, dass die Absenderadresse "eingeloggt-inBenutzer@Beispiel.org" ist.

Ich habe gelernt, dass dies mit den Optionen main.cf erreicht werden kann

smtpd_sender_restrictions = reject_sender_login_mismatch, ...
smtpd_sender_login_maps = hash:/etc/postfix/smtpd_sender_login_maps

mit einer login_maps Datei wie:

a@example.org a
b@example.org b
c@example.org c
...

(Siehe auch Spoofing von Absenderadressen mit SMPT AUTH blockieren ), aber dies würde bedeuten, dass ich die Datei login_maps jedes Mal bearbeiten muss, wenn ich einen neuen Benutzer habe. Ich brauche kein so flexibles Mapping: Es sollte immer "eingeloggt-inbenutzer@beispiel.org" sein. Gibt es eine einfachere Möglichkeit?

Antworten:


14

Überprüfen Sie zunächst, ob Ihre Postfix-Installation pcre unterstützt, indem Sie den Befehl eingeben postconf -mund nach einer Zeile mit pcredarin suchen . Sobald Sie überprüft haben, dass Sie pcre-Unterstützung haben, können Sie wie folgt vorgehen:

/etc/postfix/login_maps.pcre:

/^(.*)@example\.org$/   ${1}

In main.cf:

smtpd_sender_login_maps = pcre:/etc/postfix/login_maps.pcre

Dies sollte gut funktionieren.


Dies ist perfekt. Genau das, wonach ich gesucht habe!
Chris Lercher

3
Für Ubuntu-Benutzer können Sie postfix pcre mit bekommen sudo apt-get install postfix-pcre. Vielleicht war das für die meisten offensichtlich.
NeilMonday

Keine Möglichkeit, die Domäne in der Regex- oder Referenzvariablen auszulassen $myhostname?. Hier können Sie sehen, dass Postfix in der Lage ist, die Nachschlagetabelle nach dem Benutzerteil der E-Mail zu durchsuchen ...
Jaime Hablutzel

Ich glaube, Sie wollen dem "Backslash" entkommen. Zeichen im Domain-Namen, so dass es als wörtliche Übereinstimmung interpretiert wird: /^(.*)@example\.org$/
Arnon

Andernfalls entspricht dies "test @ exampleXorg" sowie "test@example.org", was möglicherweise nicht genau dem beabsichtigten Verhalten entspricht.
Arnon

6

Der in der anderen Antwort erwähnte reguläre Ausdruck stimmt mit dem Benutzerteil der E-Mail-Adresse überein ( Eingeloggter Benutzer @ example.org). Hier finden Sie einige zusätzliche Informationen.

Verwenden Sie den folgenden regulären Ausdruck (zum Beispiel in /etc/postfix/login_map), um die vollständige E-Mail-Adresse als Benutzernamen zu verwenden :

/^(.*)$/   ${1}

Dies bedeutet, dass Ihr Benutzername immer Ihre vollständige E-Mail-Adresse ist ( eingeloggt-in-Benutzer@Beispiel.org ) - von dieser Adresse darf kein anderer vorhandener Benutzername gesendet werden - und Sie müssen nicht jedes Mal eine zusätzliche Postfix-Konfigurationsdatei aktualisieren Einen Benutzer hinzufügen.

Dies kann auf einem Server verwendet werden, auf dem mehrere Domänen konfiguriert sind. Der Benutzer john.doe@example.com darf nur von dieser Adresse senden, nicht jedoch von john.doe@example.org (anderer Benutzer und E-Mail- Adresse , andere Person). Der Benutzername john.doe wäre in diesem Fall nicht eindeutig.

Abhängig von Ihrer Konfiguration befindet sich die Einstellung smtpd_sender_login_maps, die auf diese Datei verweisen muss, möglicherweise in der Datei master.cf (anstelle der Datei main.cf). Die offizielle Dovecot-Dokumentation enthält das folgende Beispiel (wenn Sie SASL / Submission verwenden):

submission inet n - n - - smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_sasl_local_domain=$myhostname
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_sender_login_maps=hash:/etc/postfix/virtual
  -o smtpd_sender_restrictions=reject_sender_login_mismatch
  -o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject

In diesem Beispiel sollte die Einstellung so angepasst werden, dass sie auf die richtige Datei zeigt und Regex oder (besser) pcre als Typ verwendet. Insbesondere wenn eine Datei mit dem Namen "virtual" bereits für einen anderen Zweck verwendet wird (zum Beispiel für virtual_alias_maps, wie in einem offiziellen Postfix-Beispiel gezeigt ), sollte eine andere Datei für das Login-Mapping verwendet werden.

Von:

smtpd_sender_login_maps=hash:/etc/postfix/virtual

Zu:

smtpd_sender_login_maps=pcre:/etc/postfix/login_map

0

Können Sie eine Kombination von regulären Ausdrücken für den Header verwenden, wie hier gezeigt: http://www.akadia.com/services/postfix_uce.html ? Dann können Sie mit regulären Ausdrücken wie [*@example.org] kombinieren, um sicherzustellen, dass nur Absender von example.org vorhanden sind.


Nehmen wir an, ich kann "regexp:" hier verwenden (?). Wie kann ich den regulären Ausdruck so festlegen, dass Benutzer "a" als "a@example.org" senden kann, aber nicht als "b@example.org"?
Chris Lercher

@sonstabo es wäre schön, wenn Sie das Konfigurationsbeispiel
einschließen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.