Erzwingen der Absenderadresse bei der Weiterleitung von Postfix über SMTP

Erzwingen der Absenderadresse bei der Weiterleitung von Postfix über SMTP

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ürSMTP-Relaying, und ich habe Postfix so eingerichtet, dass alle Anforderungen für die Weiterleitung von Nachrichten über diesen Server erfüllt sind. Der SMTP-Server von Exchange Online lehnt jedoch Nachrichten ab, sofern die Absenderadresse nicht genau mit der Authentifizierungsadresse übereinstimmt (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 senden. Aber ich bin kein großer Fan von Vorsicht – ich würde das Problem lieber von Postfix erzwingen lassen. Gibt es eine Möglichkeit, dies zu tun?

Antwort1

So geht das wirklich in Postfix.

Diese Konfiguration ändert die Absenderadressen sowohl des lokal erzeugten als auch des weitergeleiteten SMTP-Mailverkehrs:

/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

Umschreiben der Umschlagadresse aus E-Mails, die vom Server selbst stammen

/etc/postfix/sender_canonical_maps:

/.+/    [email protected]

Umschreiben der Absenderadresse in per SMTP weitergeleiteten E-Mails

/etc/postfix/header_check:

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

Dies ist sehr nützlich, wenn Sie beispielsweise einen lokalen Relay-SMTP-Server verwenden, der von all Ihren Multifunktionsgeräten und verschiedenen Anwendungen genutzt wird.

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

Antwort2

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

Das ist das Gegenteil vonkanonischZuordnung, die angewendet wird, wenn E-Mails vom Server empfangen werden.

(Hinweis: Sowohl Von- als auch An-Adressen werden zum Ersetzen aller generischen und kanonischen Tabellen abgeglichen.)

Verwenden der kanonischen Tabelle bei E-MailsVom Server empfangenist in anderen Antworten bereits erklärt.

Sie können Von-Adressen umschreiben, wenn E-Mailsvom Server gesendetmit smtp_generic_maps.

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

Antwort3

Update: Auf Anraten eines IT-Freundes verwende ich Postfix auf allen meinen Servern, anstatt einen Cloud-Mailserver 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]: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:

  • Viele E-Mails werden an den Root-Benutzer gesendet und die einzelne Zeile aliasgibt an, wer sie erhält.
  • Alle E-Mails von lokalen Benutzern werden in das Format übersetzt, von dem sie kommen [email protected], sodass sie über den MS Online-SMTP-Server gelangen.
  • Postfix hat eine viel bessere Dokumentation als Sendmail.

Dinge, mit denen ich nicht zufrieden bin:

  • Für jeden Host sind benutzerdefinierte Änderungen und mehrere Schritte erforderlich. Ich habe zur Hilfe ein Bash-Skript geschrieben.
  • Der passwdNamenstrick funktioniert nicht immer und es kann schwierig sein, herauszufinden, von welchem ​​Server eine E-Mail kommt.
  • Jede versendete E-Mail trägt drei Warnungen ins Protokoll ein:
    1. warning: smtp.mail.microsoftonline.com[65.55.171.153] offered null AUTH mechanism list(Der SMTP-Server sendet AUTHvorher eine Nullliste STARTTLS, aber AUTH LOGINdanach).
    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 unterbrochen wird, wenn das Zertifikat erneuert wird.)
    3. certificate verification failed for smtp.mail.microsoftonline.com: num=27:certificate not trusted(Dasselbe wie Nr. 2)

Vielen Dank an die Serverfault-Community für den Austausch wichtiger Meinungen zu Mailservern.

Antwort4

Eine noch einfachere Antwort im Vergleich zu einem regulären Ausdruck (gemäß der Antwort von @Jasper) ist die Verwendung einer statischen Suche:

sender_canonical_maps = static:[email protected]

staticgibt immer den gleichen Wert zurück (https://www.postfix.org/DATABASE_README.html#types)

verwandte Informationen