Configurar un proxy inverso
Esta guía describe los pasos básicos de configuración necesarios para establecer un proxy inverso frente a tu instancia de SecureVu.
Un proxy inverso generalmente se necesita si deseas configurar SecureVu en una URL personalizada, en un subdominio o en un host que sirve múltiples sitios. También podría usarse para configurar tu propio proveedor de autenticación o para enrutamiento HTTP más avanzado.
Antes de configurar un proxy inverso, comprueba si alguna de las funcionalidades integradas en SecureVu se adapta a tus necesidades:
| Tema | Documentación |
|---|---|
| TLS | Consulta la opción de configuración tls |
| Autenticación | Consulta la documentación de autenticación |
| IPv6 | Habilitando IPv6 |
Nota sobre TLS
Al usar un proxy inverso, la sesión TLS generalmente se termina en el proxy, enviando la solicitud interna a través de HTTP plano. Si este es el comportamiento deseado, primero se debe deshabilitar TLS en SecureVu, o se encontrará un error HTTP 400: "The plain HTTP request was sent to HTTPS port."
Para deshabilitar TLS, establece lo siguiente en tu configuración de SecureVu:
tls:
enabled: false
Un proxy inverso puede usarse para asegurar el acceso a un servidor web interno, pero el usuario dependerá completamente de los pasos que haya tomado. Debes asegurarte de seguir las mejores prácticas de seguridad.
Esta página no intenta describir los pasos específicos necesarios para asegurar tu sitio web interno.
Por favor, usa tu propio conocimiento para evaluar y verificar el software de proxy inverso antes de instalar cualquier cosa en tu sistema.
Proxies
Hay muchas soluciones disponibles para implementar proxies inversos y se invita a la comunidad a ayudar a documentar otras mediante una contribución a esta página.
Proxy inverso Apache2
En los ejemplos de configuración a continuación, solo se incluyen las directivas relevantes para el enfoque de proxy inverso descrito anteriormente.
En Debian, Apache2 el archivo de configuración tendrá un nombre similar a /etc/apache2/sites-available/cctv.conf
Paso 1: Configurar el proxy inverso Apache2
Simplifica tu vida presentando tu interfaz de SecureVu como un subdominio DNS en lugar de una subcarpeta de tu dominio principal. Aquí accedemos a SecureVu mediante https://cctv.mydomain.co.uk
<VirtualHost *:443>
ServerName cctv.mydomain.co.uk
ProxyPreserveHost On
ProxyPass "/" "http://securevupi.local:8971/"
ProxyPassReverse "/" "http://securevupi.local:8971/"
ProxyPass /ws ws://securevupi.local:8971/ws
ProxyPassReverse /ws ws://securevupi.local:8971/ws
ProxyPass /live/ ws://securevupi.local:8971/live/
ProxyPassReverse /live/ ws://securevupi.local:8971/live/
RewriteEngine on
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://securevupi.local:8971/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://securevupi.local:8971/$1 [P,L]
</VirtualHost>
Paso 2: Usar SSL para cifrar el acceso a tu instancia de SecureVu
Aunque por sí solo no impedirá el acceso a tu servidor web de SecureVu, cifrará todo el contenido (como las credenciales de inicio de sesión). La instalación de SSL está fuera del alcance de este documento, pero Let's Encrypt es un enfoque ampliamente utilizado. Este fragmento de configuración de Apache2 hace que las solicitudes no cifradas sean redirigidas al puerto SSL del servidor web
<VirtualHost *:80>
ServerName cctv.mydomain.co.uk
RewriteEngine on
RewriteCond %{SERVER_NAME} =cctv.mydomain.co.uk
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Paso 3: Autenticar usuarios en el proxy
Hay muchas formas de autenticar un sitio web, pero un enfoque sencillo es usar archivos de contraseñas de Apache2.
<VirtualHost *:443>
<Location />
AuthType Basic
AuthName "Restricted Files"
AuthUserFile "/var/www/passwords"
Require user paul
</Location>
</VirtualHost>
Proxy inverso Nginx
Este método muestra un ejemplo funcional de proxy inverso de tipo subdominio con SSL habilitado.
Configurar el servidor y el puerto para el proxy inverso
Esto se establece en $server y $port, que debe coincidir con los puertos que has expuesto a tu contenedor Docker. Opcionalmente puedes escuchar en el puerto 443 y habilitar SSL
# ------------------------------------------------------------
# securevu.domain.com
# ------------------------------------------------------------
server {
set $forward_scheme http;
set $server "192.168.100.2"; # UBICACIÓN DEL SERVIDOR SECUREVU
set $port 8971;
listen 80;
listen 443 ssl;
http2 on;
server_name securevu.domain.com;
}
Configurar SSL (opcional)
Esta sección apunta a tus archivos SSL; el ejemplo a continuación muestra las ubicaciones de un certificado SSL predeterminado de Let's Encrypt.
# SSL de Let's Encrypt
include conf.d/include/letsencrypt-acme-challenge.conf;
include conf.d/include/ssl-ciphers.conf;
ssl_certificate /etc/letsencrypt/live/npm-1/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/npm-1/privkey.pem;
Configurar los ajustes del proxy inverso
Los ajustes a continuación habilitan la actualización de conexión, configuran el registro (opcional) y envían todo desde el contexto / al host y puerto Docker especificados anteriormente en la configuración
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;
access_log /data/logs/proxy-host-40_access.log proxy;
error_log /data/logs/proxy-host-40_error.log warn;
location / {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;
}
Proxy inverso Traefik
Este ejemplo muestra cómo añadir una etiqueta al archivo Docker compose de SecureVu, permitiendo que Traefik descubra automáticamente tu instancia de SecureVu.
Antes de usar el ejemplo a continuación, primero debes configurar Traefik con el proveedor Docker
services:
securevu:
container_name: securevu
image: ghcr.io/securecorp-mexico/securevu2:stable
...
...
labels:
- "traefik.enable=true"
- "traefik.http.services.securevu.loadbalancer.server.port=8971"
- "traefik.http.routers.securevu.rule=Host(`traefik.example.com`)"
La configuración anterior creará un "servicio" en Traefik, añadiendo automáticamente la IP de tu contenedor en el puerto 8971 como backend. También añadirá un enrutador que dirigirá las solicitudes a "traefik.example.com" a tu contenedor local.
Ten en cuenta que con este enfoque no necesitas exponer ningún puerto para la instancia de SecureVu, ya que todo el tráfico se enrutará a través de la red Docker interna.
Proxy inverso Caddy
Este ejemplo muestra SecureVu ejecutándose bajo un subdominio con registro y un certificado TLS (en este caso un certificado de dominio comodín obtenido independientemente de caddy) gestionados mediante importaciones
(logging) {
log {
output file /var/log/caddy/{args[0]}.log {
roll_size 10MiB
roll_keep 5
roll_keep_for 10d
}
format json
level INFO
}
}
(tls) {
tls /var/lib/caddy/wildcard.YOUR_DOMAIN.TLD.fullchain.pem /var/lib/caddy/wildcard.YOUR_DOMAIN.TLD.privkey.pem
}
securevu.YOUR_DOMAIN.TLD {
reverse_proxy http://localhost:8971
import tls
import logging securevu.YOUR_DOMAIN.TLD
}