E-Mail mit Postfix auf dem Raspberry Pi

Prof. Jürgen Plate

E-Mail mit Postfix auf dem Raspberry Pi

Allgemeines

Warum sollte ein Raspberry Pi überhaupt E-Mails versenden können? Erstens können lokale E-Mails durchaus sinnvoll und wichtig sein, so versendet Crontab Fehler- oder Erfolgsmeldungen per E-Mail. Zweitens könnte der RasPi im Umfeld eines lokalen Netzes auch E-Mails an andere Rechner im LAN versenden, z. B. Statusmeldungen. E-Mails ins große, weite Internet kommen erst an dritter Stelle.

Um auf dem Raspberry Pi E-Mails verschicken zu können muss ein MTA (Mail Transfer Agent) installiert und konfiguriert sein. Aus den unten genannten Gründen sollten die E-Mails an einen bestehenden Mailserver weiterzuleiten. Früher kam hier der der MTA Sendmail zum Einsatz, der jedoch für den Normaluser kaum zu konfigurieren war. Heutzutage greift man besser auf Postfix zurück.

Im Prinzip könnte man nach der Postfix-Installation gleich E-Mails vom RasPi aus versenden. Doch davon kann im Zeitalter von Spam nur abgeraten werden. Ein SMTP-Server (SMTP = Simple Mail Transfer Protocol) ohne eine feste, öffentliche IP-Adresse, ohne Domainnamen (FQDN = Full Qualified Domain Name) und ohne ordentliche Zertifikate wäre eine ideale Spam-Schleuder, weshalb kaum ein E-Mail-Server E-Mails von solchen Servern akzeptiert. Man muss daher die eigenen E-Mails über einen "ordentlichen" SMTP-Server (genannte "Smarthost" oder "Relay-Server") versenden.

Ein MTA ist, wie oben erwähnt, auch dann erforderlich, wenn lokale Benutzer oder Programme auf dem System E-Mails verschicken wollen. In diesem Fall gelangt die E-Mail zu keinem Smarthost. Lautet der Name des Raspberry Pi beispielsweise "raspberrypi", so sind "root@raspberrypi" oder "pi@localhost" gültige E-Mail-Adressen. Die im Folgenden beschriebene Konfiguration ermöglicht das Versenden von E-Mails an externe und lokale Empfänger.

Im ersten Schritt installieren wir Postfix und den Kommandozeile-Mailer (MUA = Mail User Agent) mailx. Wie bei allen adminstrativen Aktionen müssen alle folgenden Dinge als Root-User erledigt werden (mit dem Kommando sudo su werden Sie dauerhaft "root").

apt-get install postfix bsd-mailx
Als erstes wird nach dem allgemeinen Einsatzzweck des Servers gefragt. Zur Auswahl stehen vier Möglichkeiten:

TypBeschreibungEinsatzszenarien
"Internet Site"Mail wird empfangen und verschickt. Nur möglich bei einem echten Mailserver mit fester IP-Adresse
"Internet mit Smarthost"Wie "Internet Site", jedoch wird die E-Mail nicht direkt an den entfernten Server zugestellt, sondern über einen Smarthost geleitet. Raspberry Pi mit dynamischer IP-Adresse (z. B. per DHCP) oder privater IP, die üblicherweise als potentielle Spam- oder Virenversender blockiert werden.
"Satellite System"Bei dieser Einstellung wird keine Mail empfangen, alle ausgehende E-Mails werden per Smarthost verschickt. Man kann E-Mail durch Programme oder Webapplikationen verschicken lassen.
"Local only"Die E-Mails werden nur lokal auf dem Rechner zugestellt, es wird keine Mail von außen empfangen oder nach außen geschickt. Wie "Satellite System", aber die Mail kann nur direkt auf dem lokalen System gelesen werden.

Für den Raspberry Pi sind die bevorzugten Szenarien die beiden letzten, "Local only" oder "Satellite System". Es geht ja primär darum, dass lokale Prozesse (Crontab etc.) eine Nachricht loswerden können. Sollen E-Mails auch an einen anderen Rechner versendet werden, geht man zum Satelliten über. Das Empfangen von E-Mails ist meist nicht notwendig (wobei man hier auch noch auf Fetchmail etc. ausweichen könnte und keinen SMTP-Server auf dem RasPi laufen lassen muss).

Anmerkung: Bei der Verwendung eines "Smarthost" kann es unter Umständen notwendig sein, dessen Konfiguration dahingehend zu ändern, dass er E-Mails vom RasPi überhaupt annimmt. Wenn Sie den Mailhost Ihres Providers verwenden, ist meist nichts zu tun.

Nun fragt Postfix nach dem E-Mail Namen des Systems. Diesen können Sie in der Regel direkt übernehmen. ES ist der Name des Rechners, der jeder ausgehenden Mail als Absender-Domain hinzugefügt wird. In den meisten Fällen sollte man einfach den Hostnamen als Mailnamen akzeptieren, außer man ist im Besitz eines geeigneteren Domain-Namens.

Im nächsten Schritt tragen Sie den SMTP-Smarthost (SMTP-Relay-Server) ein, z. B. "mail.netzmafia.de". Postfix fragt dann noch, für welche weiteren Rechner Sie Mails akzeptieren möchten und welche "Local Networks" bedient werden sollen. In der Regel bleibt die Eingabe für weitere Rechner leer und bei den Netzwerken übernimmt man die Vorgabe 127.0.0.0/8, was bedeutet, dass man nur vom lokalen Rechner aus Mails versenden darf.

Konfiguration

Nachdem nun Postfix auf dem Raspberry Pi installiert ist müssen Sie noch einige Einstellungen für den E-Mail Versand und die Authentifizierung vornehmen. Postfix hat an den unterschiedlichsten Stellen Dateien abgelegt (siehe Bild), wobei für die Konfiguration eigentlich nur das Verzeichnis /etc/postfix eine Rolle spielt.

Authentifizierung am Smarthost

Wenn als Install-Option nicht nur "local" gewählt wurde, sondern "Smarthost" oder "Satellite" und wenn der SMTP-Server auf dem Smarthost zum Versenden der Mail ein Passwort verlangt, muss die eben erstellte Konfiguration noch angepasst werden. Dazu bearbeiten Sie die Datei /etc/postfix/main.cf und ergänzen die folgenden Einträge:
smtp_sasl_auth_enable = yes
# noplaintext weglassen, wenn Passwoerter im Klartext übertragen 
# werden müssen (bei einigen Providern notwendig)
smtp_sasl_security_options = noplaintext noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
Der letzte Eintrag weist Postfix an, die Zugangsdaten aus der Datei /etc/postfix/sasl_password bzw. aus einer Datenbank zu holen, die aus dieser Datei generiert wird. Die Datei erzeugen Sie ganz einfach mit Ihren Lieblingseditor und füllen Sie gleich mit den Zugangsdaten nach folgendem Muster:
smtp.netzmafia.de username:geheimespasswort
Damit nicht jeder das Passwort erfährt, sollte man noch die Zugriffsrechte der Datei einschränken. Anschließend kann die Datenbank mit postmap erzeugt werden:
chmod 600 /etc/postfix/sasl_password 
postmap hash:/etc/postfix/sasl_password 

Absender fälschen

Auch diese Konfiguration ist nur notwendig, wenn nicht nur lokale E-Mails verschickt werden sollen. Die meisten E-Mail-Anbieter erwarten, dass man seine Post mit einer "richtigen" Absenderadresse verschickt, also nicht "pi@raspberrypi" ("raspberrypi" ist der Default-Hostname, den man in der Datei /etc/hostname ändern kann). Einige akzeptieren nur die eigene, korrekte Adresse. Deshalb muss man Postfix anweisen, die lokalen Adressen durch die gewünschte offizielle Adresse zu ersetzen. Dafür ist die folgende Zeile in der Datei /etc/postfix/main.cf einzufügen:

sender_canonical_maps = hash:/etc/postfix/sender_canonical
Nach dieser Vorbereitung erstellen Sie die Datei /etc/postfix/sender_canonical und füllen sie mit Inhalt entsprechend folgendem Muster:
pi pi@example.de
root status@example.de
www-data www-data@example.de
   ...
Hiermit wird dem Benutzer "root" die Mailadresse "status@example.de" zugeordnet. Analoges gilt für den Benutzer des Webservers "www-data" und dem Standardbenutzer "pi". Nun erstellen Sie auch aus dieser Datei eine Postfix-Datenbank:
postmap /etc/postfix/sender_canonical

Abschließende Arbeiten

Normalerweise wird Postfix schon bei der Installation in die Startskripte /etc/init.d, /etc/rc2.d bis /etc/rc6.d eingetragen (einfach mal mit ls nachsehen). Nur wenn das nicht der Fall sein sollte, nehmen Sie Postfix noch in die Startskripte auf:
update-rc.d postfix defaults
Auf jeden Fall muss Postfix neu gestartet werden, damit das Programm die Änderungen übernimmt:
service postfix restart
     oder
/etc/init.d/postfix restart 

Sollte Postfix beim Starten die Warnung "...disabling IPv6 name/address support: Address family not supported by protocol" anzeigen, liegt das daran, dass beim RasPi die IPv6-Unterstützung deaktiviert ist, Postfix jedoch versucht, auch das IPv6-Protokoll zu verwenden. Damit diese Warnungen im reinen IPv4-Betrieb nicht mehr angezeigt werden, können Sie Postfix anweisen, nur noch das IPv4-Protokoll zu verwenden. Dazu ergänzen Sie die Datei /etc/postfix/main.cf um die folgende Zeile:

inet_protocols = ipv4

Test

Abschließend testen Sie, ob sich eine E-Mail versenden läßt:

/usr/bin/mailx -s "Testnachricht" pi << EOF
Dies ist ein Test
und sonst nix.
EOF
Sollte die E-Mail nicht ankommen, hilft ein Blick in die Logfiles /var/log/mail.log und /var/log/mail.err .

Natürlich ist der mailx ein sehr urtümlicher Mailclient, insbesondere beim Lesen von Mails. Wer es etwas komfortabler will, aber trotzdem die Kommandozeile nutzen, sollte sich den mutt installieren.

Links



Copyright © Hochschule München, FK 04, Prof. Jürgen Plate
Letzte Aktualisierung: