Modelo de Segurança em Camadas do Servidor RustDesk
Gentilmente escrito por @I-Am-Skoot.
Camadas
- RustDesk Ferramenta de Suporte Remoto
- NPM Ferramenta de Gerenciamento de Proxy
- Docker Ferramenta de Containerização
- Ferramenta de Firewall
Suposições
Este exemplo é um Tudo-em-Um para hospedar apenas serviços RustDesk. Isso pode ser expandido para uma solução mais flexível dividindo o NPM em seu próprio Docker Compose.
- Rede DMZ: 192.168.1.0/24
- NPM (Externo): 192.168.1.250
- Rede LAN: 10.0.0.0/24
- Rede 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 aplicação tem uma pasta dedicada em
/opt/
.
- Cada aplicação tem uma pasta dedicada em
- Nome do host: uniquehostname (Altere Isso)
- Nome DNS: rustdesk.example.com
Faça modificações nos exemplos conforme necessário.
Preparar Docker
Você deve ter o Docker já instalado, este guia não entra nos detalhes específicos disso.
Você precisará criar uma rede para o Backend do Servidor RustDesk e a DMZ. Para cada aplicação que você usa com o NPM (Nginx Proxy Manager), você deve ter uma rede backend dedicada para isolá-la.
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
Configure os seguintes redirecionamentos de porta/NAT do seu IP público para o Servidor NPM.
- 21114 => 8080 TCP
- 21115 => 21115 TCP
- 21116 => 21116 TCP/UDP
- 21117 => 21117 TCP
- 21118 => 21118 TCP
- 21119 => 21119 TCP
- 443 => 443 TCP # Se você quiser usar SSL
Configurar Docker Compose
Isso iniciará um container com NPM e as redes corretas.
Copie o seguinte para 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 # Altere Isso
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
Configure Hosts de Stream para as seguintes Portas:
- 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áfego local
Configure Host Proxy:
- Nome de Domínio: rustdesk.example.com
- Esquema: http
- Nome do Host / IP de Encaminhamento: 192.168.254.2
- Porta de Encaminhamento: 21114
- Bloquear Exploits Comuns: Marcado
- Opcional: Configurar SSL (NÃO EXIGIR - O cliente precisa conseguir se comunicar sem SSL.)
Configurar Servidor RustDesk
Conecte-se à interface do servidor http://rustdesk.example.com ou https://rustdesk.example.com se você configurou SSL para a interface web.
Configurar Cliente RustDesk
Configure o cliente:
- Servidor ID: rustdesk.example.com
- Servidor Relay: rustdesk.example.com
- Servidor API: http://rustdesk.example.com (use HTTPS se você configurou SSL)
- Chave: {Chave do Servidor Aqui}
Resultado Final
Sua solução será acessível externamente através do gerenciador de proxy. Você terá isolamento de seus Servidores RustDesk de outros sistemas. Especialmente se você usar um sistema de configuração dividida e tiver outras aplicações / sites atrás de um NPM comum.