Sicherer Zugriff von Außerhalb

Vorwort

Für einige Anwendungen auf dem heimischen Server ist es von Vorteil, über das Internet erreichbar zu sein. Dabei kann es sich sowohl um Fhem, die eigene Cloud oder eine selbst gehostete Website handeln.

In erster Linie sollte dabei die Sicherheit an erster Stelle stehen. Jeder Zugriff auf den Server gehört mindestens verschlüsselt und authentifiziert.

Dieser Beitrag behandelt umfangreich die Themen:

  • ReverseProxy mithilfe eines Apache2-Webservers
  • Apache2-Webserver ausreichend absichern
  • Fail2ban Überwachung
  • VPN-Verbindung

Für alle Interessierten – viel Spaß beim Lesen, Nachmachen, Inspirieren lassen, Lästern.

Inhalt

Grundvoraussetzungen

  • einen Apache2-Webserver / LAMP-Server (Nginx würde ebenfalls funktionieren, wird hier aber nicht behandelt)
  • eine FritzBox (oder ein anderer Router, der Portfreigaben ermöglicht)
  • MyFritz-Konto (oder ein alternativer Domain-Anbieter – DDNS z.B.)

Die Anleitung sollte unter allen Debian-basierenden Betriebssystemen gleichermaßen funktionieren. Auf meinem Server läuft Ubuntu 18.04, ich wüsste aber nicht, dass es unter Raspbian z.B. nennenswert anders einzurichten wäre.

zurück zum Inhalt

Reverse-Proxy

Der Apache2 Webserver dient in dieser Konfiguration als sog. Reverse-Proxy. Der Begriff hört sich erstmal krass an – ist aber nichts wovor man sich fürchten müsste.

Die Funktion eines gewöhnlichen Proxy-Servers dürfte den Meisten bekannt sein: Ist man mit einem Proxy-Server verbunden, wird man selbst zu einem Proxy-Client. Als Client leitet man alle Internet-relevanten Anfragen über jenen Proxy-Server. Der Client bleibt unsichtbar im Hintergrund, der Proxy-Server hält den Arsch hin.

Bei einem Reverse-Proxy-Server ist es eben umgekehrt – alle Anfragen aus dem Internet laufen über den Reverse-Proxy, dieser Verteilt die Anfragen dann auf die dahinter liegenden Clients. Die Clients schleifen ihre Daten dann wieder über den Reverse-Proxy. Die Clients treten also nicht nennenswert in Erscheinung.

Apache2 ist neben Nginx die wohl bekannteste Webserver-Software für Linux. Um den Apachen gibt es eine große Community – die Software kostet nichts und funktioniert einwandfrei. Es spricht also meiner Meinung nach nichts gegen die Verwendung.

Installiert wird der Apache2-Webserver mit:

sudo apt-get install apache2

http://IP.Adresse.des.Servers

Der Apache bekommt in den nächsten Schritten noch eine schöne Kur verpasst.

zurück zum Inhalt

Schritt 1: SSL Verschlüsselung einrichten und aktivieren

Es gibt viele Wege die SSL-Verschlüsselung einzurichten. Im Thema über meinen Eigenbau NAS-Server habe ich einen Weg bereits behandelt; hier nochmal die Schritte:

sudo -i

mkdir /etc/apache2/ssl

cd /etc/apache2/ssl

openssl genrsa -out homeserver.key 2048

chmod 600 homeserver.key

openssl req -new -x509 -key homeserver.key -days 730 -sha256 -out homeserver.crt

a2enmod ssl

a2dissite 000-default.conf

nano /etc/apache2/sites-avaliable/00-homeserver.conf

In die 00.homeserver.conf wird folgender Inhalt eingefügt:

<VirtualHost *:80>

ServerAdmin webmaster@localhost

Redirect / https://IP.Adresse.des.Servers

ErrorLog ${APACHE_LOG_DIR}/homeserver_error.log

CustomLog ${APACHE_LOG_DIR}/homeserver_access.log combined

</VirtualHost>

<VirtualHost *:443>

SSLEngine on

SSLCertificateFile /etc/apache2/ssl/homeserver.crt

SSLCertificateKeyFile /etc/apache2/ssl/homeserver.key

SSLProtocol All -SSLv2 -SSLv3

SSLCompression Off

SSLHonorCipherOrder on

SSLCipherSuite  ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5

ServerAdmin webmaster@localhost

DocumentRoot /var/www/html

</VirtualHost>

Mit Strg+O speichern und mit Strg+X beenden.

Im folgenden wird die alte Default-Config-Datei außer Betrieb genommen und die Neue aktiviert. Zu guter Letzt wird der Apache neu gestartet:

a2dissite 000-default.conf

a2ensite 00-homeserver.conf 

service apache2 restart

Der Apache-Server ist nun nur noch über HTTPS-Port 443 von Außen zu erreichen. Port 80 wurde in der 00-homeserver.conf zwar nicht deaktiviert, aber alle Anfragen auf diesen Port werden an Port 443 weitergeleitet. Dazu muss nur noch die IP-Adresse eures Servers eingetragen werden.

Bei einem Browser-Aufruf eures Apachen wird nun eine Warnung wegen eines nicht vertrauenswürdigen Zertifikat angezeigt werden – diese Warnung darf natürlich ignoriert werden. Die eigene SSL-Verschlüsselung besitzt kein vertrauenswürdiges Zertifikat, funktioniert aber ebenso gut.

https://IP.Adresse.des.Servers

image0117

Die Verschlüsselung steht nun. Damit auch nur authentifizierte Benutzer auf den Apachen zugreifen können, ist folgendes zu tun:

zurück zum Inhalt

Schritt 2: Authentifizierung

In diesem Schritt wird an einem beliebigen Ort im System, der natürlich nicht in irgendeiner Weise aus dem Internet erreichbar ist, ein Ordner und eine Datei angelegt, in der die Daten für die Authentifizierung hinterlegt werden. Name des Ordners und der Datei dürfen dabei beliebig gewählt werden.

Ich erstelle Ordner und Datei im Apache Verzeichnis:

cd /etc/apache2/

sudo mkdir auth

sudo chgrp www-data auth

sudo chmod 2750 auth

Alle Mitglieder der Gruppe www-data (das ist der Benutzer unter dem der Apache-Server läuft) haben Leseberechtigung. Alles Weitere läuft nur über Root.

Nun wird die Nutzername/Passwort Datei erstellt. Die darin enthaltenen Passwörter werden als Hash gespeichert.

sudo -i

cd /etc/apache2/auth/

htpasswd -c passwords.pwd username

Passwort eingeben

Passwort wiederholen

exit

Das -c (für create) in diesem Befehl sorgt lediglich dafür, dass die Datei erstellt wird. Um weitere Benutzer/Passwort – Kombinationen anzulegen kann wieder der obige Befehl benutzt werden – allerdings ohne das -c

htpasswd passwords.pwd username2

Jetzt muss nur noch der Apache darüber informiert werden, dazu wird die 00-homeserver.conf bearbeitet.

cd /etc/apache2/sites-available

sudo nano 00-homeserver.conf

Wenn ihr Schritt 1 ausgeführt habt, dann solltet ihr den Inhalt dieser Datei bereits kennen. Damit der Apache nun die Datei abfragt und euch dazu auffordert einen Benutzernamen und Passwort einzugeben müssen noch einige Zeilen ergänzt werden.

Im folgenden Beispiel wird das gesamte Verzeichnis /var/www/hmtl nur noch per Authentifizierung zugänglich gemacht. Die folgenden Zeilen können direkt unter den DocumentRoot– Eintrag für Port bzw. VirtualHost *:443 eingefügt werden.

<Directory "/var/www/html/">

AuthType Basic

AuthUserfile /etc/apache2/auth/passwords.pwd

AuthName "admin"

Require valid-user

</Directory> 

<Proxy *> 

AuthType Basic 

AuthUserfile /etc/apache2/auth/passwords.pwd 

AuthName "admin" 

Require valid-user 

</Proxy>

Nachtrag: Der rote Teil des Codes muss  unbedingt in die 00-homeserver.conf eingetragen werden, wenn ihr z.B. Fhem-Web über das Internet erreichen wollt. Dieser Teil sorgt dafür, dass bei Proxy-Weiterleitungen die Passwort-Datei ebenfalls abgefragt wird.

Nachtrag 2:  Owncloud scheint diese Methode der Authentifizierung nicht sonderlich zu mögen, daher empfehle ich nicht das ganze Verzeichnis wie im Beispiel zu behandeln, sondern nur gezielte Ordner innerhalb des Document-Root von Apache.

Obligatorisch mit Strg+O speichern und den Editor mit Strg+X verlassen, dann noch den Apache neu starten.

sudo service apache2 restart

Abschließend kann man den Erfolg wieder im Browser begutachten

https://IP.Adresse.des.Servers

image0116

Grundsätzlich kann man den Apache so online stellen. Ich nutze dazu die Dienste meiner FritzBox.

zurück zum Inhalt

FritzBox / MyFritz

Damit der Reverse-Proxy/Apache2 komfortabel erreicht werden kann, bedarf es einer festen Adresse. Hier kommt die FritzBox mit einem MyFritz-Konto ins Spiel.

zurück zum Inhalt

Portfreigabe

In der FritzBox wird unter Internet > Freigaben >Portfreigaben eine Freigabe für den Server erstellt. Dazu trägt man entweder manuell die IP-Adresse ein, oder wählt den Gerätenamen aus dem Dropdown aus. Die neue Freigabe sollte eine Portfreigabe sein und die Anwendung HTTPS-Server. In der Regel sollten die restlichen Einstellungen automatisch gesetzt werden (Port von bis: 443, Port extern: 443). Die Freigabe kann dann auch direkt aktiviert und gespeichert werden.

zurück zum Inhalt

MyFritz-Konto

Ebenfalls unter Internet dann > MyFRITZ!-Konto ist es möglich sich via Anmeldung mit einer E-Mail-Adresse eine feste Domain für den Zugriff auf die FritzBox geben zu lassen. Im Gegensatz zur IP-Adresse bleibt die Domain bzw. MyFritz-Adresse immer gleich und kann daher als zuverlässig als Zugriffspunkt auf den eigenen Server/die eigene Fritzbox dienen.

image0112

Feld 1: Die von MyFRITZ erhaltene Domain —– Feld 2: Erfolgreiche Anmeldung bei MyFRITZ!

Mit diesen beiden Funktionen der FritzBox hat man nun die Möglichkeit den Port 443 per Domain von überall auf der Welt zu erreichen.

Der Apache2 brauch nur diese eine Freigabe – mehr nicht. Sämtliche weiteren Freigaben und Sicherheitseinstellungen können bequem über die 00-homeserver.conf angelegt werden.

zurück zum Inhalt

Reverse-Proxy Teil 2

Am Apache-Webserver werden nun noch einige weitere Optimierungen vorgenommen. Zum Einen muss ja noch der eigentliche Reverse-Proxy eingerichtet werden, zum Anderen sollen es Eindringlinge so schwer wie möglich haben, einen Zugriff auf den Server zu bekommen.

zurück zum Inhalt

Schritt 3: Fhem über den Apache erreichen

Um z.B. FhemWeb über den Apache zu erreichen sind noch ein paar Kleinigkeiten zu erledigen.

Erstmal muss das entsprechende Modul aktiviert werden

sudo a2enmod proxy proxy_http

Dann wird eine neue Config-Datei erstellt

sudo nano /etc/apache2/conf-available/proxy_default.conf

mit folgendem Inhalt:

<IfModule mod_proxy.c>

ProxyRequests Off

<Proxy *>

Order deny,allow

Allow from all

</Proxy>

</IfModule>

Wie immer: Strg+O – speichern, Strg+X – Editor verlassen.
Config-Datei aktivieren mit:

sudo a2enconf proxy_default

Für Fhem legen wir noch eine separate Conig-Datei an

sudo nano /etc/apache2/conf-available/fhem.conf

Inhalt:

<IfModule mod_proxy.c>

<Location /fhem>

ProxyPass https://IP.Adresse.des.Servers:8083/fhem

ProxyPassReverse https://IP.Adresse.des.Servers:8083/fhem

</Location>

</IfModule>

Config-Datei aktivieren

sudo a2enconf fhem

Apache neustarten

sudo service apache2 restart

über den Browser dann wieder testen mit

https://IP.Adresse.des.Servers/fhem

Ich empfehle euch den Port 8083 nicht über den Apache-Server frei zu geben, sondern stattdessen lieber einen Webhook / Webapi für Fhem zu definieren. Für den Zugriff auf Port 8083 sollte man lieber auf eine VPN-Verbindung zurückgreifen.

Selbstverständlich kann man so auch weitere Dienste freigeben – einfach eine neue Config-Datei aufsetzen und eine entsprechende Weiterleitung einrichten (z.B. für Fhem-Webphone, Webtablet – und welche Dienste ihr sonst noch so nutzt).

Bitte beachtet aber immer die Angaben unter Schritt 2.

zurück zum Inhalt

Schritt 4: Fail2Ban

… ist ein Dienst, der die offenen Ports des gesamten Servers überwacht und entsprechende Maßnahmen einleitet, wenn irgendwas merkwürdiges passiert. Wenn jemand z.B. versucht sich mehrfach mit der falschen Kombination aus Benutzername und Passwort einzuloggen, wird die IP-Adresse desjenigen eine Zeit lang gesperrt. Der Dienst ist eigentlich für den SSH-Port vorgesehen – er kann aber auch den Apache überwachen.

sudo apt-get install fail2ban

Fail2Ban befindet sich nun im Verzeichnis /etc/fail2ban/. Damit sämtliche Änderungen, die wir nun vornehmen, nicht nach einem Update z.B. für die Katz sind, kopieren wir die Config-Datei von Fail2Ban und benennen sie dabei um.

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Diese Datei werden wir nun entsprechend anpassen. An sich ist das kein Problem, die Datei und die einzelnen Parameter sind sehr ausführlich beschrieben. Neben Apache können auch viele weitere Dienste eingebunden werden.

sudo nano /etc/fail2ban/jail.local

hier navigiert man zuerst zum Bereich [DEFAULT]

image0118

Um sich nicht selbst aus dem System auszuschließen wird das Kommentarzeichenvor dem Eintrag ignoreip wird entfernt und eure eigene IP-Adresse eingesetzt. Ich z.B. setze hier die IP-Adresse meines Windows-PC ein. Der bereits bestehende Eintrag kann erhalten bleiben.

ignoreip = 127.0.0.1/8, 192.168.178.XX

Weiter unten in der Datei trifft man auf die Konfiguration der einzelnen Jails. Diese sind von sich aus erstmal inaktiv. Damit der Apache-Server nun auch von Fail2Ban überwacht wird, navigiert man weiter bis zum Eintrag # HTTP servers

image0121

Ab hier können dann einzelne Jails, durch den Eintrag enabled = true, aktiviert und konfiguriert werden. Für den Apache wird es ab [apache-auth] interessant.

Das Anpassen der Pfade zu den Log-Dateien ist im Normalfall nicht nötig.

Folgende Apache-Jails sollten aktiviert und bearbeitet werden:

  • [apache-auth]
    • enabled = true
    • filter = apache-auth
    • maxretry = 3
    • findtime = 600
  • [apache-noscript]
    • enabled = true
  • [apache-overflows]
    • enabled = true
    • filter = apache-overflows
  • [apache-badbots]
    • enabled = true
    • filter = apache-badbots
  • [apache-nohome]
    • enabled = true
    • filter = apache-nohome

Eins hab ich noch:

  • [php-url-fopen]
    • enabled =  true

Falls man noch weitere Dienste nutzt, kann man diese höchst wahrscheinlich ebenfalls durch Fail2Ban überwachen lassen. Im Prinzip macht Fail2Ban nicht viel mehr als die Log-Datei des jeweiligen Dienstes auszulesen und bei Unregelmäßigkeiten die Unruhe-stiftende IP-Adresse zu blockieren.

Strg+O zum speichern, Strg+X zum Beenden des Editors.

sudo service fail2ban restart

Die aktiven Jails kann man sich, nach dem Neustart des Dienstes, mit dem Befehl

sudo fail2ban-client status

ausgeben lassen. Wenn ihr meiner Anleitung gefolgt seid, dann sieht das so aus:

image0122

zurück zum Inhalt

Test

Fail2Ban ist damit voll einsatzfähig und bereit für einen Test. Dazu nimmt man ein Gerät (z.B. das Smartphone), dessen IP-Adresse man nicht in die Liste der ignoreip eingetragen hat und loggt sich dreimal falsch ein.

Nach den drei fehlgeschlagenen Log-In Versuchen sollte in etwas sowas erscheinen:

Screenshot_20181003-230345

Fail2Ban hat also zuverlässig erkannt, dass hier etwas nicht stimmt. Im Terminal können wir das Ganze auch nachvollziehen

sudo fail2ban-client status apache-auth

image0123

Die gebannte IP-Adresse ist in dem Fall die meines Smartphones. Um sie wieder zu entsperren nutzt man den Befehl

sudo fail2ban-client set apache-auth unbanip 192.168.178.XX

Die Adresse ist danach wieder freigegeben und kann wieder normal auf den Server zugreifen. Ohne manuellen Eingriff dauert es die in der Jail.local gesetzte Zeit, bis eine IP-Adresse automatisch entsperrt wird. In der Default-Einstellung sind das 10 Minuten (zu sehen im ersten Screenshot). Sämtliche Restriktionen lassen sich natürlich völlig frei wählen und ganz an den Bedarf anpassen.

Für die meisten Brute-Force Attacken widerlicher Möchtegern-Hacker sollte der Server nun ganz gut gerüstet sein. Kleinere Feineinstellungen folgen noch in

zurück zum Inhalt

Schritt 5: Kleinkram

Für Angriffe jeder Art benötigt man Informationen. Um so wenig wie möglich davon Preis zu geben kann man noch einige Änderungen vornehmen.

Dazu werden in der apache2.conf folgende Änderungen gemacht:

sudo nano /etc/apache2/apache2.conf
  1. Timeout-Wert von 300 auf 45 herabsetzen
  2. am Ende der Datei wird folgendes hinzugefügt
    1. ServerSignature Off
    2. ServerTokens Prod

Strg+O zum speichern, Strg+X zum Verlassen des Editors.

sudo service apache2 restart

Der Apache sollte mit diesen kleinen Änderungen nun nur noch wenige Informationen über den Browser mitteilen. Die genannten Änderungen sind übrigens alles übereinstimmende Fundstücke verschiedener Blogs und Webseiten.

Die Standart-Index-Datei im Ordner /var/www/html kann übrigens, zur Sicherheit, auch gelöscht/verschoben/umbenannt werden.

zurück zum Inhalt

VPN-Verbindung per FritzBox

Der Apache-Server ist für’s Erste sehr gut abgesichert. In Schritt 3 habe ich darauf hingewiesen, dass man Port 8083,also das normale Fhem-Web, lieber per VPN-Verbindung erreichbar machen sollte, statt über den Apache.

In der FritzBox kann man unter dem Link Internet > Freigaben im Reiter oben den Punkt VPN auswählen

image0124

Bei einer aktiven VPN-Verbindung verhält sich das Netzwerk auf dem Gerät so, als würde man sich im heimischen Netzwerk aufhalten.

Wäre ich also in China und hätte mein Smartphone dabei – könnte ich einfach die VPN-Verbindung einschalten und z.B. im Browser über https://IP.Adresse.meines.Fhem-Servers:8083 meine Fhem-Web Instanz aufrufen und gucken wie hoch die Temperatur in meinem Wohnzimmer derzeit ist. Exakt so, als würde ich zuhause auf der Couch sitzen. Natürlich funktioniert das mit allen Geräten im heimischen Netzwerk; angenommen ich öffne meine TV-Receiver App, dann könnte ich auch genau so gut eine Aufnahme timen – ohne den Receiver erst separat freigeben zu müssen oder die App anders zu konfigurieren.

Wir richten nun eine VPN-Verbindung ein, die ich von meinem Smartphone aus nutzen möchte. Dazu klickt man erstmal auf den Reiter VPN und dann auf VPN-Verbindung hinzufügen

image0125.png

Im Folgenden wählt man die Option Fernzugang für einen Benutzer einrichten

image0126Die FritzBox wird nun nach einem spezifischen Benutzer fragen, für den die Freigabe gelten soll. Falls man noch keinen Benutzer angelegt hat, so kann man das nun leicht nachholen. Wenn man sich ein MyFritz-Konto angelegt hat, sollte bereits mindestens ein Benutzer vorhanden sein.

image0127.png

Bei mir sind drei Benutzer vorhanden. ftpuser sollte als Standart vorhanden sein, Laptop habe ich selbst angelegt und Marcel ist der MyFritz-Benutzer.

Um den Nutzer Marcel nun auch per VPN einen Zugriff auf das Netzwerk zu ermöglichen klickt man links auf den Stift-Button zum Bearbeiten

image0128.png

Auf der Seite aktiviert man die Optionen Zugang auch aus dem Internet erlaubt und VPN-Verbindungen zur FRITZ!Box können hergestellt werden. Danach klickt man auf Speichern.

Die FritzBox wird nun fragen, ob die Verbindungseinstellungen für Android und iOS angesehen werden möchten – hier wählt man Ja oder Ok – je nach dem was angezeigt wird. Es öffnet sich ein neues Fenster, wo die Einstellungen für das jeweilige Betriebssystem aufgezeigt werden

image0129.png

Weiter geht’s am Smartphone. Ich nutze natürlich Android, daher ist der zweite Abschnitt für mich relevant.

Unter Einstellungen > Drahtlos & Netzwerke > Mehr > VPN kann man durch einen Klick auf die drei Punkte im oberen rechten Bildrand ein VPN-Profil hinzufügen

Screenshot_20181004-221840Den Namen kann man beliebig wählen – ich nehme FritzBox, alle weiteren Angaben liefert das Fenster, der FritzBox.

Screenshot_20181004-221848

Hat man alles eingetragen, klickt man auf Speichern und kann die Verbindung testen. Das Smartphone darf sich dazu aber nicht im heimischen Wifi befinden. Ergo -> Wlan aus, dann testen!

Schlägt die Verbindung fehlt – Eingaben wiederholt prüfen! Inbesondere die Eingabe des IPSec-PSK ist tückisch, da die Eingabe nicht sichtbar ist!

Wenn die Verbindung erfolgreich hergestellt wurde, sieht man in der Statusleiste am Smartphone ein Schlüssel-Symbol. Ab diesem Moment ist die VPN-Verbindung aktiv – und ihr könnt überall auf der Welt und doch Zuhause sein 🙂

Falls euer Smartphone über keine Displaysperre verfügt (PIN, Muster, Fingerabdruck), sollte euch Android an dieser Stelle auffordern so eine Sperre einzurichten. Falls euer Telefon verloren geht oder gestohlen wird hätte der Finder/Dieb ansonsten freien Zugang zu eurem Netzwerk!

Screenshot_20181004-222734

zurück zum Inhalt

Fazit

A FritzBox-User ist as good as an Asus-User:

You are a better lover!

Eine VPN-Verbindung ist schnell und einfach eingerichtet und bietet einen sicheren Zugang zum Heimnetz. Nicht nur vom Smartphone, auch von Laptops oder anderen Rechnern aus kann eine VPN-Verbindung genutzt werden. Beispielsweise könnte man sich so auch in das Firmennetzwerk verbinden und von Zuhause aus arbeiten. Eine smarte Sache.

zurück zum Inhalt

Fhem-Webhook/Webapi

Für Anwendungen aus dem Internet, die Zugang zu Fhem haben müssen (IFTTT oder Geofancy) kann man einen Webhook anlegen. Das ist nichts weiter als eine zusätzliche FhemWeb-Instanz, die allerdings nur eingeschränkte Möglichkeiten bietet (diese sind individuell anpassbar).

Im Detail möchte ich aber gar nicht darauf eingehen, denn im Fhem-Wiki ist ausreichend erklärt wie man so eine zusätzliche Instanz einrichtet:

KLICK

Die Webapi nutzt den Port 8088 – diesen habe ich per ReverseProxy-Apache zugänglich gemacht.

Ich habe mir eine solche Instanz für IFTTT eingerichtet, damit ich per Webhook-Modul einen HTTP(S) Request an Fhem senden kann. So ist es möglich z.B. per Google-Assistant einen Befehl abzusetzen.

Mehr dazu aber an anderer Stelle.

zurück zum Inhalt

Gesamtfazit

Bei meinen Überlegungen Fhem aus dem Internet zu erreichen habe ich mir viele Gedanken gemacht. Andere Lösungsansätze haben aus unterschiedlichen Gründen nicht zum Erfolg geführt (mehr dazu an anderer Stelle).

Einen Reverse-Proxy wollte ich aus verschiedenen Gründen auch erst gar nicht haben, weil es mir zu kompliziert erschien. Erst nachdem ich mich eine Weile mit dem Thema beschäftigt hatte merkte ich, dass es eigentlich kein Hexenwerk ist.

Im Internet sind sehr viele Clowns unterwegs, die es sich zum Hobby gemacht haben sämtliche offene Ports von irgendwelchen Privatmenschen abzuhören und versuchen sich unbefugt Zugang zu verschaffen.

Was paranoid klingen mag, ist mir aber tatsächlich schon passiert:

29133177_905836899591206_3515875875071459328_n

Unmittelbar nachdem ich einst zum ersten Mal im offiziellen Fhem-Forum (!!) gepostet hatte, fand ein Angriff auf meinen Server statt. Jemand wollte sich tatsächlich mithilfe eines Brute-Force Zugang zu meiner FhemWeb-Instanz verschaffen.

Damals hatte ich den Port 8083 auch dummerweise per normaler Portweiterleitung freigegeben (natürlich immerhin per SSL-Verschlüsselung und Authentifizierung) – aber das wird mir nie wieder passieren. Seither nutze ich VPN und den ReverseProxy – und ich würde nicht so viel Zeit und Arbeit investieren so einen Mammut-Beitrag verfassen, wenn ich euch diese Optionen nicht auch dringend ans Herz legen wollen würde.

Die Brute-Force Attacke schlug seinerzeit übrigens fehl, der Angreifer hat es nicht geschafft meine Nutzername/Passwort Kombination mit so einer billigen Attacke zu knacken. Mit dem ReverseProxy und Fail2ban würde er in Zukunft gar nicht mehr so weit kommen.

Die Einrichtung nimmt natürlich etwas Zeit in Anspruch, aber ich denke, dass der Mehrwert an  Sicherheit die Mühe wert ist.

Sicherlich gibt es auch andere Methoden und Tutorial und ob ihr nun meine Methode nutzt, oder eine Andere – Hauptsache ihr seid sicher unterwegs! Ich kann zumindest wieder ruhiger schlafen.

Die FritzBox als zentraler Helfer in meiner Konfiguration ist natürlich die Kirsche auf der Sahnetorte. Bald ist Weihnachten, wer noch keine hat – sollte das Christkind darum bitten!

zurück zum Inhalt