09_CARTE_MENTALE.md 8.4 KB

CARTE MENTALE โ€” SSH Proxy Transparent

๐ŸŒณ Arborescence conceptuelle

SSH PROXY TRANSPARENT
โ”‚
โ”œโ”€ ARCHITECTURE
โ”‚  โ”œโ”€ 3 Conteneurs
โ”‚  โ”‚  โ”œโ”€ Gateway (proxy)
โ”‚  โ”‚  โ”œโ”€ Dest1 (machine)
โ”‚  โ”‚  โ””โ”€ Dest2 (machine)
โ”‚  โ”‚
โ”‚  โ”œโ”€ Rรฉseau Docker
โ”‚  โ”‚  โ””โ”€ 172.30.0.0/24 (privรฉ)
โ”‚  โ”‚
โ”‚  โ””โ”€ 2 Niveaux Auth
โ”‚     โ”œโ”€ Windows โ†’ Gateway (lab_rsa)
โ”‚     โ””โ”€ Gateway โ†’ Dest (gateway_rsa)
โ”‚
โ”œโ”€ CONFIGURATION
โ”‚  โ”œโ”€ Gateway (4 fichiers)
โ”‚  โ”‚  โ”œโ”€ Dockerfile
โ”‚  โ”‚  โ”‚  โ”œโ”€ Stage builder: Compile sshproxy Go
โ”‚  โ”‚  โ”‚  โ””โ”€ Stage final: sshd + config
โ”‚  โ”‚  โ”‚
โ”‚  โ”‚  โ”œโ”€ sshd_config
โ”‚  โ”‚  โ”‚  โ””โ”€ ForceCommand: sshproxy-wrapper โญ
โ”‚  โ”‚  โ”‚
โ”‚  โ”‚  โ”œโ”€ sshproxy.yaml
โ”‚  โ”‚  โ”‚  โ”œโ”€ Destinations: [dest1, dest2]
โ”‚  โ”‚  โ”‚  โ”œโ”€ Selection: random
โ”‚  โ”‚  โ”‚  โ””โ”€ Args: "-tt" โญ
โ”‚  โ”‚  โ”‚
โ”‚  โ”‚  โ””โ”€ sshproxy-wrapper.sh
โ”‚  โ”‚     โ””โ”€ Lance sshproxy
โ”‚  โ”‚
โ”‚  โ”œโ”€ Destinations (2 fichiers ร— 2)
โ”‚  โ”‚  โ”œโ”€ Dockerfile (SSH normal)
โ”‚  โ”‚  โ””โ”€ sshd_config (SSH normal)
โ”‚  โ”‚
โ”‚  โ”œโ”€ Orchestration (1 fichier)
โ”‚  โ”‚  โ””โ”€ docker-compose.yaml
โ”‚  โ”‚
โ”‚  โ””โ”€ Authentification (4 fichiers)
โ”‚     โ”œโ”€ lab_rsa (privรฉe)
โ”‚     โ”œโ”€ lab_rsa.pub (publique)
โ”‚     โ”œโ”€ gateway_rsa (privรฉe)
โ”‚     โ””โ”€ gateway_rsa.pub (publique)
โ”‚
โ”œโ”€ FLUX D'UNE CONNEXION
โ”‚  โ”œโ”€ Client Windows
โ”‚  โ”‚  โ””โ”€ ssh -i lab_rsa -p 2222 localhost
โ”‚  โ”‚
โ”‚  โ”œโ”€ Gateway sshd
โ”‚  โ”‚  โ”œโ”€ Vรฉrifie: lab_rsa.pub en authorized_keys โœ“
โ”‚  โ”‚  โ””โ”€ Exรฉcute: ForceCommand
โ”‚  โ”‚
โ”‚  โ”œโ”€ sshproxy-wrapper
โ”‚  โ”‚  โ””โ”€ Lance: /usr/sbin/sshproxy
โ”‚  โ”‚
โ”‚  โ”œโ”€ sshproxy
โ”‚  โ”‚  โ”œโ”€ Lit: sshproxy.yaml
โ”‚  โ”‚  โ”œโ”€ Choisit: random (dest1 ou dest2)
โ”‚  โ”‚  โ””โ”€ Exรฉcute: ssh -tt -i gateway_rsa testuser@DEST
โ”‚  โ”‚
โ”‚  โ”œโ”€ Destination sshd
โ”‚  โ”‚  โ”œโ”€ Vรฉrifie: gateway_rsa.pub en authorized_keys โœ“
โ”‚  โ”‚  โ””โ”€ Exรฉcute: shell/commande
โ”‚  โ”‚
โ”‚  โ””โ”€ Rรฉsultat retournรฉ ร  Windows
โ”‚
โ”œโ”€ LES 3 "MAGIES"
โ”‚  โ”œโ”€ Magie 1: ForceCommand
โ”‚  โ”‚  โ”œโ”€ Intercepts: Toute connexion SSH
โ”‚  โ”‚  โ”œโ”€ Lance: sshproxy-wrapper
โ”‚  โ”‚  โ””โ”€ Effect: Transparence du proxy
โ”‚  โ”‚
โ”‚  โ”œโ”€ Magie 2: -tt flag
โ”‚  โ”‚  โ”œโ”€ Alloue: Pseudo-terminal
โ”‚  โ”‚  โ”œโ”€ Permet: Shell interactif sur dest
โ”‚  โ”‚  โ””โ”€ Critรจre: Sans = exit 255 ou freeze
โ”‚  โ”‚
โ”‚  โ””โ”€ Magie 3: 2 Clรฉs SSH
โ”‚     โ”œโ”€ Layer 1: Windows โ†’ Gateway
โ”‚     โ”œโ”€ Layer 2: Gateway โ†’ Dest
โ”‚     โ””โ”€ Effect: Authentification multi-couches
โ”‚
โ”œโ”€ PIรˆGES ร‰VITร‰S
โ”‚  โ”œโ”€ Permission denied
โ”‚  โ”‚  โ”œโ”€ Cause: gateway_rsa propriรฉtรฉ root
โ”‚  โ”‚  โ””โ”€ Fix: chown testuser /etc/sshproxy/gateway_rsa
โ”‚  โ”‚
โ”‚  โ”œโ”€ Exit status 255
โ”‚  โ”‚  โ”œโ”€ Cause: PTY non allouรฉ
โ”‚  โ”‚  โ””โ”€ Fix: -tt dans sshproxy.yaml
โ”‚  โ”‚
โ”‚  โ”œโ”€ Shell freeze
โ”‚  โ”‚  โ”œโ”€ Cause: Pas de wrapper
โ”‚  โ”‚  โ””โ”€ Fix: sshproxy-wrapper.sh
โ”‚  โ”‚
โ”‚  โ””โ”€ IPs qui changent
โ”‚     โ”œโ”€ Cause: Rรฉseau recrรฉรฉ ร  chaque up
โ”‚     โ””โ”€ Fix: subnet fixe + ipv4_address
โ”‚
โ”œโ”€ DOCUMENTATION
โ”‚  โ”œโ”€ PLAN_DE_LECTURE.md
โ”‚  โ”‚  โ””โ”€ Par oรน commencer?
โ”‚  โ”‚
โ”‚  โ”œโ”€ SYNTHESE_COMPLETE.md
โ”‚  โ”‚  โ””โ”€ Vue d'ensemble
โ”‚  โ”‚
โ”‚  โ”œโ”€ ELI5_EXPLICATION.md
โ”‚  โ”‚  โ””โ”€ Simplifiรฉe
โ”‚  โ”‚
โ”‚  โ”œโ”€ QUICK_REFERENCE.md
โ”‚  โ”‚  โ””โ”€ Diagrammes + checklist
โ”‚  โ”‚
โ”‚  โ”œโ”€ DOCUMENTATION_COMPLETE.md
โ”‚  โ”‚  โ””โ”€ Ligne par ligne
โ”‚  โ”‚
โ”‚  โ”œโ”€ RESOLUTION_RAPPORT.md
โ”‚  โ”‚  โ””โ”€ Debugging
โ”‚  โ”‚
โ”‚  โ”œโ”€ INDEX_FICHIERS.md
โ”‚  โ”‚  โ””โ”€ Rรฉfรฉrence fichiers
โ”‚  โ”‚
โ”‚  โ”œโ”€ INVENTAIRE.md
โ”‚  โ”‚  โ””โ”€ Tous les fichiers
โ”‚  โ”‚
โ”‚  โ”œโ”€ README.md
โ”‚  โ”‚  โ””โ”€ Point d'entrรฉe principal
โ”‚  โ”‚
โ”‚  โ””โ”€ CARTE_MENTALE.md (ce fichier)
โ”‚     โ””โ”€ Structures et relations
โ”‚
โ””โ”€ COMMANDES CLร‰S
   โ”œโ”€ Dรฉmarrage
   โ”‚  โ”œโ”€ docker compose up -d
   โ”‚  โ””โ”€ Attend 2-3 secondes
   โ”‚
   โ”œโ”€ Tests
   โ”‚  โ”œโ”€ ssh -p 2222 testuser@localhost 'hostname'
   โ”‚  โ”œโ”€ echo "hostname" | ssh -p 2222 testuser@localhost
   โ”‚  โ””โ”€ for i in {1..5}; do ssh -p 2222 testuser@localhost hostname; done
   โ”‚
   โ”œโ”€ Debugging
   โ”‚  โ”œโ”€ docker exec sshproxy-gateway tail -f /tmp/sshproxy-testuser.log
   โ”‚  โ”œโ”€ docker compose logs -f gateway
   โ”‚  โ””โ”€ docker ps
   โ”‚
   โ””โ”€ Arrรชt
      โ””โ”€ docker compose down -v

๐Ÿ”„ Relation entre fichiers

docker-compose.yaml
โ”œโ”€โ†’ gateway/Dockerfile โ”€โ”€โ†’ Installe gateway/sshd_config
โ”œโ”€โ†’ gateway/sshd_config โ”€โ”€โ†’ ForceCommand โ”€โ”€โ†’ gateway/sshproxy-wrapper
โ”œโ”€โ†’ gateway/sshproxy-wrapper โ”€โ”€โ†’ Exรฉcute โ”€โ”€โ†’ sshproxy
โ”œโ”€โ†’ sshproxy โ”€โ”€โ†’ Lit โ”€โ”€โ†’ gateway/sshproxy.yaml
โ”œโ”€โ†’ gateway/sshproxy.yaml โ”€โ”€โ†’ Utilise โ”€โ”€โ†’ keys/gateway_rsa (privรฉe)
โ”‚
โ”œโ”€โ†’ dest/Dockerfile โ”€โ”€โ†’ Installe dest/sshd_config
โ””โ”€โ†’ dest/sshd_config โ”€โ”€โ†’ Accepte โ”€โ”€โ†’ keys/gateway_rsa.pub
                     โ”€โ”€โ†’ Accepte โ”€โ”€โ†’ keys/lab_rsa.pub

Authentification:
gateway/sshd_config โ”€โ”€โ†’ Vรฉrifie โ”€โ”€โ†’ keys/lab_rsa.pub
                    โ”€โ”€โ†’ Pour โ”€โ”€โ†’ Connexion Windows

๐Ÿ“Š Dรฉpendances critiques

Pour fonctionner, vous DEVEZ avoir:

1. docker-compose.yaml
   โ””โ”€ Sans: pas de conteneurs

2. gateway/Dockerfile
   โ””โ”€ Sans: pas de gateway

3. gateway/sshd_config + ForceCommand
   โ””โ”€ Sans: pas d'interception

4. gateway/sshproxy.yaml + "-tt"
   โ””โ”€ Sans: pas d'interactivitรฉ

5. keys/lab_rsa + lab_rsa.pub
   โ””โ”€ Sans: Windows ne peut pas s'authentifier

6. keys/gateway_rsa + gateway_rsa.pub
   โ””โ”€ Sans: Gateway ne peut pas s'authentifier auprรจs des dest

๐ŸŽฏ Ordre d'apprentissage recommandรฉ

Semaine 1 (Day 1 - 30 min):
โ”œโ”€ Lire: PLAN_DE_LECTURE.md (5 min)
โ”œโ”€ Lire: SYNTHESE_COMPLETE.md (10 min)
โ”œโ”€ Lire: QUICK_REFERENCE.md (10 min)
โ”œโ”€ Faire: docker compose up -d
โ”œโ”€ Faire: ssh test (5 min)
โ””โ”€ Result: "ร‡a marche!"

Semaine 1 (Day 2-3 - 1-2 heures):
โ”œโ”€ Lire: DOCUMENTATION_COMPLETE.md (30 min)
โ”œโ”€ Lire: gateway/sshd_config + explications
โ”œโ”€ Lire: gateway/sshproxy.yaml + explications
โ”œโ”€ Lire: Dockerfiles + explications
โ”œโ”€ Faire: Modifier une config (test)
โ””โ”€ Result: "Je comprends!"

Semaine 2 (Maintenance):
โ”œโ”€ Consulter: INDEX_FICHIERS.md (au besoin)
โ”œโ”€ Dรฉboguer: RESOLUTION_RAPPORT.md
โ”œโ”€ Auditer: logs sshproxy
โ””โ”€ Result: "Je maรฎtrise!"

๐Ÿ’ก Patterns clรฉs

Pattern 1: ForceCommand Interception

sshd_config:  ForceCommand /path/to/script
โ†“
/path/to/script: Dรฉtecte SSH_ORIGINAL_COMMAND
โ†“
Script: Exรฉcute sshproxy
โ†“
sshproxy: Proxifie la commande
โ†“
Result: Transparent au client

Pattern 2: Multi-layer Auth

Layer 1 (Client โ†’ Gateway):
  Client: lab_rsa (privรฉe)
  Gateway: lab_rsa.pub (authorized_keys)

Layer 2 (Gateway โ†’ Dest):
  Gateway: gateway_rsa (privรฉe)
  Dest: gateway_rsa.pub (authorized_keys)

Pattern 3: Multi-stage Docker

Stage 1 (Builder):
  - Gros (avec compilateur)
  - Compile sshproxy
  - Gรฉnรจre binaires

Stage 2 (Final):
  - Petit (Debian slim)
  - Copie juste les binaires
  - Installe runtime deps

๐ŸŽฌ Cas d'usage simples

Cas 1: Commande simple

Input:  ssh gateway 'ls -la'
Flow:   gateway โ†’ sshproxy โ†’ random_dest โ†’ ls -la
Output: /home/testuser contents

Cas 2: Shell interactif

Input:  ssh gateway
Flow:   gateway โ†’ sshproxy โ†’ random_dest โ†’ bash
Output: testuser@dest1:~$ (prompt interactif)

Cas 3: Scripts

Input:  ssh gateway 'for i in 1..3; do date; done'
Flow:   gateway โ†’ sshproxy โ†’ random_dest โ†’ script
Output: 3 timestamps

โœ… Checklist complรจte

Infrastructure:
  โ˜ docker-compose.yaml crรฉรฉ
  โ˜ gateway/ directory + 4 fichiers
  โ˜ dest/ directory + 2 fichiers
  โ˜ keys/ directory + 4 fichiers

Validation:
  โ˜ Clรฉs SSH gรฉnรฉrรฉes
  โ˜ docker compose build rรฉussit
  โ˜ docker compose up -d rรฉussit
  โ˜ docker ps affiche 3 conteneurs

Fonctionnalitรฉ:
  โ˜ ssh -p 2222 'hostname' retourne dest1 ou dest2
  โ˜ Shell interactif fonctionne
  โ˜ Round-robin testรฉ (5 tests)
  โ˜ Logs sshproxy lisibles

Comprรฉhension:
  โ˜ Vous comprendre ForceCommand
  โ˜ Vous comprenez -tt flag
  โ˜ Vous pouvez modifier une config
  โ˜ Vous pouvez dรฉbugger un problรจme