Ankündigung

Einklappen
Keine Ankündigung bisher.

Mailversand älterer Smart Home Systemen reaktivieren - Postfix Mailserver einrichten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Mailversand älterer Smart Home Systemen reaktivieren - Postfix Mailserver einrichten

    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:
    Code:
    hostname
    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
    Code:
    sudo su
    zu starten. Falls man die Terminalsitzung später unterbricht und neu beginnt, so ist erneut "sudo su" einzugeben.

    Jetzt zur Installation der Pakete:
    Code:
    apt update
    apt install postfix libsasl2-modules sasl2-bin bsd-mailx telnet
    Bei der Installation von postfix sollten folgende Angaben gemacht werden:
    Code:
    General type of mail configuration:
    Satellite system
    
    System mail name:
    mail.hostname
    
    SMTP relay host:
    [smtp.providerhost]:587
    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
    Code:
    dpkg -reconfigure postfix
    machen.

    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
    Folgende Einträge in der Datei sollten angepasst bzw. neu angelegt werden:
    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
    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:

    Code:
    nano generic_exp
    Dabei im Fall 1 folgendes eintragen:

    Code:
    /^(.*@)mail\.hostname$/ ${1}meinedomain.de
    /^(.*@)hostname$/ ${1}meinedomain.de
    Im Fall 2 folgendes eintragen:

    Code:
    /^(.*@)mail\.hostname$/ ich@gmx.de
    /^(.*@)hostname$/ ich@gmx.de
    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:

    Code:
    postmap -q "test@mail.hostname" regexp:generic_exp
    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:

    Code:
    nano main.cf
    Folgendes wiederum eintragen oder ergänzen:
    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
    Die Datei wieder mit STRG-X speichern.

    Jetzt die Datei mit den Anmeldedaten erstellen:
    Code:
    nano sasl_password
    und folgende Zeile eintragen:
    Code:
    [smtp.providerhost]:587 user:password
    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:
    Code:
    postmap sasl_passwd
    chmod 600 sasl_passwd
    chmod 640 sasl_passwd.db
    Aus Sicherheitsgründen sollte der lokale Mailserver nur authentifizierte Mail akzeptieren (ausser vom lokalen System). Dazu eine Konfigurationsdatei erstellen:
    Code:
    cd /etc/postfix/sasl
    nano smtpd.conf
    In die Datei folgendes schreiben:
    Code:
    pwcheck_method: auxprop
    auxprop_plugin: sasldb
    mech_list: CRAM-MD5 DIGEST-MD5 LOGIN PLAIN
    mit STRG-X speichern.

    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
    Man kann testen, ob der User angelegt wurde:
    Code:
    sasldblistusers2
    das Ergebnis sollte sein: user@hostname: userPassword (das Passwort wird also nicht genannt)

    Will man das Passwort bei Bedarf ändern, so geht das mit:
    Code:
    saslpasswd2 user@hostname
    Password: -neues Passwort-
    Die Zugangs-Datenbank muss jetzt noch für postfix als Kopie verfügbar gemacht werden:
    Code:
    cp /etc/sasldb2 /var/spool/postfix/etc/
    chown postfix:sasl /var/spool/postfix/etc/sasldb2
    chmod 660 /var/spool/postfix/etc/sasldb2
    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:
    Code:
    cd /etc/postfix
    nano main.cf
    und folgendes eintragen:
    Code:
    cyrus_sasl_config_path = /etc/postfix/sasl
    smtpd_sasl_local_domain = $myhostname
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_security_options = noanonymous
    Speichern wieder mit STRG-X und anschliessend postfix komplett neu starten:
    Code:
    service postfix restart
    systemctl daemon-reload
    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
    Code:
    postconf     (alle Einstellungen)
    postconf -n (nur die Änderungen)
    Jetzt den Mailversand testen:
    Code:
    echo "Testmail" | mail -s "Test" ich@meinedomain.de
    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:
    Code:
    postfix reload
    und den Mailversand erneut testen.

    Die aktuelle Mailqueue (die Liste der noch zum Versand stehenden Mails) kann so überprüft werden:
    Code:
    postqueue -p
    Die Queue wird mit diesem Kommando geleert, um fehlerhafte Mails zu entfernen:
    Code:
    postqueue -f
    Die SASL (Authentifizierungs)-Konfiguration lässt sich auslesen mit:
    Code:
    saslfinger -s
    Für Testzwecke lässt sich der Mailserver auch mit 'telnet' ansprechen ("hostname" dabei korrekt einsetzen):
    Code:
    telnet hostname 25
    Die Antwort sollte sein:

    Code:
    Trying 127.0.1.1...
    Connected to hostname.
    Escape character is '^]'.
    220 hostname ESMTP Postfix (Raspbian)
    jetzt eingeben:
    Code:
    ehlo dummy
    Die Antwort sollte (in etwa) sein:
    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
    Telnet wieder verlassen:
    Code:
    quit
    Nach korrekter Installation und Konfiguration des lokalen Mailservers werden in den Mail Clients (den Smart Home Geräten) zukünftig folgende Zugangsdaten eingetragen

    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'
    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
    Zuletzt geändert von JoergDr; 26.08.2022, 17:15.

    #2
    Danke für's Teilen!

    Kommentar


      #3
      Ich hänge hier mal noch meine Datei main.cf an, dann braucht man den Inhalt nicht abtippen.

      Zu beachten: mein Hostname ist "openhab", mein Provider "1und1.de", das muss man dann ggf. ersetzen.

      Hinweis:
      Ich musste den Namen der Datei um ein ".txt" erweitern, sonst hätte ich den Anhang nicht hochladen können.
      Also wieder zurück benennen in "main.cf".

      Jörg
      Angehängte Dateien
      Zuletzt geändert von JoergDr; 26.08.2022, 18:23.

      Kommentar

      Lädt...
      X