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 Container
  • Ferramenta de Firewall

Pressupostos

Este exemplo é um “Tudo em Um” para hospedar apenas serviços RustDesk. Ele pode ser expandido para uma solução mais flexível dividindo o NPM em seu próprio Docker Compose.

  • DMZ Network: 192.168.1.0/24
    • NPM (Externo): 192.168.1.250
  • LAN Network: 10.0.0.0/24
  • RSBackend Network: 192.168.254.0/29
    • NPM (Interno): 192.168.254.1
    • HBBS: 192.168.254.2
    • HBBR: 192.168.254.3
  • Docker Host: Linux
    • Cada aplicativo tem uma pasta dedicada em /opt/.
  • Nome do Host: uniquehostname (Mude Isso)
  • Nome DNS: rustdesk.example.com

Faça modificações nos exemplos conforme necessário.

Preparar o 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ê usar com o NPM (Nginx Proxy Manager), você deve ter uma rede de 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 o Firewall

Configure o encaminhamento de portas/NAT a seguir 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 o Docker Compose

Isso iniciará um contêiner com NPM e as redes corretas.

Copie o código abaixo 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   # Change This
    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

Setup NPM

Configure os Stream Hosts 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 o tráfego local

Configure o Proxy Host:

  • Nome de Domínio: rustdesk.example.com
  • Esquema: http
  • Encaminhar Nome do Host / IP: 192.168.254.2
  • Porta de Encaminhamento: 21114
  • Bloquear Explorações Comuns: Marcado
  • Opcional: Configurar SSL (NÃO EXIGIR - O cliente precisa ser capaz de se comunicar sem SSL.)

Configurar o 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 o Cliente RustDesk

Configure o cliente:

  • Servidor de ID: rustdesk.example.com
  • Servidor de Relay: rustdesk.example.com
  • Servidor de API: http://rustdesk.example.com (use HTTPS if you have configured SSL)
  • Key: {Chave do Servidor Aqui}

Resultado Final

Sua solução estará acessível externamente através do Proxy Manager. 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.