ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

Postfix

Fehlendes Makro

Das Makro „Getestet“ konnte nicht gefunden werden.

 * [1]: [:Pakete installieren: Installation von Programmen]
 * [2]: [:Terminal: Ein Terminal öffnen]
 * [3]: [:Editor: Einen Editor öffnen]

Einleitung

Damit ein Linux Rechner direkt Emails verschicken kann, muss ein MTA (Mail Transfer Agent 🇩🇪 ) installiert und konfiguriert sein. Der Klassiker unter den MTA ist sendmail, dieser ist jedoch sehr umständlich zu konfigurieren, deshalb hat sich Postfix zum Standard entwickelt.

Im Prinzip könnte man den Postfix-Server aufsetzen und gleich Emails verschicken. Doch leider ist das im Zeitalter von Spam nicht mehr so einfach. Ein SMTP-Server ohne eine feste IP und ohne ordentliche Zertifikate wäre eine ideale Spam-Schleuder. Deshalb aktzeptiert eigentlich kein Email-Server Emails von solchen Servern. Man muss daher die eigenen Emails über einen "ordentlichen" SMTP Server wie z.B. den von web.de und Co. leiten. Für ortsgebundene Rechner bietet sich der Server des eigenen Internet Service Providers an, da dieser meistens keine zusätzliche Authentifizierung erfordert.

Ein MTA ist aber auch dann erforderlich, wenn lokale Benutzer auf dem System untereinander EMails verschicken wollen. In diesem Fall findet kein Datenaustausch zu einem externen SMTP-Server statt. Lautet der Name des Rechners beispielsweise "ubuntu", so ist "root@ubuntu" eine gültige EMailadresse. Das Versenden von lokalen EMails wird unter Anderem von Diensten wie Cron verwendet, um den Administator über mögliche Probleme zu informieren. Die im Folgenden beschriebene Konfiguration ermöglicht sowohl das Versenden von EMails an externe als auch an interne Empfänger.

Installation

Es muss eigentlich nur ein Paket installiert [1] werden

  • postfix

  • mailx - Optional, um über die Konsole mit dem Befehl mail Mails verschicken zu können

  • sasl2-bin - Optional, wenn man SASL-Authentifizierung verwenden will

Grundkonfiguration

Anschließend wird man gleich zur Grundkonfiguration von Postfix geleitet, die aus einer Serie von Fragen besteht. Bei Fragen, auf die hier nicht besonders eingegangen wird, sollte einfach der Standardwert bestätigt werden. Je nachdem, wie man die erste Frage beantwortet, tauchen bestimmte Fragen später vielleicht gar nicht auf.

General type of configuration?

Als erstes wird nach dem allgemeinen Einsatzzweck des Servers gefragt. Zur Auswahl stehen folgende Möglichkeiten:

TypBeschreibungEinsatzszenarien
Internet SiteStandard. Mail wird empfangen und verschickt.Echter Mailserver mit fester IP-Adresse, z.B. Root-Server
Internet mit SmarthostWie Internet Site, aber Mail wird nicht direkt an den entfernten Server zugestellt, sondern komplett über einen anderen Server (etwa beim ISP) geleitet.Mailserver mit dynamischer IP-Adresse, die sonst sehr oft als potentielle Spam-/Virenversender geblockt werden.
Satellite SystemKeine Mail wird empfangen, alle ausgehende Mail über einen Smarthost (s.o.) verschickt.Mail durch Adminskripte oder Webapplikationen verschicken lassen.
Local onlyMail wird lokal auf dem Rechner zugestellt, es wird keine Mail von außen empfangen bzw. nach außen geschickt.Wie Satellite System, aber die Mail soll direkt auf demselben System gelesen werden.

Where should mail for root go?

Hier sollte man den entweder den Benutzernamen des Admins eintragen oder seine gültige Emailadresse.

Mailname

Dies ist der Name des Rechners, der jeder ausgehenden Mail als Absenderdomain hinzugefügt wird. In den meisten Fällen sollte man einfach den Hostnamen als Mailnamen akzeptieren, außer man ist im Besitz eines geeigneteren Domainnamens.

SMTP relay host?

Hier sollte man den Mailserver des Providers eintragen, über den man die Mail verschicken will, z.B. smtp.mailanbieter.de.

Für welche weiteren Rechner möchten Sie Mails akzeptieren?

Wenn man den Mailserver für bestimmte Domains betreibt, die hier noch nicht aufgelistet werden, muss man diese ergänzen.

Local Networks

Hier trägt man ein, welche Maschinen Mail über diesen Server verschicken dürfen. Es ist wichtig, dass man seinen Server hier nicht Unbekannten zur Verfügung stellt, die darüber dann Spam oder Viren verschicken können (Open Relay). Als Vorgabe steht dort 127.0.0.0/8, was bedeutet, dass man nur vom lokalen Rechner aus Mails versenden darf. Wer seinen Mailserver aus dem ganzen LAN zum Versand nutzen will, sollte hier zusätzlich sein eigenes Netz eintragen:

127.0.0.0/8, 192.168.178.0/24

Wer seinen Server, bspw. einen Root-Server, über das Internet nutzen will, sollte hier keinen Fall weite Adressbereiche erlauben, sondern für den Versand stattdessen eine Authentifizierung verlangen.

Je nach Ubuntu-Version sehen diese Fragen etwas anders aus. Der wichtigste Punkt ist immer der SMTP-Server, wenn man ''Smarthost'' oder ''Satellite'' gewählt hat. Hat man sich in der Konfiguration vertan, kann man diese im Terminal [2] mit

'''`sudo dpkg-reconfigure postfix`'''

wiederholen, in welchem Fall noch viel mehr Fragen gestellt werden. Ebenso kann man diesen Befehl ausführen, wenn eine wichtige Einstellung, die man verändern wollte (z.B. ''Local Networks''), bei der Installation übergangen wurde.

Danach ist die erste Konfiguration von Postfix abgeschlossen. Diese wird in der Datei /etc/postfix/main.cf hinterlegt.

Spezialkonfigurationen

⚓︎

Authentifizierung am Smarthost

Wenn der SMTP-Server auf dem Smarthost zum Versenden der Mail ein Passwort verlangt, muss die eben erstellte Konfiguration /etc/postfix/main.cf allerdings noch einmal editiert [3] und diese Zeilen eingefügt werden:

smtp_sasl_auth_enable = yes
# noplaintext weglassen, wenn Passwörter im Klartext übertragen werden müssen:
# (nicht empfohlen, nur wenn's anders nicht funktioniert)
smtp_sasl_security_options = noplaintext noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password

Wie in der Config ersichtlich holt Postfix die Zugangsdaten aus der Datei /etc/postfix/sasl_password bzw. aus einer Datenbank, die aus der sasl_password generiert wird; diese muss daher in dieser Art erstellt werden

smtp.mailanbieter.de username:ganzgeheimespasswort

Jetzt muss noch die Datenbank erzeugt werden. Dazu muss man ein Terminalfenster öffnen [2] und den Befehl

sudo postmap /etc/postfix/sasl_password

ausführen. Danach muss man postfix neu starten:

sudo /etc/init.d/postfix restart

⚓︎

Korrekten Absender setzen

Viele Email-Anbieter erwarten inzwischen, dass man seine Post mit "richtigen" Absenderadressen verschickt - also nicht ich@localhost oder user@meinrechner. Einige, wie GMX, gehen sogar so weit, nur die eigene, korrekte Adresse zu akzeptieren. Deshalb muss man Postfix beibringen, die lokalen Adressen durch die gewünschte offizielle zu ersetzen.

Folgende Zeile muss man dafür in die Datei /etc/postfix/main.cf einfügen:

sender_canonical_maps = hash:/etc/postfix/sender_canonical

Dann erstellt man in einem Editor mit Root-Rechten [3] die Datei /etc/postfix/sender_canonical mit beliebig vielen Zuordnungen, z.B.:

benutzer email.adresse@gmx.net
www-data beispiel@example.com
root email.adresse@gmx.net

Zu guter letzt erstellt man auch aus dieser Datei eine Postfix-Datenbank und lädt die Postfix-Konfiguration im Terminal [2] neu:

sudo postmap /etc/postfix/sender_canonical
sudo /etc/init.d/postfix restart  

Aliase

Mail-Aliase werden in der Datei /etc/aliases festgelegt. Pro Zeile steht ein Adresspaar, wobei Mail an die erste (lokale) Adresse an die zweite weitergeleitet wird. Als Minimum sollte man Umleitungen für root und postmaster erstellen. Letzteres wird sogar offiziell per RFC 🇩🇪 gefordert, wenn man einen öffentlichen Mailserver betreibt.

root:		adminname
postmaster:	adminname

Nach jeder Änderung dieser Datei muss man folgenden Befehl ausführen, um die Datenbank zu aktualisieren:

sudo newaliases

Die Benutzung der '''aliases'''-Datei unterscheidet sich von der Benutzung der anderen Hash-Dateien von Postfix, um Abwärtskompatibilität zu '''sendmail''', dem "Urgestein", und zu anderen Mailservern zu erhalten. Man beachte die Doppelpunkte, den ungewöhnlichen Ort der Datei außerhalb von '''/etc/postfix''' und den besonderen Befehl '''newaliases'''.

⚓︎

SASL-Authentifizierung als Server

Um einen SMTP-Dienst auch außerhalb des sicheren LANs anbieten zu können, sollte man eine Authentifizierung durch die Clients einfordern, damit man kein offenes Relay für Spammer und anderes zwielichtiges Gesindel anbietet. Dafür wird das Simple Authentication and Security Layer (SASL)-Framework verwendet, welches z.B. über das Cyrus-Sasl-Projekt realisiert wird.

Bei dieser Installation werden Benutzerpasswörter im Klartext übertragen. Man sollte also zusehen, für die Verbindung SSL-/TLS-Verschlüsselung zu verwenden.

Hierfür muss erstmal folgendes Paket installiert werden:

  • sasl2-bin

Cyrus SASL bietet mehrere Arten, Authentifizierungsdienste bereitzustellen. Da man z.B. mit auxprop nicht gegen die normalen Shadow-Passwörter des Linuxsystems authentifizieren kann, wird hier die Einrichtung mit saslauthd beschrieben.

Zunächst muss die Konfigurationsdatei /etc/default/saslauthd angepasst und folgendes eingetragen werden:

START=yes
MECHANISMS="shadow"

Dann muss eine neue Datei /etc/postfix/sasl/smtpd.conf erstellt werden:

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
saslauthd_path: /var/run/saslauthd/mux

Und die /etc/postfix/main.cf muss natürlich auch noch angepasst werden:

smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = 
        permit_mynetworks permit_sasl_authenticated reject_unauth_destination
smtpd_sasl_application_name = smtpd

Jetzt könnte eigentlich alles funktionieren, wenn es nicht noch ein Problem gäbe, nämlich die Sicherheitseinstellungen von Postfix. Postfix sperrt nämlich den smtpd standardmäßig in eine chroot-Umgebung, wo er den Sasl-Socket nicht finden kann. Es gibt mehrere Möglichkeiten, dieses Problem zu umgehen.

Methode 1: chroot abschalten

Das geht am einfachsten und ist wahrscheinlich auch am praktischsten, wenn noch andere Dienste (wie z.B. ein IMAP-Server) den saslauthd nutzen wollen. Dazu muss einfach nur in der Datei /etc/postfix/master.cf in der smtpd-Zeile ein n in die chroot-Spalte eingetragen werden:

# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       -       smtpd

Methode 2: Socket in den chroot legen

Da Postfix seinen Prozess nach /var/spool/postfix chrooted, sucht dieser dann den Saslauthd-Socket in /var/spool/postfix/var/run/saslauthd/. Man muss also dem saslauthd befehlen, den Socket dort zu eröffnen, indem man die oben erwähnte Datei /etc/default/saslauthd um folgende Zeile ergänzt:

PARAMS="-m /var/spool/postfix/var/run/saslauthd"

Aktivieren

Abschließend müssen Saslauthd und Postfix noch neu gestartet werden:

sudo /etc/init.d/saslauthd restart
sudo /etc/init.d/postfix restart

Testen

Man kann testen, ob alles klappt, indem man mit dem Telnet-Client direkt mit dem Server kommuniziert. Dafür muss man aber erstmal einen String aus den Zugangsdaten zur späteren Verwendung nach base64 🇩🇪 konvertieren. Im folgenden Beispiel lautet der Benutzername "test" und das Passwort "testtest" und der String muss genau so (mit doppeltem Namen und \0 als Trennzeichen) eingegeben werden:

$ perl -MMIME::Base64 -e     'print encode_base64("test\0test\0testtest");'
dGVzdAB0ZXN0AHRlc3R0ZXN0
$ telnet dapper-lamp 25
Trying 192.168.4.55...
Connected to dapper-lamp.otze.
Escape character is '^]'.
220 dapper-lamp.otze ESMTP Postfix (Ubuntu)
ehlo test
250-dapper-lamp.otze
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250 8BITMIME
auth plain dGVzdAB0ZXN0AHRlc3R0ZXN0
235 Authentication successful
quit
221 Bye
Connection closed by foreign host.

Funktionstest

Jetzt kann man z.B. mit mail aus dem Paket mailx eine Email verschicken. Der Befehl dazu sieht im Prinzip so aus:

mail -s "testbetreff" email@addresse.de < textdatei.txt

Danach sollte man die Datei /var/log/mail.log durchlesen und überprüfen ob alles geklappt hat. Hoffentlich steht nun am Ende der Datei etwas ähnliches wie das hier:

  ...from=<email@gmx.net>...
   ...to=<xyz@example.com>,... status=sent... Message accepted

Anhang: Smarthost-Provider

Arcor

Arcor-Internet-Kunden können über ihren eigenen Internetzugang ohne weitere Authentifizierung Email mit beliebigem Absender versenden, sofern dieser eine gültige Email-Adresse darstellt:

Auch von unterwegs kann man die Arcor-SMTP-Server auf diese Art nutzen, wenn man sich authentifiziert:

Ob Arcor seinen Freemail-Kunden dieselben Freiheiten einräumt, müsste mal jemand anders testen. Wenn ja, wäre Arcor eine gute Wahl für einen Smarthost. Man braucht das entsprechende Postfach noch nicht einmal als Kontaktadresse nutzen, sondern benutzt es nur für den SMTP-Auth und verschickt darüber seine reguläre Mail mit beliebigen Absender-Domains.

GMX

Um mit Postfix auch über GMX Emails versenden zu können, muss man folgende, weiter oben beschriebene Schritte ausführen:

Außerdem gilt es folgende Besonderheiten zu beachten:

  • GMX akzeptiert nur Mail mit demselben Absender, als der man sich authentifiziert hat. Dieser Provider ist deswegen nur als Smarthost geeignet, wenn alle ausgehenden Mails denselben Absender tragen dürfen.

  • Die Benutzerkennung in der /etc/postfix/sasl_password besteht aus der kompletten Email-Adresse und nicht nur aus dem Benutzernamen, z.B.:

mail.gmx.net beispiel@gmx.de:geheim


  • ["Kategorie/Internet"]

  • ["Kategorie/Netzwerk"]

  • ["Kategorie/Server"]

Fehlendes Makro

Das Makro „Tags“ konnte nicht gefunden werden.

Diese Revision wurde am 17. April 2007 23:08 von otzenpunk erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Netzwerk, Server, Internet, Email, SMTP