it-swarm.com.de

Erzwingen der Absenderadresse, wenn Postfix über SMTP weitergeleitet wird

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 SMTP-Weiterleitung eingerichtet und Postfix eingerichtet, 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).

Bei 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 lieber Postfix, um das Problem zu erzwingen. Gibt es eine Möglichkeit, dies zu tun?

29
John Whitlock

So geht das wirklich in Postfix.

Diese Konfiguration ändert Absenderadressen sowohl vom lokal stammenden als auch vom weitergeleiteten SMTP-E-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 E-Mails neu, die vom Server selbst stammen

/ etc/postfix/sender_canonical_maps:

/.+/    [email protected]

Schreiben Sie die Adresse in der SMTP-weitergeleiteten E-Mail neu

/ etc/postfix/header_check:

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

Das ist sehr nützlich, wenn Sie beispielsweise einen lokalen Relay-SMTP-Server verwenden, der von all Ihren Multifunktionalen und mehreren Anwendungen verwendet wird.

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

44
Jasper

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

Dies ist das Gegenteil von kanonischer Zuordnung, die gilt, wenn E-Mails vom Server empfangen werden.

(Hinweis: Sowohl FROM- als auch TO-Adressen werden zum Ersetzen einer generischen und einer kanonischen Tabelle abgeglichen.)

Die Verwendung der kanonischen Tabelle, wenn E-Mails vom Server empfangen werden , ist bereits erläutert. Weitere Antworten sind.

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

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:

13
Jocelyn

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

/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]:[email protected]

/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:

  • Viele E-Mails werden an root gesendet, und die eine Zeile in alias gibt an, wer sie erhält.
  • Alle E-Mails von lokalen Benutzern werden von [email protected] Übersetzt, sodass sie über den MS Online SMTP-Server gesendet 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 Name-Trick passwd funktioniert nicht immer und es kann schwierig sein, herauszufinden, von welchem ​​Server eine E-Mail kommt.
  • Jede gesendete Mail enthält drei Warnungen im Protokoll:
    1. warning: smtp.mail.microsoftonline.com[65.55.171.153] offered null AUTH mechanism list (SMTP-Server sendet eine Nullliste AUTH vor STARTTLS, danach jedoch AUTH LOGIN).
    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 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.

7
John Whitlock

Mit smtpd_sender_login_maps können Sie eine Liste von Maps angeben: Absenderadresse - Benutzer.

Beispiel:

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

/ etc/postfix/login-map:

[email protected]    userlogin
[email protected]    userlogin, [email protected]

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

4
silk

Ich verwende kanonisches Mapping , um die Absenderadresse neu zu schreiben, z. B. um root @ app01 in [email protected] umzuschreiben.

0
ZHANG Cheng