Guten Abend zusammen
In diesem Forum ist mehrmals der Satz aufgetaucht, dass FHEM gegen aussen mit einem ReverseProxy abgesichert werden kann. Vorgängig möchte ich noch erwähnen, dass es für mich nicht in Frage kommt, eine VPN Tunnel zu machen, da ich dadurch zu fest eingeschränkt wäre. Ich bin mir auch völlig bewusst, dass dies die beste Lösung wäre.
Nun habe ich mich auf die Suche nach der zweitbesten Lösung gemacht und bin wie bereits erwähnt auf NGINX gestossen. Ich habe mir diesen mal installiert und mit einem Open SSL Zertifikat ausgestattet. Für den Betrieb habe ich ein neues FHEMWEB erstellt und mit einem User mit Passwort, BasicAuth, abgesichert. Auf dem Router habe ich den Port 443 weitergeleitet auf den Raspi wo NGINX läuft. Soweit so gut...
Der Zugriff klappt wunderbar. Solange NGINX läuft komme ich auf FHEM, wenn ich NGINX stoppe klappt es nicht mehr.. Das heisst für mich das der Server soweit läuft.
Ich stelle mir nun einfach die Frage, was der Vorteil an dieser Konfiguration ist? Ich muss weiterhin den Benutzername und Passwort des FHEMWEBS eingeben. Aber das musste ich auch bei meiner alten Konfiguration, als ich beim FHEMWEB einfach HTTPS eingeschaltet hatte und ebenfalls mit BasicAuth ein Benutzer und Passwort vergeben hatte.
Was ist die zusätzliche Sicherheit mit NGINX im Gegensatz zu HTTPS nur in FHEM?
Besten Dank für Eure Antworten.
Ohne ein Sicherheitsexperte zu sein, gebe ich mal ein paar Dinge die mir spontan einfallen:
Jeder Server, also auch ein Webserver weist mögliche Schwachstellen auf, der WEBServer in FHEM ist aber nicht speziell auf Sicherheit ausgerichtet und damit möglicherweise anfällig.
Ein Reverseproxy erhöht die Sicherheit auch dadurch, dass bei einem Einbruch das vermutlich kritischere System (FHEM) sondern nur der Webserver kompromittiert wurde. Normalerweise wird dieser aber in einer abgetrennten Netzwerkzone (DMZ) eingesetzt, damit bei Kompromittierung noch kein Einbruch ins interne Netz erfolgt. Also muss der nginx eigentlich in eine DMZ
Ohne das überprüft zu haben, ist vielleicht auch die https-Unterstützung in nginx sicherer (bezogen auf die Konfiguration / Unterstützung von TLS)
ABER: Wenn Du nicht entscheiden kannst warum etwas sicherer ist, wie willst Du dann eine vernünftige Entscheidung treffen, ob es "ausreichend" sicher ist und welches Risiko Du eingehst ???
Disclaimer: Ich würde einen Reverseproxy zuhause nicht empfehlen. Und in anderen Bereichen nur bei automatisierten Updates auf einem separaten Rechner und in einer DMZ anwenden. Trotzdem würde ich dann noch über intrusion detection nachdenken...
Hi,
also ich sehe es ähnlich. In erster Linie vertraue ich Nginx ... das ist eine sehr weit verbreitete und gut getestete Software. Damit wird ein Grossteil der existierenden Webserver betrieben. Ich selbst tue das (okay, das ist jetzt ein schwaches Argument) ... aber grosse Konzerne tun es auch. FHEM dagegen ist nicht im Ansatz so weit verbreitet oder getestet. Es ist toll, aber mehr oder weniger ein Hobbyprojekt.
D.h. ich sehe Nginx als solides Tor vor meinem evtl. verwundbaren FHEM.
In deinem Setup reichst du die Requests direkt an FHEM weiter und FHEM macht weiterhin sein Basic Auth. Das ist das Problem, da hast du nix gewonnen. Taugt das Basic Auth in FHEM nix, kann dir Nginx auch nicht helfen. Du musst die Authentifizierung in Nginx bereits machen.
Das ist wie bei einem Türsteher. Wenn der die Leute einfach durchlässt kann man ihn auch entlassen. Er bringt nix.
Schau mal hier: http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html
Danach kannst du dann in FHEM die Authentifizierung abschalten (sofern der Nginx der einzige Weg zu FHEM ist). Alternativ benutzt du in Nginx und in FHEM die gleichen Benutzer. Dann hast quasi doppelt geprüft, aber musst es nur einmal eingeben.
Gruss Frieder
Hi,
meine Vorredner haben eigentlich schon alles gesagt. Ich habe da securitytechnisch nichts zu ergänzen. Mal abgesehen davon, dass die Sicherheit von nginx natürlich mit der Konfiguration steht und fällt.
Ein weiterer Grund für einen Reverse-Proxy kann aber z.B. sein, dass man nicht von überall aus auf den (Standard-)FHEM-Port 8083 zugreifen darf. Firmennetz oder Hotel-WLAN z.B. Da kann's dir passieren, dass nur die Ports 80 u. 443 erlaubt sind.
Gruß
Stefan
Moin,
vlt. kann ich die Sache noch etwas verdeutlichen:
Wenn man einen Proxy einsetzt, kann das zusaetzliche Sicherheit bringen, sofern dieser auch dazu konfiguriert ist.
Bleiben wir bei dem Tuersteher:
Ihr habt eine Disco, besorgt einen Tuersteher und voila, fertig (fhem + nginx). Leider habt ihr dem Tuersteher keine Anweisungen gegeben, wer oder was rein darf. Das Resultat: der Tuersteher ist zwar da, wird aber weiterhin alles rein lassen, was gern rein moechte.
Klar habt ihr "hinter" dem Tuersteher noch eine Tuer, die man nur mit dem richtigen PIN (basic auth) oeffnen kann, aber euer Tuersteher verhindert z.B. nicht, das jemand mit einem Hammer auf das Schloss los geht, denn das habt ihr ihm nicht gesagt.
Euer FHEM ist jetzt also mit nginx mehr oder weniger genauso sicher, wie vorher auch. Der einzige echte technische Unterschied: die Verbindung von aussen wird vom nginx angenommen. Sind also z.B. Fehler im "Verbindungshandling" von Perl (hab mir den FHEM Code jetzt dazu nicht angeschaut, aber ich geh mal davon aus, das das gesamte Socket Handling etc. von entsprechenden Modulen gemacht wird), dann wuerde man die mit nginx verhindern - dafuer hat man mit nginx eine neue Angriffsflaeche geschaffen - die, zum Glueck, sehr gering ist, da nginx wirklich so ziemlich das Beste auf dem Markt ist.
Wenn man jetzt die Authentifizierung nginx ueberlaesst, dann hat das einen entscheidenden Vorteil: am fhem kommt nix an, was nicht vorher schon den richtigen User/PW kannte. Sprich man kann auch den FHEM nicht ueberlasten oder sonst wie nerven. Das geht bei obrigem Beispiel naemlich auch sehr gut.
Will man es jetzt wirklich sicherer gestalten, sollte man dem nginx beibringen, selbst wenn die korrekte Authentifizierung stattgefunden hat, nur "gute" Befehle durch zu lassen. In dem Fall von FHEM ist das recht schwierig, denn was genau ist gut? wenn jemand es schafft mein User/PW zu knacken und meine Steckdosen 20.000 mal am Tag ein und aus schaltet, koennte das ein Problem sein. Es kann aber genauso gut ein Problem sein, Perl Code auszufuehren, denn dann kann ich ggfs. dafuer sorgen, das ich von aussen "voll" auf FHEM bzw. den unterliegenden Rechner zugreifen kann. Das ist jedoch i.d.R. nur in wenigen Faellen der Fall: 1. jemand hat persoenliche Absichten gegen euch. 2. FHEM ist so sehr verbreitet das es sich fuer Angreifer lohnt, Code zu schreiben der quasi "fuer jedes FHEM" funktioniert. Und die Verbreitung muss deswegen gross sein, das man anschliessend die grosse Menge an FHEM installationen missbrauchen kann um z.B. groessere Angriffe zu starten. Halte ich aktuell fuer noch zu gering / unwahrscheinlich, jedoch realistisch machbar in "kurzer Zeit".
Wenn man sein FHEM nun sicher "erreichbar" machen moechte, ist der beste Weg i.d.R. ein gut aufgesetztes VPN. Das muss auch gar nicht viel mehr Leisten, als die Verbindung zum FHEM zu erlauben, jedoch ist das i.d.R. schon recht anspruchsvoll zu konfigurieren oder in einigen Endanwender Geraeten gar nicht vorgesehen. Dazu kommt das nicht jedes Quellnetz (euer Arbeits WLAN oder so) auch jede VPN Verbindung zulaesst, dh. im schlimmsten Fall kann man es nicht benutzen.
Die 2. "sicherste" Variante (um zu verhindern das einfach User/PW geraten wird etc.) ist es, im nginx SSL Client Zertifikatsauthentifizierung zu konfigurieren. dann braucht jedes Geraet das sich mit euerm FHEM verbinden moechte, das richtige Zertifikat. Vermutlich(!) wird das mit Apps nicht sauber klappen, mit dem Browser auf dem Handy evtl. schon - mit einem Rechner sollte das kein Problem sein - ist aber, alles in allem, recht komplex und Fehleranfaellig (nicht nur von der Konfiguration her, sondern auch von der Unterstuetzung durch die verwendeten Tools wie Browser, Apps etc.).
Eine weitere Moeglichkeit, wenn man von einem Rechner aus darauf zugreift (wobei es auch Apps gibt, aber Erfahrungen hab ich da keine), ist es, einen SSH Tunnel zu verwenden. Am besten natuerlich mit SSH Key abgesichert. Dann muss man sich zuerst auf dem FHEM Rechner (oder einem anderen Rechner im Netzwerk) mit SSH anmelden und erreicht FHEM anschliessend getunnelt ueber http://localhost:8083/fhem (nur als Beispiel, abhaengig von der Konfiguration).
Einen besonderen, nicht FHEM spezifischen, Port zur Weiterleitung ohne Tunnel + User/PW ist zumindest gegen einen automatischen Angriff ein weiterer kurzfristiger Schutz (bzw. es verzoegert das finden des FHEMS ein bisschen).
Ansonsten gilt: Risioko abwaegen. Wenn jemand Zugriff auf euer FHEM (und damit theoretisch auf euren FHEM Rechner) hat, birgt das immer ein Risiko. Egal ob man jetzt "keine geheimen Daten" im Netz zu Hause hat oder nicht, wenn euer Rechner dazu missbraucht wird, anderen zu schaden, ist das genauso schlecht. Geringer Aufwand mit recht gutem Erfolg: nginx (oder ein anderern Proxy) mit eigener(!) Authentifizierung via. SSL (ohne SSL kann man sich das meist eh sparen).
Sicherheit wird damit erhoeht, FHEM geschuetzt, Angriffsflaeche im Vergleich zu "ohne NGINX" meiner Meinung nach geringer in der Realitaet, etwas hoeher durch zusaetzliche Software auf dem Papier.
Wer mehr auf Sicherheit wert legt: SSH + Tunnel, VPN oder: gar nicht von aussen dran ;)
Ich hoffe das hat ein bisschen geholfen.
Gruss,
Sven
Ich find's ja total schade, dass man mit der Forensoftware Beiträge nicht bewerten kann. In diesem Sinne @Sven: "+1" bzw. "like" bzw. "upvote" bzw. was dir am liebsten ist. ;)
Hi,
wenn man mal davon ausgeht, dass man eine Lösung mit (Basic) Authentifizierung und SSL haben will, gibt es da irgendwelche Vor- bzw. Nachteile, wenn man Apache statt Nginx verwendet?
Gruß,
Thorsten
Hi,
also grundsätzlich bevorzuge ich Nginx für solche Loadbalancer- oder Proxygeschichten. Da hat Nginx einfach mehr zu bieten und ist einfacher einzurichten.
Jetzt für FHEM ist es rein technisch egal. Es geht mit beiden.
Also nimm das wobei dir wohler ist und wovon du mehr Ahnung hast.
Persönlich empfinde ich Nginx als ne Ecke sicherer, aber das ist eher Bauchgefühl.
Gruss Frieder
Hallo zusammen,
also ich habe auch meine Installation mit Apache2 Reverse Proxy abgesichert.
Dadurch wird ein fhem, aber auch meine IP Kameras geschützt. Soweit traue ich den Zutrittskontrollen einer 40€ IP-Kamera dann doch nicht...
Zusätzlich noch ein fail2ban davor, das nach 3 falschen Versuchen die feindliche IP für 4 Stunden sperrt.
Eine Zeitlang hatte ich Angriffe v.a. aus China, Frankreich und Spanien, aber laut Logs waren die auf der Suche nach Telefonanlagen, zumindest von den Benutzernamen her.
In letzter Zeit ist es deutlich ruhiger.
Ich habe mich damals für Apache entschieden, zum einen weil es im Wiki recht schön beschrieben war, zum anderen weil ich Apache schon kannte.
Und da auch Apache millionenfach weltweit im Einsatz ist, sollte eine Schwachstelle in der Benutzerauthentifizierung recht schnell irgendjemandem auffallen und v.a. gefixt werden.
Viele Grüße,
Heiko
Moin,
Zitat von: Thorsten Pferdekaemper am 28 Januar 2016, 16:43:54
wenn man mal davon ausgeht, dass man eine Lösung mit (Basic) Authentifizierung und SSL haben will, gibt es da irgendwelche Vor- bzw. Nachteile, wenn man Apache statt Nginx verwendet?
Aus Erfahrung und Codebasis gesprochen ist der nginx die bessere Wahl weil:
- weniger Resourcenverbrauch
- Besser auf sachen wie Proxy optimiert
- Kleinere Codebasis (= weniger pot. Fehler, in der Theorie)
Wenn man Apache einsetzen will, empfiehlt es sich, alle Module die man nicht braucht auch wirklich zu deaktivieren. Damit reduziert man zumindest schonmal das Angriffspotential. Ausserdem gilt generell immer: updates regelmaessig einspielen. Gerade in Verbindung mit SSL gab es da in den letzten Jahren viel Bedarf.
Aber, wie Frieder schon sagte: das mit dem Du Dich am wohlsten fuehlst und besten auskennst, denn Du musst das Ding verwalten. Was nutzt eine sichere Software, wenn man sie unsicher oder schlecht konfiguriert weil man kaum Erfahrung damit hat?
Gruesse,
Sven
Zitat von: Darkman am 29 Januar 2016, 10:52:02
Aber, wie Frieder schon sagte: das mit dem Du Dich am wohlsten fuehlst und besten auskennst, denn Du musst das Ding verwalten. Was nutzt eine sichere Software, wenn man sie unsicher oder schlecht konfiguriert weil man kaum Erfahrung damit hat?
Naja, wenn ich ganz ehrlich bin habe ich mit beiden kaum Erfahrung... Trotzdem Danke für die Antworten.
Gruß,
Thorsten