it-swarm.com.de

Sichern von remote zugänglichen IP-Kameras, die HTTPS nicht unterstützen

Ich habe einige IP-Kameras in meinem Heimnetzwerk eingerichtet, das WPA2-geschützt ist. Diese Kameras sind so eingerichtet, dass sie über die DDNS-Adresse und die Portnummer meines Routers über das Internet zugänglich sind.

So kann ich beispielsweise von meinem Büro-PC aus zu http://urltomyrouter.com:12345 gehen, um Kamera 1 zu sehen, nachdem ich meinen Benutzernamen und mein Passwort eingegeben habe.

Diese Kameras sind Foscams FI8910W und unterstützen kein HTTPS. Mein Router ist übrigens ein Asus RT-N56U.

Ich gehe davon aus, dass meine Anmeldeinformationen, mit denen ich mich bei den Kameras anmelde, im Klartext gesendet und nicht verschlüsselt werden, was unsicher ist.

Welche Möglichkeiten habe ich, um dies zu beheben und meinen Zugang sicherer zu machen?

Ich habe irgendwo gelesen, dass ein "Reverse Proxy" eine mögliche Lösung ist, bin mir aber nicht sicher, wie das funktionieren würde ...

16
unknownprotocol

Ich gehe davon aus, dass Ihr Router nicht intelligent genug ist, um einen verschlüsselten Reverse-Proxy selbst einzurichten.

Nachfolgend verwendete Konventionen

Erstprüfungen

Können Sie im lokalen Netzwerk die Webcam unter http://192.168.0.123:456 Sehen? Großartig. Können Sie keine Verbindung zur Webcam von außen herstellen (dh http://1.2.3.4:456 Ist von der Firewall abgeschaltet)? Großartig. Wenn nicht, konfigurieren Sie Ihre Webcam- und Portweiterleitungs-/Firewall-Regeln auf Ihrem Router neu.

Installieren Sie als Nächstes einen Webserver auf einem Computer in Ihrem lokalen Netzwerk, der immer dann aktiviert ist, wenn Sie eine Verbindung zu Ihrer Webcam herstellen möchten. Ich gehe von Linux/Unix aus und gebe Anweisungen für Nginx.

Richten Sie als ersten Test einen Reverse-Proxy ohne Verschlüsselung ein. Installieren Sie die neueste Version von nginx, bearbeiten Sie die Konfigurationsdatei (/etc/nginx/conf.d/default.conf) Und fügen Sie ähnliche Zeilen hinzu:

server {
  listen 8080;
  location / {
      proxy_pass http://192.168.0.123:456; 
  } # replace with your webcam's local IP address and port.
}

Starten Sie nun nginx (Sudo /etc/init.d/nginx restart) Neu und versuchen Sie, eine Verbindung zum Proxy (http://192.168.0.101:8080) Herzustellen. Dies sollte genauso funktionieren, als ob Sie zu http://192.168.0.123:456 Gegangen wären. Wenn Sie Probleme haben, überprüfen Sie alles erneut oder konsultieren Sie die Nginx-Dokumentation .

Ein TLS/SSL-Zertifikat erhalten

Jetzt müssen Sie ein SSL-Zertifikat und den zugehörigen privaten Schlüssel hinzufügen. Sie können eine von einer Zertifizierungsstelle signierte (z. B. kostenlos von startssl.com) oder eine selbst signierte generieren (die von Webbrowsern zunächst nicht als vertrauenswürdig eingestuft wird). Das Einrichten eines von der Zertifizierungsstelle signierten Zertifikats ist für ein Heimnetzwerk komplizierter, in dem Sie einen Domänennamen (den Sie der Zertifizierungsstelle nachweisen können), dynamischen DNS für diesen Domänennamen usw. einrichten müssen (If Sie versuchen, mit Dynamic DNS zu beginnen - https://freedns.afraid.org/ ist ein guter Anfang).

Um ein selbstsigniertes Zertifikat zu generieren, erstellen Sie zunächst mit openssl einen privaten Schlüssel (in diesem Fall einen privaten 4096-Bit-RSA-Schlüssel):

# openssl genrsa -out private.key 4096

Wenn Sie neugierig sind, können Sie den Inhalt mit openssl rsa -in private.key -text -noout Anzeigen. Als Nächstes müssen Sie ein Zertifikat basierend auf diesem privaten Schlüssel generieren. Dies ist möglich mit:

# openssl req -new -x509 -key private.key -out yourcert.crt -days 3650

Der 3650 sagt, dass er in 3650 Tagen (~ 10 Jahre) abläuft. Openssl fordert Sie zu weiteren Details auf. Sie können diese auch leer lassen oder Informationen eingeben. (Sie können den Inhalt Ihres Zertifikats mit openssl x509 -in yourcert.crt -text -noout Anzeigen.).

Legen Sie nun Ihren privaten Schlüssel und Ihr Zertifikat an einen sicheren Ort (z. B. in /etc/ssl/private/private.key Und /etc/ssl/certs/yourcert.crt), Beschränken Sie deren Berechtigungen (stellen Sie sicher, dass Root gehört und niemand anderes Lese-/Schreibberechtigungen hat).

Aktivieren Sie SSL im Reverse Proxy

Bearbeiten Sie anschließend Ihre Nginx-Server-Konfigurationsdatei, um SSL wie folgt zu aktivieren:

server {
   listen 443; # doesn't have to be port 443 - could be any port (say 8080) if you 
               # connect via https://192.168.0.101:8080 .  But on port 443
               # you can just use https://192.168.0.101
   ssl on;
   ssl_certificate  /etc/ssl/certs/yourcert.crt;
   ssl_certificate_key  /etc/ssl/private/private.key;
   # certificate and private key where you just placed them

   ssl_session_timeout  5m;    
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_prefer_server_ciphers on;
   ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
   # reasonable SSL configuration, disable some known weak ciphers.

   location / {
     proxy_pass http://192.168.0.123:456;
     proxy_redirect http://192.168.0.123:456/ $scheme://$Host:$server_port/;
 # If your webcam (or other proxied application) ever gives URLs in the HTTP headers
 # (e.g., in a 302 or 304 HTTP redirect),
 # the proxy_redirect line changes the URL in the HTTP header field
 # from http://192.168.0.123:456/some/path to https://192.168.0.1:8080/some/path
   }
}

Starten Sie nginx neu, und jetzt sollten Sie in der Lage sein, unter https://192.168.0.101 Eine Verbindung zu Ihrer Webcam in Ihrem lokalen Netzwerk herzustellen (Sie erhalten Warnungen, dass das Zertifikat nicht vertrauenswürdig ist, da es sich um ein selbstsigniertes Zertifikat handelt).

Richten Sie die Portweiterleitung in Ihrem Router ein

Der letzte Schritt besteht darin, Ihren Router für die Portweiterleitung zu konfigurieren. Wenn Sie von außen eine Verbindung zu https://1.2.3.4 (Port 443) herstellen, stellen Sie die Portweiterleitung auf 192.168.0.101 (Port 443) ein. Richten Sie möglicherweise dynamisches DNS ein. Wenn sich Ihre IP-Adresse zu Hause ändert, zeigt sie immer noch auf die richtige Stelle. Einige ISPs blockieren die Ports 80 und 443, sodass Sie sie möglicherweise in einen anderen Port ändern müssen.

Achten Sie darauf, wie Sie eine Verbindung herstellen. Ich habe festgestellt, dass viele IP-Kamera-Programme Zertifikate nicht auf Vertrauen prüfen (da sie häufig selbst signiert sind), sodass ein Angreifer möglicherweise einen MitM-Angriff ausführen kann, indem er ein anderes selbstsigniertes Zertifikat einfügt. Es ist am besten, wenn Sie Ihr selbstsigniertes Zertifikat in Ihren eigenen Browsern als vertrauenswürdig hinzufügen und es ablehnen, wenn es sich ändert.

13
dr jimbob

Ihr Router leitet lediglich Pakete weiter, je nachdem, welches Protokoll dahinter steht, bestimmt dies die Sicherheit. Sie können in der Tat, wie Sie bereits erwähnt haben, ein Reverse-Proxy sein, der eine HTTPS-Verbindung abhört und alles an eine HTTP-Verbindung weiterleitet. Dies kann einfach mit Apaches mod_proxy erfolgen.

Alternativ sieht es vielleicht etwas übertrieben aus, aber ein guter Weg wäre, ein VPN einzurichten, mit dem Sie eine Verbindung herstellen können. Dies kann einfach (und kostenlos) mit OpenVPN erfolgen. Sie würden einen Tunnel in Ihrem lokalen Netzwerk sicher beenden und dann auf alle internen Ressourcen zugreifen. Dies kann Ihnen in Zukunft mehr Flexibilität geben. Sie können auf Ihr gesamtes Netzwerk zugreifen.

In beiden Fällen sehen Lauscher nichts, da Sie in einer verschlüsselten, authentifizierten Verbindung getunnelt sind.

3
ndrix