Postfix: Absender bei Mailversand von der Konsole anpassen

Heute war ich mal wieder auf dem Optimierungstripp und wollte endlich mal erreichen, dass die von dem Inhouse-Linux-Server abgesendeten Mails (von Cronjobs usw.) nicht immer mit dem Namen des ausführenden Users erscheinen, sondern mit etwas aussagekräftigerem. Weiterhin werde ich der Vollständigkeit halber gleich auch noch erklären, wie man die Absenderadresse so umschreibt, dass man lokalen Usern mit lokaler Domain wie root@server3 (welche aus dem Internet nicht erreichbar wären) auch vernünftig antworten kann.

Absenderadresse umschreiben

Problemstellung & Zielsetzung

Ziel ist es, dass eine Mail auf der Konsole mit dem User “root” abgesendet, als “techguy@thiscompany.tld” abgesendet wird, wofür auf dem Mailserver ein Konto existiert (und daher die Antworten auch empfangen werden können). Weiterer Vorteil ist, dass fremde Mailserver die Absenderdomain auch finden, was eine Standardrestriktion zur Spamabwehr ist. Somit ist es also möglich – wenn auch nicht optimal – dass der User root aus einem Cronjob heraus den Output an “someguy@othercompany.tld” sendet, ohne dass die Mail aufgrund der lokalen oder völlig fehlenden Maildomain abgelehnt wird.

Mittel der Wahl

Zur Erreichung dieser Aufgabe, bedienen wir uns der sog. sender-canocial-maps. Diese ermöglichen eine Umschreibung des Absenders in eine andere Mailadresse. Wie die Anleitung zeigt geht es auch für Empfänger separat bzw. als Dauerübersetzung in beide Richtungen mittels einer Datei.

Da mein Mailserver aber nur als Relayhost fungiert, also keine Mails von außen annehmen soll, schreibe ich nur Absenderadressen um.

Umsetzung

Zuerst erstellen wir die Umsetzungstabelle (der Dateiname ist frei gewählt)…

edi /etc/postfix/sender_canonical

und fügen dort diese Zeile ein und speichern die Datei:

root techguy@thiscompany.tld

Anschließend erfolgt die Umsetzung dieser Textnachricht in das schnelle Hash-Format für Postfix.

postmap /etc/postfix/sender_canonical

Nun müssen wir nur noch die neue Umsetzung in der main.cf von Postfix verankern.

#
# translating sender e.g. "root@server3" to "techguy@thiscompany.tld" 
#
sender_canonical_maps=hash:/etc/postfix/sender_canonical

Nach einem

postfix reload

ist die neue Konfiguration aktiv.

Test

echo "Wer schickt mir das?" | mail -s "Testnachricht von Maschine |`hostname`|" mailbox@thiscompany.tld

testen. Der neue Absender sollte statt “root” der Name “techguy@thiscompany.tld” sein. Auch bei der Antwort sollte diese Adresse stehen.

Aber Achtung, nicht verwirren lassen: Als Absendername kann durchaus noch “root” stehen, denn dieser wird zusätzlich zur Absenderadresse übermittelt. Ein Blick in den Header der Mail oder ein Versuch auf die Mail zu antworten sollte aber Klarheit über den Erfolg der Maßnahme bringen.

Absendername anpassen

Problemstellung & Zielsetzung

Auch wenn wir nun eine “gute” E-Mail-Adresse haben, stört in der Liste der täglichen Statusmails sowie diverser Fehlermeldungen noch immer das “root” als Absender. Ein leichter Überblick, welcher Server hier gerade etwas meldet ist so nicht möglich.

Ziel soll es also sein, dass der Absenderserver deutlich zu erkennen ist.

Fall-zu-Fall-Lösung

Wer nur mal schnell den Absendernamen bei der Verwendung von mail auf der Konsole ändern möchte, kann dies tun mittels:

echo "Wer schickt mir das?" | mail -s "Testnachricht von Maschine |`hostname`|" -a "From: [ThisCompany] root@Server3 <techguy@thiscompany.tld>" mailbox@thiscompany.tld

Man könnte auf die Idee kommen, dass es ja genügen könnte, den Absender auf diese Weise zu verändern und sich die canonical-maps zu sparen. Dieser Befehl ändert aber lediglich den Header der E-Mail, welcher zum Inhalt der Mail gehört. Mailserver prüfen nicht den hier genannten Absender (weil sie die Daten zu diesem Zeitpunkt noch gar nicht haben), sondern den beim Verbindungsaufbau übermittelten.

Generelle Lösung (?)

Hier ist meine Idee, über die Prepend-Funktion von Postfix den From-Header zu ersetzen. Leider waren meine bisherigen Versuche, eine Regel zu bauen, die bei bestimmten Absendern (z.B. root oder cron) die From-Zeile austauscht, leider erfolglos – die Regel schlug einfach nie zu (sowohl in header_checks als auch smtp_recipient_restrictions).

Daher veröffentliche den Artikel so halbfertig, um schon einmal ein paar Infos liefern zu können und gleichzeitig die Möglichkeit zu nutzen, dass eventuell ein Leser den entscheidenen Hinweis liefern kann. Ich werde parallel auch noch einmal die Postfix-Liste damit nerven.

8 Gedanken zu „Postfix: Absender bei Mailversand von der Konsole anpassen“

  1. @Absendername anpassen: einfach in der /etc/passwd den Username ersetzen, z.B.:
    root:x:0:0:root:/root:/bin/bash
    root:x:0:0:MEIN ABSENDERNAME:/root:/bin/bash

    ggf. müsste man sich halt einen eigenen User für die outgoing-mails anlegen, falls man die obige Änderung nicht generell durchführen möchte.

    Gruss, magu

  2. @Absendername anpassen: einfach in der /etc/passwd den Username ersetzen, z.B.:
    root:x:0:0:root:/root:/bin/bash
    root:x:0:0:MEIN ABSENDERNAME:/root:/bin/bash

    ggf. müsste man sich halt einen eigenen User für die outgoing-mails anlegen, falls man die obige Änderung nicht generell durchführen möchte.

    Gruss, magu

  3. Vielen Dank für die kurze, aber präzise und durchaus zum Ziel führende Anleitung … somit blieb mir das Lesen von man-pages erspart, denn meistens macht man die Postfix-Konfiguration ja nur alle paar Jahre mal.

  4. Vielen Dank!! Sehr genialer Artikel und großartige Hilfe. Habe lange nach einer solchen Lösung für exim gesucht, aber nichts brauchbares gefunden!

    Der letzte Hinweis von magu macht das ganze rund und perfekt!

    Gruß
    svs

  5. Ich habe gerade mal auf der Suche nach einem ähnlichen “Fehler” hier Deine Webseite gefunden!
    Auch wenn es schon ein wenig älter ist, aber vielleicht ist es doch mal interessant für Dich

    Dein “Problem” kannst Du nämlich auch ein bisschen anders lösen!

    Ich nutze z.B. Cyrus dazu!
    Damit muss ich nicht für jeden, der über meinen Mail-Server emails versenden darf auch einen Login-User anlegen und dieses dann innerhalb der passwd wieder sperren.

    Es reicht dazu, wenn der User innerhalb von Cyrus angelegt ist!

    Damit kann ich z.b. auch Mitgliedern eines Vereins (dessen Mails über meinen Server laufen) jeweils einen Mail-Account einrichten ohne dann auch diese User extra noch auf dem Server anlegen zu müssen!
    Das erspart zwar nicht unbedingt die komplette Arbeit, aber damit habe ich dann ein potentielles Risiko weniger! Die User können zwar emails (natürlich nur via ssl und Identifizierung) versenden, haben aber keine Chance sich in das Netzwerk einzuloggen, einfach weil sie dort nicht existieren….
    Damit schliesse ich fremde User komplett aus meinem sonstigen Netzwerk aus!
    Und: ich bin frei in der Vergabe eines eigenen “Jux”-Namens mit dem ich dann Info-mails des Servers versenden kann!
    Ich verwende dazu definierte User, die auf meinen (insgesamt 7 virtuellen Servern) jeweils die log-Mails posten. Somit kann ich diese mails auch sauber via eines Address-Filters (ich weiss ja, unter welchem Namen welcher Server infos versendet) mit meinem normalen e-Mail-Programm in Ordner einsortieren und kann sofort erkennen, welcher Server “zickt”.
    Dadurch das ich diese User nur unter Cyrus angelegt habe, haben also die virtuellen Maschinen und die darauf verwendeten User keine Möglichkeit “Kontakt” in das Heimnetzwerk aufzunehmen, einfach weil keiner der dort verwendeten User in meinem Heimnetzwerk bekannt ist. Jeder der Server ist daher im “glauben” er sei allein!
    Das ganze betreibe ich jetzt seit ca 5 Jahren auf dieses Art und Weise und habe damit noch nie ein Sicherheitsproblem gehabt, da die eigentlichen Usern von den Mail-Usern streng getrennt sind!

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *