Asegurar cámaras IP de acceso remoto que no admiten HTTPS

15

Tengo algunas cámaras IP configuradas en mi red doméstica, que está protegida por WPA2. Estas cámaras están configuradas para ser accesibles desde Internet a través de la dirección DDNS de mi enrutador y el número de puerto.

Por ejemplo, desde la PC de mi oficina puedo ir a enlace para ver la cámara n. ° 1 después de ingresar mi nombre de usuario y contraseña.

Estas cámaras son Foscams FI8910W y no son compatibles con HTTPS. Por cierto, mi enrutador es un Asus RT-N56U.

Supongo que mis credenciales que utilizo para iniciar sesión en las cámaras se envían en texto sin formato y no están cifradas, lo que no es seguro.

¿Cuáles son mis opciones para solucionar esto y hacer que mi acceso sea más seguro?

Leí en alguna parte que un "proxy inverso" es una solución posible, pero no estoy seguro de cómo funcionaría ...

    
pregunta unknownprotocol 28.04.2014 - 07:57
fuente

2 respuestas

11

Voy a asumir que su enrutador no es lo suficientemente inteligente como para configurar un proxy inverso cifrado por sí mismo.

Convenciones utilizadas a continuación

  • Dirección IP del hogar: 1.2.3.4 ( buscar en mi ip para encontrar la tuya )
  • Dirección IP / puerto de la cámara web: 192.168.0.123 en el puerto 456.
  • Computadora Linux / Unix ejecutando proxy inverso: 192.168.0.101

Comprobaciones iniciales

En la red local, ¿puedes ver la cámara web en http://192.168.0.123:456 ? Genial. ¿No puede conectarse a una cámara web desde el mundo exterior (es decir, http://1.2.3.4:456 está desactivado mediante firewall)? Genial. Si no reconfigura su cámara web y las reglas de reenvío de puerto / firewall en su enrutador.

A continuación, instale un servidor web en una computadora en su red local que esté encendida cada vez que desee conectarse a su cámara web. Voy a asumir linux / unix y daré instrucciones para nginx.

Como prueba inicial, configure un proxy inverso sin cifrado. Instale la última versión de nginx, edite el archivo de configuración ( /etc/nginx/conf.d/default.conf ) y agregue líneas similares a:

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

Ahora reinicie nginx ( sudo /etc/init.d/nginx restart ) e intente conectarse al proxy ( http://192.168.0.101:8080 ) y debería funcionar como si fuera a http://192.168.0.123:456 . Si tiene problemas, vuelva a revisar todo o consulte la documentación de nginx .

Cómo obtener un certificado TLS / SSL

Ahora debe agregar un certificado SSL y la clave privada asociada. Puede generar uno firmado por una autoridad de certificación (por ejemplo, de startssl.com de forma gratuita) o generar uno que tenga su propia firma (y que los navegadores web no confiarán inicialmente). La configuración de un certificado firmado por una CA será más complicada para una red doméstica en la que tendrá que obtener un nombre de dominio (que puede demostrar a la CA que posee), configurar un DNS dinámico para ese nombre de dominio, etc. está intentando comenzar con el DNS dinámico: enlace es un excelente lugar para comenzar).

Para generar un certificado autofirmado, primero use openssl para crear una clave privada (en este caso, una clave privada RSA de 4096 bits):

# openssl genrsa -out private.key 4096

Si tienes curiosidad, puedes ver los contenidos con openssl rsa -in private.key -text -noout . A continuación, debe generar un certificado basado en esa clave privada, que se puede hacer con:

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

El 3650 dice que vencerá en 3650 días (~ 10 años). Openssl le solicitará más detalles, siéntase libre de dejarlos en blanco o ingrese cualquier información allí. (Puede ver el contenido de su certificado con openssl x509 -in yourcert.crt -text -noout ).

Ahora ponga su clave privada y su certificado en un lugar seguro (por ejemplo, en /etc/ssl/private/private.key y /etc/ssl/certs/yourcert.crt ), restrinja sus permisos (asegúrese de que sean propiedad de la raíz y que nadie más tenga permisos de lectura / escritura).

Activar SSL en proxy inverso

Luego edite el archivo de configuración de su servidor nginx para habilitar SSL de la siguiente manera:

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
   }
}

Reinicie nginx, y ahora debería poder conectarse a su cámara web en su red local en https://192.168.0.101 (obtendrá advertencias sobre la falta de confianza del certificado, ya que es un certificado autofirmado).

Configura el reenvío de puerto en tu enrutador

El último paso es configurar el enrutador para que realice el reenvío de puertos. Esto es cuando se conecta a https://1.2.3.4 (puerto 443) desde el mundo exterior, configúrelo para que reenvíe a 192.168.0.101 (puerto 443). Posiblemente configure DNS dinámico para que si la dirección IP de su hogar cambia, todavía apunte al lugar correcto. Algunos ISP bloquean los puertos 80 y 443, por lo que es posible que tenga que cambiarlo a otro puerto.

Ten cuidado con cómo te conectas. He notado que muchos programas de cámaras IP no comprueban la confianza de los certificados (ya que a menudo son autofirmados), por lo que un atacante podría posiblemente realizar un ataque MitM insertando un certificado autofirmado diferente. Es mejor si agrega su certificado autofirmado para que sea de confianza en sus propios navegadores y lo rechace si cambia.

    
respondido por el dr jimbob 28.04.2014 - 10:43
fuente
3

Su enrutador simplemente reenvía paquetes, cualquiera que sea el protocolo que esté detrás, dicta la seguridad. De hecho, usted puede, como mencionó, ser un proxy inverso que escucha en una conexión HTTPS y reenvía todo a una conexión HTTP. Esto se puede hacer fácilmente utilizando mod_proxy de Apache.

Alternativamente, puede parecer un poco excesivo, pero una buena manera sería configurar una VPN a la que puedas conectarte. Esto se puede hacer fácilmente (y gratis) con OpenVPN . Terminaría de forma segura un túnel en su red local y luego podría acceder a todos los recursos internos. Esto puede darle más flexibilidad en el futuro; puedes acceder a toda tu red.

De cualquier manera, los intrusos no verán nada, ya que estás conectado en una conexión autenticada y cifrada.

    
respondido por el ndrix 28.04.2014 - 08:46
fuente

Lea otras preguntas en las etiquetas