Informationen zur Mailkonfiguration für Systemadministratoren
Bei Betreibern von eigenen Servern an der TU besteht oft der Wunsch, von diesen auch Mails verschicken zu können.
Wohin schicke ich meine Mails?
Grundsätzlich ist es klug, Mails zunächst an einen lokalen Mailserver zu übergeben, der auf dem Rechner läuft, auf dem auch das Programm oder die Webapplikation läuft, die die Mails erzeugt. Warum? Weil der Mailserver der TU z.B. bei Wartung oder einer Störung mal sehr langsam oder sogar gar nicht erreichbar sein kann. Gerade für Webapplikationen ist es wichtig, so wenig wie möglich von externen Verzögerungen abhängig zu sein, da während des Versendens der Mail meist ein Worker-Thread blockiert wird. Und da der Schwerpunkt einer Webapplikationen nicht darin liegt, einen eigenen Mailserver samt Mail-Queue Mechanismus zu implementieren, sind sie in der Fehlerbehandlung meist recht schlecht aufgestellt. Besser ist es also einen lokalen Mailserver aufzusetzen, der alle Mails zunächst annimmt, ggf. im Fehlerfall zwischenspeichert und ansonsten an den Mailserver der TU weiterleitet.
Unter Unix kommt da postfix in Frage, unter Windows gibt es eine Komponente SMTP SVC.
Die Applikation muss dann so konfiguriert werden, dass sie Mails per SMTP an localhost übergibt oder, unter Unix, per Pipe dem sendmail-Befehl übergibt.
Welche Mailadressen soll ich benutzen?
Absender
Man muss wissen, dass es für jede Mail 2 wichtige Absendeadressen gibt:
-
envelope-from
Dies ist die Kontrolladresse, die nur im SMTP-Dialog zwischen den Mailservern verwendet wird. Wenn ein Fehler auftritt, z.B. die Empfänger-Mailadresse ist nicht gültig, der Server kann nicht erreicht werden, die Mailbox des Benutzers ist voll, wird an diese Mailadresse eine Fehlermeldung zurück geschickt. Der Empfänger bekommt diese Adresse in seinem Mailprogramm meist gar nicht zu sehen. -
header-from
Diese Adresse steht im Header der Mail und wird dem Empfänger von seinem Mailprogramm angezeigt. Außerdem wird sie verwendet, wenn er die Mail beantwortet.
Standardadressen
Folgende Standardadressen können als Absender verwendet werden. Wenn der Empfänger auf ein diese Adressen antwortet, passiert folgendes:
- nobody@tuhh.de: Antworten werden angenommern aber ohne Fehlermeldung verworfen.
- no-reply@tuhh.de: Die Antwort wird mit einer Fehlermeldung abgelehnt.
- <userid>@rz.tuhh.de: Die Antwort geht an die Userid <userid>.
- Andere Adressen wie z.B. <name>@tuhh.de werden in Zukunft als Absender ohne Authentifizierung als Absender nicht mehr akzeptiert.
Hinweise:
- nobody im header-from zu verwenden ist sehr unfreundlich, weil eine etwaige Antwort des Empfänger verworfen wird, ohne dass er davon erfährt!
- no-reply im envelope-from ist nicht zulässig.
Empfehlung:
Verwenden Sie im envelope-from eine Mailadresse, die nicht an Außenstehende kommunizert wird und die nur dazu dient, etwaige Fehler-Rückläufer zu sammeln und zu analysieren. z.B. eine lange Zeichenfolge wie "d4fd8cd98f12b204e9800998ecf8437e@tuhh.de" Falls diese zu viel Spam bekommt, kann sie problemlos gelöscht und durch einen neue Adresse ersetzt werden. Oder sie verwenden nobody, falls es sich um wenig wichtige Mails handelt, deren unbemerkte Verlust zu verschmerzen ist.
Verwenden sie im header-from entweder no-reply, falls auf die Mail nicht geantwortet werden soll oder eine Mailadressen die öffentlich gesehen und wahrgenommen werden kann und deren Antworten von Ihnen bearbeitet werden.
Viele Webapplikationen erlauben es leider nicht, header-from und envelope-from unabhängig zu konfigurien. Hier kommt wieder der lokale Mailserver ins Spiel, postfix z.B. erlaubt es, diese Adressen lokal und vor dem Versand an den TU-Server unabhängig voneinander zu ändern.
SMTP-Port Sperre
Der SMTP-Port (TCP 25) ist seit dem 14.4.03 von und zum Internet an der TU gesperrt. Hintergrund ist, daß der unkontrollierte Empfang und Versand von Viren und Werbemails durch möglicherweise durch Malware befallene Rechner an der TU eingeschränkt werden soll. Dies hat folgende Auswirkungen:
Für den Mailversand:
- Versand nur über mail.tu-harburg.de
Typischerweise muß dazu im Mailprogramm ein smart- oder relayhost konfiguriert werden. - envelope-from muss richtig konfiguriert sein
Bitte Konfigurieren Sie den envelope-from so, dass dort eine Adresse steht, an die Fehlermeldungen zurück geschickt werden können. Die envelope-from Adresse ist die, die im sendmail- oder postfix- Logfile auftaucht und im SMTP-Dialog für "MAIL FROM:" verwendet wird. Es ist nicht die Adresse, die in der From: Zeile steht. Sie wird von unserem Mailer bei der Zustellung in eine Return-Path: Zeile geschriebe -
Keine Empfänger außerhalb der TU: Der unauthentifizierte Versand (d.h. ohne Angabe von Usernamen und Paßwort) von Mails ist auf Empfänger innerhalb der TU beschränkt. Einzelne Rechner können unter bestimmten Bedingungen auf Antrag von dieser Regel ausgenommen werden.
Organisationseinheiten der TU können in begründeten Ausnahmefällen einen eigenen Mailserver betreiben. Dazu wende sich der DV-Beauftragte des Arbeitsbereiches an das Servicedesk.
Die Verantwortung für den Betrieb des Servers trägt die Organistationseinheit. Ggf. muß von Ihr eine Verfahrensbeschreibung, Risikoanalyse und Anmeldung beim Hamburger Datenschützer erfolgen.
Mailversand
Postfix
Jede Linux-Distribution macht es anders und strickt ihre eigene postfix-Konfiguration zurecht, daher ist es schwierig, hier eine allgemein gültige Anleitung zu geben. Im Zweifelsfall muss dann doch die original Postfix-Anleitung konsultiert werden...
Grundsätzlich sollte man darauf achten, dass in jeder postfix-Konfiguration folgendes gesetzt ist:
main.cf:
biff = no
smtp_use_tls = yes
enable_long_queue_ids = yes
In dieser Anleitung soll folgendes erreicht werden: Mails, die an lokale Accounts des Linux-Systems verschickt werden, sollen auch lokal gespeichert werden. Was z.B. von crontab-Scripten, logwatch, logrotate, smartmontools u.ä. verschickt wird, soll zunächst lokal gespeichert werden. Dies ist bei den meisten Distributionen bereits in der Standardkonfiguration so und wird hier nicht weiter besprochen.
Für einzelne Accounts, z.B. root, soll zusätzlich eine Weiterleitung an ein TU-Adresse erfolgen.
Dazu wird hier die smtp_gemerics_map verwenden.
In Datei /etc/postfix/main.cf
:
relayhost = mail.tu-harburg.de
smtp_generic_maps = hash:${config_directory}/generic
Über die Datei /etc/postfix/generic
wird dann zugeordnet, welche Absende-Adresse die Mails extern erhalten:
root joe.public@tuhh.de
daemon b.mueller@tuhh.de
Hash-DB erzeugen:
# postmap generic
In /etc/aliases
eintragen, wohin die Mail an root zusätzlich noch geschickt wird:
root: \root, joe.public@tuhh.de
"newaliases" aufrufen.
Wenn Mails nach außerhalb der TU verschickt werden sollen, muss ein Funktionsaccount beantragt werden. Postfix muss dann entsprechen der Anleitung als SASL-Client konfiguriert werden. Userid und Passwort des Funktionsaccounts werden dann in der Datei gemäß Parameter smtp_sasl_password_maps hinterlegt.
Also in main.cf
:
...
Siehe SASL-Client Anleitung!
...
relayhost = [mail.tu-harburg.de]:submission
...
Wenn es eine Webapplikation nicht erlaubt, envelope-from und header-from getrennt zu konfigurieren, kommt zusätzlich die canonical map zum Einsatz:
In der Webapplikation konfiguriert man (sofern man keine Antworten auf die Mails zulassen möchte) als Absender no-reply@tuhh.de
. Dann besorgt man sich beim RZ einen Funktionsaccount, den man auch in der obigen SASL-Client Konfiguration verwendet, mit einer kryptischen Mailadresse, z.B. hier 6fccb1a9db825b8a9895b49126d584af@tuhh.de.
sender_canonical_classes = envelope_sender
sender_canonical_maps = hash:${config_directory}/sender_canonical
In ${config_directory}/sender_canonical
eintragen:
no-reply@tuhh.de 6fccb1a9db825b8a9895b49126d584af@tuhh.de
Rückläufer und Zustellfehler landen dann in der Mailbox des Funktionsaccounts und sollten hin und wieder kontrolliert werden! Falls die kryptische Mailaddresse irgendwann zu viele Spam-Mails erhält läßt man vom RZ dem Account eine weitere kryptische Adresse hinzufügen und trägt diese in sender_canonical ein. Nach ca. 1 Woche läßt man die alte Adresse vom RZ löschen.
shell-Script
Beispiel für ein shell-script:
#!/bin/bash
#
# Only 7-bit ASCII Characters are allowed in mail headers.
# Make sure to follow RFC 2047 if fromname, toname or subject
# contain non-ASCII characters!
# Auto-Submitted: header prevents vacation replys.
#
from="nobody@tuhh.de"
fromname="Nobody Knows"
to="joe.public@tuhh.de"
toname="Joe Public"
subject="This is the subject"
/usr/sbin/sendmail -Ac -B8BITMIME -i -f "$from" -- "$to" << EOF
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Auto-Submitted: auto-generated
Subject: $subject
From: "$fromname" <$from>
To: "$toname" <$to>
Falsches Üben von Xylophonmusik quält jeden größeren Zwerg.
EOF
PHP-script
Setzen des envelope-from in einem PHP-Script:
<?php require_once 'Mail.php';
require_once 'Mail/mime.php';
[...]
$mail = Mail::factory('mail','-f envelope-from@tuhh.de');
$mail->send('envelope-to@tuhh.de', $header, $body);
?>
sendmail
Völlig veraltet und vielleicht nur noch aus historischer Sicht interessant ist sendmail.
Um dafür zu sorgen, dass bei Emails von root als envelope-from "a.meyer@tuhh.de" und bei Emails von daemon "b.mueller@tuhh.de" eingesetzt wird,
- füge man folgendes in sendmail.mc hinzu und erzeuge ein neues sendmail.cf
- Datei /etc/mail/genericstable erzeugen:
- Hash-DB erzeugen:
define(`SMART_HOST', `mail.tu-harburg.de')dnl
FEATURE(`genericstable')dnl
FEATURE(`masquerade_envelope')dnl
GENERICS_DOMAIN(`$j')dnl
root a.meyer@tuhh.de
daemon b.mueller@tuhh.de
# makemap hash genericstable<genericstable