Erzwingen der Absenderadresse bei Postfix-Relays über SMTP

28

Ich versuche, E-Mail-Berichte von unseren AWS EC2-Instanzen abzurufen. Wir verwenden Exchange Online (Teil von Microsoft Online Services). Ich habe ein Benutzerkonto speziell für die SMTP-Weiterleitung eingerichtet und Postfix, um alle Anforderungen für die Weiterleitung von Nachrichten über diesen Server zu erfüllen. Der SMTP-Server von Exchange Online lehnt jedoch Nachrichten ab, es sei denn, die Absenderadresse stimmt genau mit der Authentifizierungsadresse überein (die Fehlermeldung lautet 550 5.7.1 Client does not have permissions to send as this sender).

Mit sorgfältiger Konfiguration kann ich meine Dienste so einrichten, dass sie als dieser Benutzer gesendet werden. Aber ich bin kein großer Fan von Vorsicht - ich hätte es lieber, wenn Postfix das Problem erzwingt. Gibt es eine Möglichkeit, dies zu tun?

John Whitlock
quelle

Antworten:

38

Dies ist, wie man es wirklich in Postfix macht.

Diese Konfiguration ändert die Absenderadressen sowohl vom lokalen als auch vom weitergeleiteten SMTP-Mail-Verkehr:

/etc/postfix/main.cf:

sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps =  regexp:/etc/postfix/sender_canonical_maps
smtp_header_checks = regexp:/etc/postfix/header_check

Schreiben Sie die Umschlagadresse aus der E-Mail, die vom Server selbst stammt, neu

/ etc / postfix / sender_canonical_maps:

/.+/    [email protected]

Schreiben Sie von der Adresse in SMTP-weitergeleiteten E-Mails um

/ etc / postfix / header_check:

/From:.*/ REPLACE From: [email protected]

Das ist sehr nützlich, wenn Sie zum Beispiel einen lokalen SMTP-Relay-Server verwenden, der von all Ihren Multifunktionsgeräten und verschiedenen Anwendungen verwendet wird.

Wenn Sie einen Office 365-SMTP-Server verwenden, werden E-Mails mit einer anderen Absenderadresse als die E-Mails des authentifizierten Benutzers einfach abgelehnt. Die obige Konfiguration verhindert dies.

Jaspis
quelle
Vielen Dank! Das sieht so aus, wie ich gesucht habe. Leider war mein Zugriff auf Office 365 vor zwei Jobs. Kann jemand bestätigen, ob dies für sie funktioniert?
John Whitlock
1
Ich kann. Ich benutze dies mit Office 365.
Jasper
1
Bei Verwendung von sender_canonical_mapsPostfix können abgelehnte E-Mails nicht auf dem lokalen Spool
Becken
2
@Jasper FYI Ich fand das einfacher, um die obigen Konfigurationszeilen zu ändern postconf -e sender_canonical_classes=envelope_sender,header_sender postconf -e sender_canonical_maps=regexp:/etc/postfix/sender_canonical_maps postconf -e smtp_header_checks=regexp:/etc/postfix/header_check
Jacob Evans
hatte ein ähnliches Problem, sender_canonical_classes = envelope_sender hat meinen Tag gerettet!
Stephan Richter
13

Die optionale generische Tabelle gibt eine Adresszuordnung an, die gilt, wenn E-Mails vom Server zugestellt (gesendet) werden.

Dies ist das Gegenteil der kanonischen Zuordnung, die angewendet wird, wenn E-Mails vom Server empfangen werden.

(Hinweis: Sowohl FROM- als auch TO-Adressen werden abgeglichen, um generische und kanonische Tabellen zu ersetzen.)

Die Verwendung der kanonischen Tabelle, wenn E-Mails vom Server empfangen werden, ist bereits erklärt, andere Antworten.

Sie können FROM-Adressen neu schreiben, wenn E-Mails vom Server mit gesendet werden smtp_generic_maps.

Laut postfix dokumentation :

/etc/postfix/main.cf:
    smtp_generic_maps = hash:/etc/postfix/generic

/etc/postfix/generic:
    [email protected]      [email protected]
    @localdomain.local          [email protected]

Dann mach:

sudo postmap /etc/postfix/generic
sudo /etc/init.d/postfix reload

Verweise:

Jocelyn
quelle
1
Das funktioniert, aber wie kann ich auch den FROM-Namen ändern?
Joanna Mikalai
Meine Erfahrung mit generischen Karten ist, dass sie sowohl FROM- als auch TO-Adressen identifizieren und kanonische Karten verwenden, um nur die FROM-Adresse zu erzwingen, nach der das OP gefragt hat
doz87
Ist es möglich, die Mail des Absenders zu ändern und die Absenderadressen mit Regex abzugleichen?
WM
@ doz87 FROM und TO werden von kanonischen und generischen Maps abgeglichen. Ich habe meine Antwort aktualisiert, um den Unterschied zwischen den beiden Karten zu erklären.
Jocelyn
@WM ja, du kannst regexp benutzen. Ich versuchte es nie , aber sie würde wahrscheinlich ändern müssen , hash:um regexp:in main.cf und Verwendung Linien wie /foo.*@localdomain.local/ [email protected]in generischen Karte. Dies wird in der Manpage erklärt: postfix.org/generic.5.html
Jocelyn
7

Update: Auf Anraten eines IT-Freundes führe ich Postfix auf allen meinen Servern aus, anstatt nur einen Cloud-Mail-Server zu erstellen. Hier ist meine Lösung bis jetzt:

/etc/postfix/main.cf

# output of hostname -f - mail from local users appears to come from here
myhostname = domU-01-02-03-04-05-06.compute-1.internal
# Local delivery - include all 127.0.0.1 aliases from /etc/hosts
mydestination = $myhostname, $mydomain, rest_of_entries_from_hosts
# Needed for address translation to work
myorigin = $mydomain

# Talking to MS Online
# :submission = port 587
relayhost = [smtp.mail.microsoftonline.com]:submission
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =   # Yes, leave empty
smtp_tls_security_level = encrypt
smtp_generic_maps = hash:/etc/postfix/generic

# Enable if you need debugging, but it does leak credentials to the log
#debug_peer_level = 2
#debug_peer_list = smtp.mail.microsoftonline.com

# Only listen on the local interfaces (not the public)
inet_interfaces = localhost

# I left out a bunch of CentOS defaults.  postconf -n is your friend.
# These are included
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

/etc/postfix/sasl_passwd

# Run postmap /etc/postfix/sasl_passwd after editing
# Also, chown root:root; chmod 600
smtp.mail.microsoftonline.com [email protected]:YourP@ssw0rd

/etc/postfix/generic

# Run postmap /etc/postfix/generic
# I've seen local mail come from either source
# output of dnsdomainname
@compute-1.internal [email protected]
# output of hostname -f
@domU-01-02-03-04-05-06.compute-1.internal [email protected]

/etc/aliases

# Run newaliases after changing
# Lot of stuff here. Mostly, just make sure the graph points to root, such as
mailer-daemon:  postmaster
postmaster:     root

# And the important part - your email or distribution group
root:           [email protected]

/etc/passwd

# Sometimes it helps to expand the name, so email comes from 'root at aws host 5'
#  rather than just 'root'
# Was
#root:x:0:0:root:/root:/bin/bash
# Is
root:x:0:0:root on aws host 5:/root:/bin/bash

Dinge, über die ich mich freue:

  • Eine Menge E-Mails werden an root gesendet, und die eine Zeile in gibt an, aliaswer sie erhält.
  • Alle E-Mails von lokalen Benutzern werden in E-Mails von übersetzt [email protected], sodass sie über den MS Online SMTP-Server abgerufen werden.
  • Postfix hat eine viel bessere Dokumentation als Sendmail.

Dinge, über die ich nicht glücklich bin:

  • Für jeden Host sind benutzerdefinierte Änderungen und mehrere Schritte erforderlich. Ich habe ein Bash-Skript geschrieben, um zu helfen.
  • Der passwdName-Trick funktioniert nicht immer und es kann schwierig sein herauszufinden, von welchem ​​Server eine Mail kommt.
  • Jede gesendete E-Mail fügt drei Warnungen in das Protokoll ein:
    1. warning: smtp.mail.microsoftonline.com[65.55.171.153] offered null AUTH mechanism list(SMTP-Server sendet AUTHvorher STARTTLS, aber AUTH LOGINnachher eine Nullliste ).
    2. certificate verification failed for smtp.mail.microsoftonline.com: num=20:unable to get local issuer certificate (Es gibt einige Konfigurationsoptionen für Zertifikate, aber ich bin mir nicht sicher, ob die E-Mail-Zustellung bei Erneuerung des Zertifikats unterbrochen wird.)
    3. certificate verification failed for smtp.mail.microsoftonline.com: num=27:certificate not trusted (Wie # 2)

Vielen Dank an die serverfault-Community für den Austausch starker Meinungen zu Mailservern.

John Whitlock
quelle
4

Sie können smtpd_sender_login_maps verwenden , um eine Liste von Zuordnungen anzugeben: Absenderadresse - Benutzer.

Beispiel:

smtpd_sender_login_maps = 
    hash:/etc/postfix/login-map 

/ etc / postfix / login-map:

mail1@domain    userlogin
mail2@domain    userlogin, [email protected]

Es funktioniert für das Senden, es sollte für das Weiterleiten auf die gleiche Weise funktionieren.

die Seide
quelle
Soll die Absenderadresse zur Wartezeit neu geschrieben werden? Mein Eindruck ist, dass smtpd_sender_login_maps verwendet wird, um Absender abzulehnen (als Teil von smtpd_sender_restrictions) und nicht, um Anmeldungen in E-Mail-Adressen zu übersetzen. Wenn diese echo "This is a test" | /usr/sbin/sendmail [email protected]Option aktiviert ist, wird die E-Mail immer noch als von[email protected]
John Whitlock
Meine schlechte, ich habe irgendwie verstanden, dass Sie zu Ihrem Postfix autorisieren. In diesem Fall würde smtpd_sender_login_maps einschränken, welcher Benutzer welche Absenderadresse verwenden kann.
Seide
Dies könnte Teil meiner Endlösung sein. Ich könnte alle Absender außer der einen Absenderadresse am Frontend ablehnen und den Postmaster über abgelehnte Frontends informieren, um mich zu informieren, wenn ein Dienst noch nicht richtig konfiguriert ist. Ich schaue auf smtp_generic_maps, um zu sehen, ob ich sie verwenden kann, um alle lokalen Konten in die One True From-Adresse zu ändern. Ich muss jedoch die Postfix-Dokumente erneut lesen, um zu verstehen, wie lokale Konten ermittelt werden - AWS DNS entspricht nicht meiner Intuition.
John Whitlock
0

Ich verwende die kanonische Zuordnung , um die Absenderadresse umzuschreiben, z. B. root @ app01 in [email protected].

ZHANG Cheng
quelle
3
Willkommen bei Server Fault! Wir bevorzugen wirklich, dass Antworten Inhalte enthalten, die nicht auf Inhalte verweisen. Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
user9517 unterstützt GoFundMonica