Schlagwort-Archive: relayhost

Postfix: From-Adresse beim Relay über Smarthost erzwingen

In diesem Beitrag dokumentiere ich eine Lösung für die Meldung: „554 5.7.1 REJECT policy violation – too many different Display Names – code #242 (in reply to end of DATA command)“

Umgebung

Ich betreibe einen Virtual Private Server (VPS) im Internet, sowie einige Raspberry Pis und weitere Geräte, die man heute wohl am ehesten dem Internet der Dinge zuordnen würde.

Diese Systeme sollen mir Systemmeldungen per E-Mail senden. Dafür habe ich mir ein günstiges E-Mail-Postfach bei Mailbox.org gebucht und auf den betroffenen Systemen Postfix installiert und zum Versand über einen Smarthost konfiguriert. Die Konfiguration erfolgte über die Ansible-Rolle relaymail von Yannik. Diese dient jedoch nur als Werkzeug. Die Konfiguration kann selbstverständlich auch manuell durchgeführt werden.

Problembeschreibung

Bei einer Systemüberprüfung fielen mir einige Fehlermeldungen der folgenden Art ins Auge (einige Werte durch <Platzhalter> ersetzt):

„<Hostname und IP-Adresse> said: 554 5.7.1 id=<ID> – Rejected by next-hop MTA on relaying, from MTA(smtp:[<IP-Adresse>]:10025): 554 5.7.1 REJECT policy violation – too many different Display Names – code #242 (in reply to end of DATA command)“

Während meine Raspberry Pis mit Raspbian GNU/Linux 10 (buster) und Postfix 3.4.14-0+deb10u1 sich wie erwartet verhalten und lediglich meine E-Mail-Adresse in das Header-Feld „From“ eintragen, fügt mein VPS mit Debian GNU/Linux 10 (buster) und Postfix 3.4.14-0+deb10u1 den Namen des jeweiligen Benutzers bzw. Dienstes mit ein, welcher die E-Mail versenden möchte. Diese Informationen nimmt der VPS aus dem Kommentarfeld der /etc/passwd. Während die Kommentarfelder auf meinen Raspberry Pis leer sind, sind diese auf dem VPS entsprechend gefüllt.

Im E-Mail-Header stellt sich das dann wie folgt dar.

Header-Auszug bei E-Mail von Raspberry Pi

Date: Mon, 10 May 2021 04:56:32 +0200 (CEST)
From: no-reply@example.com

Header-Auszüge bei E-Mails vom VPS

From: no-reply@example.com (Cron Daemon)
To: root
Date: Mon, 10 May 2021 04:44:12 +0200 (CEST)
From: Jörg Kastning <no-reply@example.com>
Date: Mon, 10 May 2021 04:44:36 +0200 (CEST)
From: root <no-reply@example.com>

Lösung

Um das Problem aufzulösen, lasse ich nun Postfix das Header-Feld „From“ umschreiben und explizit auf den Wert no-reply@example.com setzen. In der /etc/postfix/main.cf müssen dazu folgende Zeilen vorhanden sein:

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

Inhalt der /etc/postfix/sender_canonical_maps:

/.+/    no-reply@example.com

Dies sorgt dafür, dass Postfix das Feld „Envelope-From“ explizit auf no-reply@example.com setzt.

Inhalt der /etc/postfix/header_check:

/From:.*/ REPLACE From: no-reply@example.com

Hiermit wird der Wert des Header-Felds „From“ explizit auf no-reply@example.com gesetzt. Die Lösung habe ich hier gefunden. Damit läuft der Versand meiner Systembenachrichtigungen wieder.

Weitere Artikel zu Postfix und Smarthosts in diesem Blog

Postfix mit Gmail als Smarthost

Ich blogge hier kurz runter, wie man Postfix mit Gmail als Smarthost einrichtet. So muss ich mir beim nächsten Mal nicht wieder alle Informationen im Internet zusammensuchen.

Den Postfix selbst hab ich auf meinem Raspberry Pi installiert, um Benachrichtungs-E-Mails der „Überwachung von Temperatur und Luftfeuchtigkeit mit dem SHT21“ versenden zu können. Das Tutorial sollte jedoch auch für alle weiteren auf Debian basierenden Distributionen gelten.

Als erstes werden die folgenden Pakete installiert[1. Artikel im Ubuntuusers.de Wiki]:

sudo apt-get install postfix libsasl2-modules bsd-mailx

Beim Start von Postfix auf meinem Raspberry Pi kam folgende Warnung:

postmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postfix: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
.

Um diese Warnmeldungen abzustellen wird folgender Befehl abgesetzt und Postfix neugestartet.[2. Good to Know Database]

pi@raspberrypi ~ $ sudo postconf -e 'inet_protocols = ipv4'
pi@raspberrypi ~ $ sudo /etc/init.d/postfix restart
[ ok ] Stopping Postfix Mail Transport Agent: postfix.
[ ok ] Starting Postfix Mail Transport Agent: postfix.

Jetzt ist die /etc/postfix/main.cf in einem Editor zu öffnen. Falls noch nicht vorhanden, sind folgende Zeilen zu ergänzen:[3. Relaying Postfix SMTP via smtp.gmail.com]

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes

Im nächsten Schritt ist die Datei /etc/postfix/sasl_passwd mit folgendem Inhalt zu erstellen.

[smtp.gmail.com]:587 user.name@gmail.com:password

Jetzt beschränken wir noch den Zugriff auf die gerade erstellte Datei und erstellen die sasl_passwd Datenbank.

sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd

Jetzt wird Postfix noch einmal neugestartet. Anschließend können wir den Mailversand testen:

echo "Das Leben ist schön." | mailx -s "Hello World" user.name@zieldomain.tld

Fertig. E-Mail verschickt und im Postfach empfangen.

Zu beachten: Wenn ihr euch ein neues Gmail Postfach angelegt habt müsst ihr euch einmal über den Webbrowser am Postfach anmelden und die Nutzungsbedingungen akzeptieren, bevor ihr Mails mit Postfix über diesen Account versenden könnt.