Hallo,
kaum etwas verändert sich so schnell wie Internettechnologien (außer vielleicht die Weltpolitik zur Zeit).
Dadurch ergibt sich mit der Zeit das Problem, dass die eigenen Systeme in der Smart Home Installation (Kameras, Steuergeräte, Visu und Server, etc.) nicht mehr kompatibel mit aktuellen Protokollen sind, wenn es um das Zusammenspiel mit Servern im Internet geht.
Zum Beispiel akzeptieren viele Mail Service Provider die veralteten Verschlüsselungsprotokolle TLS 1.0 und 1.1 inzwischen nicht mehr, was dann beim Mailversand Probleme bereitet. Kann man jetzt die Firmware der eigenen Geräte nicht mehr aktualisieren, weil der Hersteller keine Updates mehr anbietet, so hat man ein Problem.
Entweder man verzichtet auf die blockierte Funktion oder man tauscht das entsprechende Gerät gegen ein neueres Modell, verbunden mit Kosten und Aufwand. Besonders toll sind beide Optionen nicht, auch nicht im Hinblick auf Nutzen und Nachhaltigkeit.
Lösungen, einen einfachen lokalen Mailserver einzusetzen, der wenig restriktiv Mails entgegennimmt und an den Service Provider weiterleitet, gibt es natürlich schon länger.
Im Internet sind dazu jede Menge an Tutorials zu finden, aber ich hatte keines gesehen, dass alle Schritte so darstellt wie ich es in meinem Fall benötigt hatte. Ich nehme an, meine Konstellation ist nicht ungewöhnlich, deshalb will ich die Lösung mal zusammengefasst darstellen.
Die folgenden Informationen sind für Nicht-Postfix-Experten (wie mich) gedacht. Um das Ganze kurz zu halten, gehe ich nur wenig auf Details ein, weitergehende Informationen zu den einzelnen Einträgen gibt es jede Menge im Netz.
Meine Konstellation:
- Heimnetzwerk (LAN, WLAN) mit Fritzbox.
- Internetzugang mit Mailversand über einen Mail Service Provider.
- mehrere Smart Home Systeme mit Mailversand Option (Domovea, Homematic, diverse Kameras)
- teilweise keine Firmware Updates mehr verfügbar
- Raspberry 4 mit Raspbian GNU/Linux 10 (Buster) (OpenHAB Image)
Gewünschte Funktionalität:
- Versand von EMails an einen lokalen EMail Server (mit geringem Sicherheitslevel, also nur User-Passwort Authentifizierung)
- Weiterleitung an den bisherigen EMail Service Provider (mit dem dann geforderten höherem Sicherheitslevel)
- Erreichbarkeit des lokalen Mailservers nur aus dem lokalen Netz
Der lokale Mailserver arbeitet also nur als lokales Mail-Relay, er empfängt an ihn gerichtete Mails und leitet sie ausnahmslos an den Mail Provider weiter.
Mit dieser Konstellation sollte auch bei älteren Smart Home Geräten ein Mailversand wieder möglich sein. Solange die Software auf dem Raspberry System aktuell gehalten wird, sollte es so auch zukünftig beim Mailversand keine Probleme mehr geben.
Da auch lokale Smart Home Geräte (wie Smart TV's etc.) im Prinzip "hackbar" sind, wollte ich keinen vollständig offenen Mailserver betreiben, auch wenn dieser nur aus dem lokalen Netz erreichbar ist. Ein Minimum an Sicherheit sollte durch eine User Authentifizierung gewährleistet sein, die eigentlich auch von jedem noch so alten Smart Home Gerät unterstützt wird.
Die Umsetzung:
Voraussetzung ist ein lauffähiges Debian Linux. Mit einem Terminalprogramm (wie zum Beispiel PUTTY) startet man eine Terminalsitzung.
Als erstes wird der eigene Hostname erfragt und notiert:
Mit folgenden Anweisungen installiert man jetzt den lokalen Mailserver, notwendige Zusatzkomponenten für Authentifizierung und Verschlüsselung sowie einfache Testprogramme. Ist etwas bereits installiert, so schadet der Versuch der Neuinstallation nicht.
Da wir fast alle Kommandos als Superuser ausführen müssen, ist es am einfachsten eine neue Session als Superuser mit
zu starten. Falls man die Terminalsitzung später unterbricht und neu beginnt, so ist erneut "sudo su" einzugeben.
Jetzt zur Installation der Pakete:
Bei der Installation von postfix sollten folgende Angaben gemacht werden:
mail.hostname: der Name des lokalen Mailservers, also der Wert von "hostname" den wir vorhin erfragt hatten. Der Zusatz "mail." vorne kann beliebig anders lauten oder auch entfallen.
smtp.providerhost: der Name des SMTP Mailservers des Mailproviders, an den die Mails weitergeleitet werden sollen (zum Beispiel "smtp.1und1.de). :587 ist der zugehörige Port (hier für TLS verschlüsselte Mails).
Will man die Basiskonfiguration von postfix erneut aufrufen, so kann man das mit
machen.
Als nächstes müssen wir die Datei "main.cf" im Ordner "/etc/postfix" bearbeiten, der jetzt existieren sollte:
Folgende Einträge in der Datei sollten angepasst bzw. neu angelegt werden:
Bitte folgende Einträge prüfen und ggf. richtigstellen:
"hostname" ist der vorhin ermittelte "hostname", "mail.$myhostname" der Name mit dem Zusatz "mail." vorweg, bitte ebenfalls nach Bedarf anpassen. "smtp.providerhost" der Name des SMTP Mailservers beim Provider.
Unter "mynetworks" gibt man alle Netzwerke in der Notation <IP Basisadresse/Netzmaske" an, die Zugriff auf den lokalen Mailserver haben sollen. In diesem Fall habe ich "192.168.0.0/24" eingetragen, was dem Subnetz "192.168.0.1" bis "192.168.0.255" entspricht.
Die Datei mit STRG-X speichern, dabei die Frage zum Speichern mit "Y" beantworten.
In der Datei "generic_exp" wird die Zuordnung von lokalen Mailadressen zu den Provider-Mailadressen festgelegt.
Das ist insofern wichtig, als lokale Mails auch unter einer Adresse wie "ich@mail.hostname" verschickt werden können, der Provider aber als Absender eine bei ihm registrierte Mailadresse erwartet, also zum Beispiel "ich@gmx.de". Natürlich kann man als Absenderadresse für postfix auch gleich die Mailadresse beim Provider angeben, dann ist die Umsetzung nicht notwendig. Für den Versand von internen Mails des Linux System jedoch schon.
Es gilt jetzt zwei Fälle zu unterscheiden:
1. man hat Mailadressen mit einer eigenen Domain, also ich@meinedomain.de
Dann hat man in der Regel beliebige eigene Mailadressen wie ich@meinedomain.de, ueberich@meinedomain.de, etc.
2. man hat eine Mailadresse bei einem Provider wie gmx.de, web.de, etc.
Dann hat man nur eine feste Mailadresse wie ich@gmx.de usw.
Im ersten Fall kann die Umsetzung der Mailadresse von *@mail.hostname nach *@meinedomain.de erfolgen.
Im zweiten Fall sollten alle lokalen Mailadressen von *@mail.hostname nach ich@gmx.de umgesetzt werden.
Natürlich sind die obigen Adressen nur Beispiele und sollten durch die "realen" Werte ersetzt werden.
Die folgende Datei anlegen und beschreiben:
Dabei im Fall 1 folgendes eintragen:
Im Fall 2 folgendes eintragen:
Hier sind auch wieder "hostname", "mail.hostname", "ich@" und "meinedomain.de" oder "gmx.de" durch die realen Werte zu ersetzen.
Bitte bei der Eingabe genau sein, damit alles funktioniert.
Die Datei wieder mit STRG-X speichern.
Man kann die Adressumsetzung jetzt testen:
sollte als Ergebnis "test@meinedomain.de" bzw. "test@gmx.de" liefern. Klappt das nicht, die Datei "generic_exp" nochmals genau prüfen.
Weitere Einträge in der Datei "main.cf" werden jetzt noch zur Aktivierung der Verschlüsselung und der Zugangsdaten zum Mail Provider benötigt:
Folgendes wiederum eintragen oder ergänzen:
Die Datei wieder mit STRG-X speichern.
Jetzt die Datei mit den Anmeldedaten erstellen:
und folgende Zeile eintragen:
Dabei für "smtp.providerhost", "user" und "password" die richtigen Werte einsetzen.
Die Datei mit STRG-X speichern, daraus eine Datenbank erstellen und beides gegen Zugriff schützen:
Aus Sicherheitsgründen sollte der lokale Mailserver nur authentifizierte Mail akzeptieren (ausser vom lokalen System). Dazu eine Konfigurationsdatei erstellen:
In die Datei folgendes schreiben:
mit STRG-X speichern.
Zur Authentifizierung am lokalen Mailserver einen User mit Passwort anlegen, dabei "hostname", "user" und "password" mit den richtigen Werten versehen:
Man kann testen, ob der User angelegt wurde:
das Ergebnis sollte sein: user@hostname: userPassword (das Passwort wird also nicht genannt)
Will man das Passwort bei Bedarf ändern, so geht das mit:
Die Zugangs-Datenbank muss jetzt noch für postfix als Kopie verfügbar gemacht werden:
Werden die Zugangsdaten später einmal geändert, so sind die letzten drei Befehle erneut auszuführen.
Zum Abschluss jetzt nochmals die Datei main.cf editieren:
und folgendes eintragen:
Speichern wieder mit STRG-X und anschliessend postfix komplett neu starten:
Damit ist der lokale Mailserver komplett eingerichtet.
Hier noch ein Überblick über einige Möglichkeiten zum Testen der Konfiguration und des Mailversands:
Die Einstellungen in der Datei main.cf kann man überprüfen mit
Jetzt den Mailversand testen:
Dabei die Empfängeradresse passend setzen.
In der Datei "mail.log" (im Verzeichnis /var/log) kann der fehlerfreie Versand überprüft werden.
Bei Problemen kann in der Datei 'master.conf' hinter die Kommandos 'smtpd', 'smtp' und 'relay' das Attribut '-v' (=Verbose) gesetzt werden. Dadurch werden mehr Details protokolliert.
Nach Änderungen in den Dateien "main.cf" oder "master.cf" immer die Konfiguration neu laden:
und den Mailversand erneut testen.
Die aktuelle Mailqueue (die Liste der noch zum Versand stehenden Mails) kann so überprüft werden:
Die Queue wird mit diesem Kommando geleert, um fehlerhafte Mails zu entfernen:
Die SASL (Authentifizierungs)-Konfiguration lässt sich auslesen mit:
Für Testzwecke lässt sich der Mailserver auch mit 'telnet' ansprechen ("hostname" dabei korrekt einsetzen):
Die Antwort sollte sein:
jetzt eingeben:
Die Antwort sollte (in etwa) sein:
Telnet wieder verlassen:
Nach korrekter Installation und Konfiguration des lokalen Mailservers werden in den Mail Clients (den Smart Home Geräten) zukünftig folgende Zugangsdaten eingetragen
Soviel zur Einrichtung eines lokalen Mailservers.
Ich hoffe es klappt bei euch ebenfalls, bei mir funktioniert obige Installation jedenfalls einwandfrei.
Viele Grüße,
Jörg
kaum etwas verändert sich so schnell wie Internettechnologien (außer vielleicht die Weltpolitik zur Zeit).
Dadurch ergibt sich mit der Zeit das Problem, dass die eigenen Systeme in der Smart Home Installation (Kameras, Steuergeräte, Visu und Server, etc.) nicht mehr kompatibel mit aktuellen Protokollen sind, wenn es um das Zusammenspiel mit Servern im Internet geht.
Zum Beispiel akzeptieren viele Mail Service Provider die veralteten Verschlüsselungsprotokolle TLS 1.0 und 1.1 inzwischen nicht mehr, was dann beim Mailversand Probleme bereitet. Kann man jetzt die Firmware der eigenen Geräte nicht mehr aktualisieren, weil der Hersteller keine Updates mehr anbietet, so hat man ein Problem.
Entweder man verzichtet auf die blockierte Funktion oder man tauscht das entsprechende Gerät gegen ein neueres Modell, verbunden mit Kosten und Aufwand. Besonders toll sind beide Optionen nicht, auch nicht im Hinblick auf Nutzen und Nachhaltigkeit.
Lösungen, einen einfachen lokalen Mailserver einzusetzen, der wenig restriktiv Mails entgegennimmt und an den Service Provider weiterleitet, gibt es natürlich schon länger.
Im Internet sind dazu jede Menge an Tutorials zu finden, aber ich hatte keines gesehen, dass alle Schritte so darstellt wie ich es in meinem Fall benötigt hatte. Ich nehme an, meine Konstellation ist nicht ungewöhnlich, deshalb will ich die Lösung mal zusammengefasst darstellen.
Die folgenden Informationen sind für Nicht-Postfix-Experten (wie mich) gedacht. Um das Ganze kurz zu halten, gehe ich nur wenig auf Details ein, weitergehende Informationen zu den einzelnen Einträgen gibt es jede Menge im Netz.
Meine Konstellation:
- Heimnetzwerk (LAN, WLAN) mit Fritzbox.
- Internetzugang mit Mailversand über einen Mail Service Provider.
- mehrere Smart Home Systeme mit Mailversand Option (Domovea, Homematic, diverse Kameras)
- teilweise keine Firmware Updates mehr verfügbar
- Raspberry 4 mit Raspbian GNU/Linux 10 (Buster) (OpenHAB Image)
Gewünschte Funktionalität:
- Versand von EMails an einen lokalen EMail Server (mit geringem Sicherheitslevel, also nur User-Passwort Authentifizierung)
- Weiterleitung an den bisherigen EMail Service Provider (mit dem dann geforderten höherem Sicherheitslevel)
- Erreichbarkeit des lokalen Mailservers nur aus dem lokalen Netz
Der lokale Mailserver arbeitet also nur als lokales Mail-Relay, er empfängt an ihn gerichtete Mails und leitet sie ausnahmslos an den Mail Provider weiter.
Mit dieser Konstellation sollte auch bei älteren Smart Home Geräten ein Mailversand wieder möglich sein. Solange die Software auf dem Raspberry System aktuell gehalten wird, sollte es so auch zukünftig beim Mailversand keine Probleme mehr geben.
Da auch lokale Smart Home Geräte (wie Smart TV's etc.) im Prinzip "hackbar" sind, wollte ich keinen vollständig offenen Mailserver betreiben, auch wenn dieser nur aus dem lokalen Netz erreichbar ist. Ein Minimum an Sicherheit sollte durch eine User Authentifizierung gewährleistet sein, die eigentlich auch von jedem noch so alten Smart Home Gerät unterstützt wird.
Die Umsetzung:
Voraussetzung ist ein lauffähiges Debian Linux. Mit einem Terminalprogramm (wie zum Beispiel PUTTY) startet man eine Terminalsitzung.
Als erstes wird der eigene Hostname erfragt und notiert:
Code:
hostname
Da wir fast alle Kommandos als Superuser ausführen müssen, ist es am einfachsten eine neue Session als Superuser mit
Code:
sudo su
Jetzt zur Installation der Pakete:
Code:
apt update apt install postfix libsasl2-modules sasl2-bin bsd-mailx telnet
Code:
General type of mail configuration: Satellite system System mail name: mail.hostname SMTP relay host: [smtp.providerhost]:587
smtp.providerhost: der Name des SMTP Mailservers des Mailproviders, an den die Mails weitergeleitet werden sollen (zum Beispiel "smtp.1und1.de). :587 ist der zugehörige Port (hier für TLS verschlüsselte Mails).
Will man die Basiskonfiguration von postfix erneut aufrufen, so kann man das mit
Code:
dpkg -reconfigure postfix
Als nächstes müssen wir die Datei "main.cf" im Ordner "/etc/postfix" bearbeiten, der jetzt existieren sollte:
Code:
cd /etc/postfix nano main.cf
Code:
smtp_relay_restrictions = permit_sasl_authenticated, reject myhostname = hostname mydomain = mail.$myhostname myorigin = $mydomain mydestination = relayhost = [smtp.providerhost]:587 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24 inet_interfaces = all smtp_generic_maps = regexp:/etc/postfix/generic_exp
"hostname" ist der vorhin ermittelte "hostname", "mail.$myhostname" der Name mit dem Zusatz "mail." vorweg, bitte ebenfalls nach Bedarf anpassen. "smtp.providerhost" der Name des SMTP Mailservers beim Provider.
Unter "mynetworks" gibt man alle Netzwerke in der Notation <IP Basisadresse/Netzmaske" an, die Zugriff auf den lokalen Mailserver haben sollen. In diesem Fall habe ich "192.168.0.0/24" eingetragen, was dem Subnetz "192.168.0.1" bis "192.168.0.255" entspricht.
Die Datei mit STRG-X speichern, dabei die Frage zum Speichern mit "Y" beantworten.
In der Datei "generic_exp" wird die Zuordnung von lokalen Mailadressen zu den Provider-Mailadressen festgelegt.
Das ist insofern wichtig, als lokale Mails auch unter einer Adresse wie "ich@mail.hostname" verschickt werden können, der Provider aber als Absender eine bei ihm registrierte Mailadresse erwartet, also zum Beispiel "ich@gmx.de". Natürlich kann man als Absenderadresse für postfix auch gleich die Mailadresse beim Provider angeben, dann ist die Umsetzung nicht notwendig. Für den Versand von internen Mails des Linux System jedoch schon.
Es gilt jetzt zwei Fälle zu unterscheiden:
1. man hat Mailadressen mit einer eigenen Domain, also ich@meinedomain.de
Dann hat man in der Regel beliebige eigene Mailadressen wie ich@meinedomain.de, ueberich@meinedomain.de, etc.
2. man hat eine Mailadresse bei einem Provider wie gmx.de, web.de, etc.
Dann hat man nur eine feste Mailadresse wie ich@gmx.de usw.
Im ersten Fall kann die Umsetzung der Mailadresse von *@mail.hostname nach *@meinedomain.de erfolgen.
Im zweiten Fall sollten alle lokalen Mailadressen von *@mail.hostname nach ich@gmx.de umgesetzt werden.
Natürlich sind die obigen Adressen nur Beispiele und sollten durch die "realen" Werte ersetzt werden.
Die folgende Datei anlegen und beschreiben:
Code:
nano generic_exp
Code:
/^(.*@)mail\.hostname$/ ${1}meinedomain.de /^(.*@)hostname$/ ${1}meinedomain.de
Code:
/^(.*@)mail\.hostname$/ ich@gmx.de /^(.*@)hostname$/ ich@gmx.de
Bitte bei der Eingabe genau sein, damit alles funktioniert.
Die Datei wieder mit STRG-X speichern.
Man kann die Adressumsetzung jetzt testen:
Code:
postmap -q "test@mail.hostname" regexp:generic_exp
Weitere Einträge in der Datei "main.cf" werden jetzt noch zur Aktivierung der Verschlüsselung und der Zugangsdaten zum Mail Provider benötigt:
Code:
nano main.cf
Code:
# -- TLS Parameter für den Mailempfang verschlüsselt und Klartext: smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls = yes smtpd_tls_security_level = may # -- TLS Parameters für den Mailversand (nur verschlüsselt): smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt smtp_use_tls = yes smtp_tls_security_level = encrypt header_size_limit = 4096000 # -- TLS cache Datenbanken: smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache # -- Log bei Bedarf einschalten (default = 0): smtpd_tls_loglevel = 0 smtp_tls_loglevel = 0 # die Anmeldedaten für den Mailprovider: smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
Jetzt die Datei mit den Anmeldedaten erstellen:
Code:
nano sasl_password
Code:
[smtp.providerhost]:587 user:password
Die Datei mit STRG-X speichern, daraus eine Datenbank erstellen und beides gegen Zugriff schützen:
Code:
postmap sasl_passwd chmod 600 sasl_passwd chmod 640 sasl_passwd.db
Code:
cd /etc/postfix/sasl nano smtpd.conf
Code:
pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: CRAM-MD5 DIGEST-MD5 LOGIN PLAIN
Zur Authentifizierung am lokalen Mailserver einen User mit Passwort anlegen, dabei "hostname", "user" und "password" mit den richtigen Werten versehen:
Code:
saslpasswd2 -c -u hostname user Password: password
Code:
sasldblistusers2
Will man das Passwort bei Bedarf ändern, so geht das mit:
Code:
saslpasswd2 user@hostname Password: -neues Passwort-
Code:
cp /etc/sasldb2 /var/spool/postfix/etc/ chown postfix:sasl /var/spool/postfix/etc/sasldb2 chmod 660 /var/spool/postfix/etc/sasldb2
Zum Abschluss jetzt nochmals die Datei main.cf editieren:
Code:
cd /etc/postfix nano main.cf
Code:
cyrus_sasl_config_path = /etc/postfix/sasl smtpd_sasl_local_domain = $myhostname smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous
Code:
service postfix restart systemctl daemon-reload
Hier noch ein Überblick über einige Möglichkeiten zum Testen der Konfiguration und des Mailversands:
Die Einstellungen in der Datei main.cf kann man überprüfen mit
Code:
postconf (alle Einstellungen) postconf -n (nur die Änderungen)
Code:
echo "Testmail" | mail -s "Test" ich@meinedomain.de
In der Datei "mail.log" (im Verzeichnis /var/log) kann der fehlerfreie Versand überprüft werden.
Bei Problemen kann in der Datei 'master.conf' hinter die Kommandos 'smtpd', 'smtp' und 'relay' das Attribut '-v' (=Verbose) gesetzt werden. Dadurch werden mehr Details protokolliert.
Nach Änderungen in den Dateien "main.cf" oder "master.cf" immer die Konfiguration neu laden:
Code:
postfix reload
Die aktuelle Mailqueue (die Liste der noch zum Versand stehenden Mails) kann so überprüft werden:
Code:
postqueue -p
Code:
postqueue -f
Code:
saslfinger -s
Code:
telnet hostname 25
Code:
Trying 127.0.1.1... Connected to hostname. Escape character is '^]'. 220 hostname ESMTP Postfix (Raspbian)
Code:
ehlo dummy
Code:
250-hostname 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH CRAM-MD5 DIGEST-MD5 LOGIN PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-DSN 250-SMTPUTF8 250 CHUNKING
Code:
quit
Code:
Absender: ich@mail.hostname oder ich@meinedomain.de Empfänger: -beliebig- (die Anmeldedaten vom Postfix Mailserver hier angeben): Benutzer: user Passwort: password SMTP server: hostname Port: 25 Verschlüsselung: 'keine' bzw. 'andere'
Ich hoffe es klappt bei euch ebenfalls, bei mir funktioniert obige Installation jedenfalls einwandfrei.
Viele Grüße,
Jörg
Kommentar