Modèle de Sécurité à Couches du Serveur RustDesk

Aimablement rédigé par @I-Am-Skoot.

Couches

  • RustDesk Outil de Support à Distance
  • NPM Outil de Gestion de Proxy
  • Docker Outil de Conteneurisation
  • Outil de Pare-feu

Hypothèses

Cet exemple est un Tout-en-Un pour héberger uniquement les services RustDesk. Cela peut être étendu à une solution plus flexible en séparant le NPM dans son propre Docker Compose.

  • Réseau DMZ : 192.168.1.0/24
    • NPM (Externe) : 192.168.1.250
  • Réseau LAN : 10.0.0.0/24
  • Réseau RSBackend : 192.168.254.0/29
    • NPM (Interne) : 192.168.254.1
    • HBBS : 192.168.254.2
    • HBBR : 192.168.254.3
  • Hôte Docker : Linux
    • Chaque application a un dossier dédié dans /opt/.
  • Nom d’hôte : uniquehostname (Changez Ceci)
  • Nom DNS : rustdesk.example.com

Apportez des modifications aux exemples selon vos besoins.

Préparer Docker

Vous devez avoir Docker déjà installé, ce guide n’entre pas dans les spécificités de cela.

Vous devrez créer un réseau pour le Backend du Serveur RustDesk et la DMZ. Pour chaque application que vous utilisez avec le NPM (Nginx Proxy Manager), vous devriez avoir un réseau backend dédié pour l’isoler.

 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

Configurer le Pare-feu

Configurez les ports de redirection/NAT suivants de votre IP publique vers le serveur NPM.

  • 21114 => 8080 TCP
  • 21115 => 21115 TCP
  • 21116 => 21116 TCP/UDP
  • 21117 => 21117 TCP
  • 21118 => 21118 TCP
  • 21119 => 21119 TCP
  • 443 => 443 TCP # Si vous voulez utiliser SSL

Configurer Docker Compose

Cela démarrera un conteneur avec NPM et les réseaux corrects.

Copiez le contenu ci-dessous dans 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   # Changez Ceci
    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

Configurer NPM

Configurez les Hôtes de Flux pour les Ports suivants :

  • 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 # capture le trafic local

Configurez l’Hôte Proxy :

  • Nom de Domaine : rustdesk.example.com
  • Schéma : http
  • Nom d’hôte / IP de Redirection : 192.168.254.2
  • Port de Redirection : 21114
  • Bloquer les Exploits Communs : Coché
  • Optionnel : Configurer SSL (NE PAS EXIGER - Le client doit pouvoir communiquer sans SSL.)

Configurer le Serveur RustDesk

Connectez-vous à l’interface serveur http://rustdesk.example.com ou https://rustdesk.example.com si vous avez configuré SSL pour l’interface web.

Configurer le Client RustDesk

Configurez le client :

  • Serveur ID : rustdesk.example.com
  • Serveur Relais : rustdesk.example.com
  • Serveur API : http://rustdesk.example.com (utilisez HTTPS si vous avez configuré SSL)
  • Clé : {Clé Serveur Ici}

Résultat Final

Votre solution sera accessible de l’extérieur par le gestionnaire de proxy. Vous aurez l’isolement de vos serveurs RustDesk des autres systèmes. Surtout si vous utilisez un système de configuration divisée et avez d’autres applications / sites derrière un NPM commun.