Modelo de Seguridad por Capas del Servidor RustDesk
Amablemente escrito por @I-Am-Skoot.
Capas
- RustDesk Herramienta de Soporte Remoto
- NPM Herramienta de Gestión de Proxy
- Docker Herramienta de Contenedorización
- Herramienta de Firewall
Suposiciones
Este ejemplo es un Todo en Uno para alojar solo servicios RustDesk. Esto puede expandirse a una solución más flexible dividiendo el NPM en su propio Docker Compose.
- Red DMZ: 192.168.1.0/24
- NPM (Externo): 192.168.1.250
- Red LAN: 10.0.0.0/24
- Red RSBackend: 192.168.254.0/29
- NPM (Interno): 192.168.254.1
- HBBS: 192.168.254.2
- HBBR: 192.168.254.3
- Host Docker: Linux
- Cada aplicación tiene una carpeta dedicada en
/opt/
.
- Cada aplicación tiene una carpeta dedicada en
- Nombre de host: uniquehostname (Cambia Esto)
- Nombre DNS: rustdesk.example.com
Realiza modificaciones a los ejemplos según sea necesario.
Preparar Docker
Debes tener Docker ya instalado, esta guía no entra en los detalles específicos de eso.
Necesitarás crear una red para el Backend del Servidor RustDesk y la DMZ. Para cada aplicación que uses con el NPM (Nginx Proxy Manager) deberías tener una red backend dedicada para aislarla.
docker network create \
--driver=bridge \
--subnet=192.168.254.0/29 RSBackend
docker network create \
--driver=ipvlan --subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o ipvlan_mode=l2 \
-o parent=eth0 DMZ
Configurar Firewall
Configura los siguientes puertos de reenvío/NAT desde tu IP pública al Servidor NPM.
- 21114 => 8080 TCP
- 21115 => 21115 TCP
- 21116 => 21116 TCP/UDP
- 21117 => 21117 TCP
- 21118 => 21118 TCP
- 21119 => 21119 TCP
- 443 => 443 TCP # Si quieres usar SSL
Configurar Docker Compose
Esto iniciará un contenedor con NPM y las redes correctas.
Copia lo siguiente en docker-compose.yaml.
version: '3.5'
services:
NPM:
image: jlesage/nginx-proxy-manager:latest
container_name: proxy-manager
volumes:
- /opt/proxy-manager/config:/config
restart: 'unless-stopped'
networks:
DMZ:
ipv4_address: 192.168.1.250
RSBackend:
ipv4_address: 192.168.254.1
hbbs:
container_name: rustdesk_hbbs
image: rustdesk/rustdesk-server-pro:latest
command: hbbs -k _
hostname: uniquehostname # Cambia Esto
volumes:
- /opt/rustdeskserver:/root
networks:
RSBackend:
ipv4_address: 192.168.254.2
depends_on:
- hbbr
restart: unless-stopped
hbbr:
container_name: rustdesk_hbbr
image: rustdesk/rustdesk-server-pro:latest
command: hbbr -k _
volumes:
- /opt/rustdeskserver:/root
networks:
RSBackend:
ipv4_address: 192.168.254.3
restart: unless-stopped
networks:
DMZ:
external: true
RSBackend:
external: true
Configurar NPM
Configura Hosts de Stream para los siguientes Puertos:
- 21115 => 192.168.254.2:21115 TCP
- 21116 => 192.168.254.2:21116 TCP / UDP
- 21117 => 192.168.254.3:21117 TCP
- 21118 => 192.168.254.2:21118 TCP
- 21119 => 192.168.254.3:21119 TCP
- 80 => 127.0.0.1:8080 TCP # captura tráfico local
Configura Host Proxy:
- Nombre de Dominio: rustdesk.example.com
- Esquema: http
- Nombre de Host / IP de Reenvío: 192.168.254.2
- Puerto de Reenvío: 21114
- Bloquear Exploits Comunes: Marcado
- Opcional: Configurar SSL (NO REQUERIR - El cliente necesita poder comunicarse sin SSL.)
Configurar Servidor RustDesk
Conéctate a la interfaz del servidor http://rustdesk.example.com o https://rustdesk.example.com si has configurado SSL para la interfaz web.
Configurar Cliente RustDesk
Configura el cliente:
- Servidor ID: rustdesk.example.com
- Servidor Relay: rustdesk.example.com
- Servidor API: http://rustdesk.example.com (usa HTTPS si has configurado SSL)
- Clave: {Clave del Servidor Aquí}
Resultado Final
Tu solución será accesible externamente a través del gestor de proxy. Tendrás aislamiento de tus Servidores RustDesk de otros sistemas. Especialmente si usas un sistema de configuración dividida y tienes otras aplicaciones / sitios detrás de un NPM común.