first commit
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
# Règles Firewall OPNsense – Documentation
|
||||
|
||||
> Ce document décrit la logique de filtrage appliquée sur OPNsense. Les adresses IP réelles sont remplacées par des plages génériques. L'ordre des règles est significatif (first-match).
|
||||
|
||||
---
|
||||
|
||||
## Interfaces configurées
|
||||
|
||||
| Interface OPNsense | Bridge Proxmox | Réseau | Rôle |
|
||||
|-------------------|----------------|--------|------|
|
||||
| WAN | vmbr0 | 192.168.1.x/24 | Côté Freebox |
|
||||
| LAN | vmbr1 | 10.1.1.x/24 | Réseau interne VMs |
|
||||
|
||||
---
|
||||
|
||||
## Règles WAN (interface côté Freebox)
|
||||
|
||||
OPNsense applique par défaut une politique **deny-all entrant sur le WAN**. Aucune règle d'autorisation entrante n'est configurée sur cette interface.
|
||||
|
||||
| # | Action | Proto | Source | Destination | Port | Description |
|
||||
|---|--------|-------|--------|-------------|------|-------------|
|
||||
| 1 | ❌ Block | * | * | * | * | Deny all inbound WAN (défaut implicite) |
|
||||
|
||||
> Le seul accès entrant depuis internet est le port UDP 51820 pour WireGuard, redirigé par la Freebox directement vers le LXC WireGuard sur le réseau 192.168.1.x — il ne transite pas par OPNsense.
|
||||
|
||||
---
|
||||
|
||||
## Règles LAN (interface côté VMs – 10.1.1.x/24)
|
||||
|
||||
### Trafic sortant (LAN → WAN)
|
||||
|
||||
| # | Action | Proto | Source | Destination | Port | Description |
|
||||
|---|--------|-------|--------|-------------|------|-------------|
|
||||
| 1 | ✅ Allow | TCP | 10.1.1.x/24 | * | 80, 443 | Accès HTTP/HTTPS des VMs vers internet |
|
||||
| 2 | ✅ Allow | UDP | 10.1.1.x/24 | * | 53 | DNS des VMs |
|
||||
| 3 | ❌ Block | * | 10.1.1.x/24 | 192.168.1.x/24 | * | Interdit : réseau interne → réseau Freebox |
|
||||
| 4 | ❌ Block | * | 10.1.1.x/24 | * | * | Deny all autres flux sortants |
|
||||
|
||||
### Trafic entrant (WAN → LAN)
|
||||
|
||||
| # | Action | Proto | Source | Destination | Port | Description |
|
||||
|---|--------|-------|--------|-------------|------|-------------|
|
||||
| 1 | ❌ Block | * | * | 10.1.1.x/24 | * | Deny all entrant vers les VMs |
|
||||
|
||||
---
|
||||
|
||||
## NAT – Règles de translation
|
||||
|
||||
### Outbound NAT (VMs → Internet)
|
||||
|
||||
| Interface | Source | Translation | Description |
|
||||
|-----------|--------|-------------|-------------|
|
||||
| WAN | 10.1.1.x/24 | IP WAN OPNsense | NAT sortant pour toutes les VMs internes |
|
||||
|
||||
> Mode : **Automatic Outbound NAT** activé sur OPNsense. Toutes les VMs du réseau 10.1.1.x/24 sortent sur internet avec l'IP WAN d'OPNsense (elle-même sur le réseau Freebox).
|
||||
|
||||
---
|
||||
|
||||
## Logique de flux – Résumé visuel
|
||||
|
||||
```
|
||||
Internet
|
||||
│
|
||||
▼
|
||||
Freebox (192.168.1.x/24)
|
||||
│
|
||||
├──► OPNsense WAN ──[ DENY ALL entrant ]──► (rien ne rentre)
|
||||
│
|
||||
│ OPNsense LAN (10.1.1.x/24)
|
||||
│ ┌────────────────────────────────────────┐
|
||||
│ │ VMs TP / Ubuntu / Windows │
|
||||
│ │ │
|
||||
│ │ → HTTP/HTTPS vers internet ✅ (NAT) │
|
||||
│ │ → DNS ✅ │
|
||||
│ │ → Réseau Freebox ❌ (bloqué) │
|
||||
│ │ ← Tout entrant ❌ (bloqué) │
|
||||
│ └────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Notes
|
||||
|
||||
- La règle de blocage 10.1.1.x → 192.168.1.x est explicite et prioritaire sur toute règle allow. Elle garantit qu'une VM compromise sur le réseau interne ne peut pas atteindre l'hôte Proxmox, le NAS ou la Freebox.
|
||||
- OPNsense lui-même (l'interface LAN 10.1.1.1) n'est pas accessible en administration depuis les VMs — l'accès WebUI OPNsense se fait uniquement depuis le réseau Freebox via WireGuard.
|
||||
- Les VMs CTF ou malware potentiellement dangereux ne sont pas connectées au réseau 10.1.1.x mais déployées sans interface réseau.
|
||||
@@ -0,0 +1,11 @@
|
||||
[Interface]
|
||||
PrivateKey = key
|
||||
Address = 10.0.0.2/32
|
||||
MTU = 1420
|
||||
DNS = 1.1.1.1
|
||||
|
||||
[Peer]
|
||||
PublicKey = key
|
||||
AllowedIPs = 10.0.0.0/24, 192.168.1.0/24
|
||||
Endpoint = wireguard.rolland.app:51820
|
||||
PersistentKeepalive = 21
|
||||
@@ -0,0 +1,94 @@
|
||||
# Architecture – Homelab Proxmox VE
|
||||
|
||||
## Vue d'ensemble
|
||||
|
||||
L'infrastructure repose sur un unique hôte physique (GMKtec K12) faisant tourner Proxmox VE. Elle combine des conteneurs LXC pour les services légers et permanents, et des VMs complètes pour les environnements nécessitant une isolation forte ou un système d'exploitation complet.
|
||||
|
||||
L'accès aux services depuis l'extérieur est assuré par deux mécanismes complémentaires :
|
||||
- **WireGuard VPN** pour l'administration personnelle (accès complet au homelab)
|
||||
- **Cloudflare Tunnel** pour les accès partagés (Guacamole, TPs), sans aucun port ouvert sur la box
|
||||
|
||||
---
|
||||
|
||||
## Topologie physique
|
||||
|
||||
```
|
||||
Internet
|
||||
│
|
||||
├─── [UDP 51820] ──────────────────────────────────► WireGuard LXC
|
||||
│ (192.168.1.x)
|
||||
│
|
||||
└─── [HTTPS / Cloudflare Tunnel] ─────────────────► TrueNAS Scale
|
||||
(192.168.1.x)
|
||||
│
|
||||
└─ Agent Cloudflare
|
||||
(expose Guacamole)
|
||||
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ Freebox (192.168.1.x/24) │
|
||||
│ │
|
||||
│ GMKtec K12 – Proxmox VE TrueNAS Scale │
|
||||
│ (192.168.1.x) (192.168.1.x) │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Réseaux virtuels dans Proxmox
|
||||
|
||||
Proxmox expose deux bridges réseau principaux :
|
||||
|
||||
| Bridge | Réseau | Rôle |
|
||||
|--------|--------|------|
|
||||
| `vmbr0` | 192.168.1.x/24 | Accès au réseau Freebox (WAN-side d'OPNsense, WireGuard, services directs) |
|
||||
| `vmbr1` | 10.1.1.x/24 | Réseau interne isolé (LAN-side d'OPNsense, VMs nécessitant isolation) |
|
||||
|
||||
OPNsense est l'élément charnière : il a une interface sur `vmbr0` (côté Freebox) et une sur `vmbr1` (côté VMs isolées). Il assure le NAT et le filtrage entre les deux segments.
|
||||
|
||||
---
|
||||
|
||||
## Placement des services
|
||||
|
||||
```
|
||||
vmbr0 – 192.168.1.x/24 (réseau Freebox)
|
||||
├── OPNsense WAN interface
|
||||
├── WireGuard LXC → administration personnelle
|
||||
└── Guacamole LXC → accès distant web (exposé via Cloudflare Tunnel)
|
||||
|
||||
vmbr1 – 10.1.1.x/24 (réseau interne isolé)
|
||||
├── OPNsense LAN interface → passerelle des VMs isolées
|
||||
├── VMs de TP → ont internet via NAT OPNsense, isolées du réseau Freebox
|
||||
├── VMs Windows Server / AD
|
||||
└── VMs CTF / Pentest
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Logique d'isolation
|
||||
|
||||
Trois niveaux de confiance coexistent :
|
||||
|
||||
**Niveau 1 – Réseau Freebox (192.168.1.x)**
|
||||
Services directement sur le réseau de la box : WireGuard, Guacamole, TrueNAS. Ces services sont maîtrisés et ne sont pas accessibles publiquement directement (Cloudflare Tunnel pour Guacamole, VPN pour le reste).
|
||||
|
||||
**Niveau 2 – Réseau interne OPNsense (10.1.1.x)**
|
||||
VMs nécessitant internet mais devant être cloisonnées du réseau Freebox. OPNsense fait le NAT sortant et bloque tout accès entrant vers ce segment depuis le réseau Freebox.
|
||||
|
||||
**Niveau 3 – VMs éphémères sans réseau**
|
||||
Environnements CTF/malware potentiellement dangereux, déployés sans interface réseau ou sur un réseau host-only isolé dans Proxmox.
|
||||
|
||||
---
|
||||
|
||||
## Choix techniques
|
||||
|
||||
**Pourquoi LXC pour WireGuard et Guacamole ?**
|
||||
Ces services sont bien connus, maintenus, et ne nécessitent pas d'isolation kernel complète. LXC offre une empreinte mémoire réduite et un démarrage quasi-instantané, adapté à des services permanents.
|
||||
|
||||
**Pourquoi une VM pour OPNsense ?**
|
||||
OPNsense requiert son propre kernel et un accès direct aux interfaces réseau. La virtualisation complète garantit l'isolation et permet à OPNsense de gérer ses propres drivers réseau sans interférence avec l'hôte Proxmox.
|
||||
|
||||
**Pourquoi Cloudflare Tunnel plutôt qu'un reverse proxy exposé ?**
|
||||
Zéro port ouvert sur la box (hormis le UDP WireGuard). Le tunnel initie une connexion sortante vers Cloudflare, ce qui élimine toute exposition directe de l'infrastructure. L'authentification Cloudflare Access (email) s'ajoute avant même d'atteindre Guacamole.
|
||||
|
||||
**Pourquoi héberger l'agent Cloudflare sur TrueNAS et non sur Proxmox ?**
|
||||
Séparation des responsabilités : TrueNAS est un service permanent et stable, indépendant de l'état de Proxmox. Si Proxmox redémarre pour maintenance, le tunnel reste actif.
|
||||
@@ -0,0 +1,98 @@
|
||||
# Schéma réseau – Homelab Proxmox VE
|
||||
|
||||
## Flux réseau complets
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────┐
|
||||
│ INTERNET │
|
||||
└──────────┬──────────────────────────────────────┬───────────────────────┘
|
||||
│ │
|
||||
[UDP 51820] [HTTPS – Cloudflare CDN]
|
||||
WireGuard Cloudflare Access (auth email)
|
||||
│ │
|
||||
▼ ▼
|
||||
┌──────────────────────────────────────────────────────────────────────────┐
|
||||
│ Freebox – 192.168.1.x/24 │
|
||||
│ │
|
||||
│ ┌─────────────────────┐ ┌──────────────────────────────────────┐ │
|
||||
│ │ GMKtec K12 │ │ TrueNAS Scale │ │
|
||||
│ │ Proxmox VE │ │ 192.168.1.x │ │
|
||||
│ │ 192.168.1.x │ │ │ │
|
||||
│ │ │ │ ┌──────────────────────────────┐ │ │
|
||||
│ │ vmbr0 (192.168.1.x)│ │ │ Agent Cloudflare Tunnel │ │ │
|
||||
│ │ ┌───────────────┐ │ │ │ → expose Guacamole LXC │ │ │
|
||||
│ │ │ WireGuard LXC │ │ │ └──────────────────────────────┘ │ │
|
||||
│ │ │ 192.168.1.x │◄─┼── VPN─┘ │ │
|
||||
│ │ └───────────────┘ │ └──────────────────────────────────────┘ │
|
||||
│ │ │ │ │
|
||||
│ │ ┌───────────────┐ │◄─────────────────────────┘ (tunnel vers) │
|
||||
│ │ │ Guacamole LXC │ │ │
|
||||
│ │ │ 192.168.1.x │ │ │
|
||||
│ │ └───────────────┘ │ │
|
||||
│ │ │ │
|
||||
│ │ ┌───────────────┐ │ │
|
||||
│ │ │ OPNsense VM │ │ │
|
||||
│ │ │ WAN: 192.168.1│ │ │
|
||||
│ │ │ LAN: 10.1.1.1 │ │ │
|
||||
│ │ └──────┬────────┘ │ │
|
||||
│ │ │ NAT │ │
|
||||
│ │ vmbr1 (10.1.1.x/24)│ │
|
||||
│ │ ┌──────▼────────┐ │ │
|
||||
│ │ │ VMs isolées │ │ │
|
||||
│ │ │ • Windows/AD │ │ │
|
||||
│ │ │ • Ubuntu │ │ │
|
||||
│ │ │ • VMs TP │ │ │
|
||||
│ │ └───────────────┘ │ │
|
||||
│ │ │ │
|
||||
│ │ [host-only / no NIC] │
|
||||
│ │ ┌───────────────┐ │ │
|
||||
│ │ │ VMs CTF / │ │ │
|
||||
│ │ │ Malware │ │ │
|
||||
│ │ │ (isolées) │ │ │
|
||||
│ │ └───────────────┘ │ │
|
||||
│ └─────────────────────┘ │
|
||||
└──────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Table d'adressage
|
||||
|
||||
| Service | Type | Réseau | Adresse | Accès externe |
|
||||
|---------|------|--------|---------|---------------|
|
||||
| Proxmox VE (hôte) | Physique | 192.168.1.x/24 | 192.168.1.x | Via WireGuard uniquement |
|
||||
| TrueNAS Scale | Physique | 192.168.1.x/24 | 192.168.1.x | Via WireGuard uniquement |
|
||||
| WireGuard | LXC | 192.168.1.x/24 | 192.168.1.x | UDP 51820 (seul port ouvert) |
|
||||
| Guacamole | LXC | 192.168.1.x/24 | 192.168.1.x | Via Cloudflare Tunnel |
|
||||
| OPNsense WAN | VM | 192.168.1.x/24 | 192.168.1.x | Non exposé |
|
||||
| OPNsense LAN | VM | 10.1.1.x/24 | 10.1.1.1 | Passerelle interne |
|
||||
| VMs TP / isolées | VM | 10.1.1.x/24 | 10.1.1.x | Via Guacamole uniquement |
|
||||
| VMs CTF / Malware | VM | Aucun / host-only | — | Aucun |
|
||||
|
||||
> Les adresses IP réelles ont été omises volontairement. Ce tableau illustre la logique de segmentation.
|
||||
|
||||
---
|
||||
|
||||
## Flux autorisés (synthèse)
|
||||
|
||||
| Source | Destination | Port/Proto | Autorisation |
|
||||
|--------|-------------|------------|--------------|
|
||||
| Internet | WireGuard LXC | UDP 51820 | ✅ Seul port ouvert box |
|
||||
| Cloudflare | Guacamole LXC | HTTPS | ✅ Via tunnel sortant TrueNAS |
|
||||
| Client VPN | Proxmox WebUI | TCP 8006 | ✅ Via tunnel WireGuard |
|
||||
| Client VPN | Tous services | Tous | ✅ Via tunnel WireGuard |
|
||||
| Internet | Réseau Freebox | Tout autre | ❌ Bloqué par box |
|
||||
| Réseau Freebox | Réseau 10.1.1.x | Tout | ❌ Bloqué par OPNsense |
|
||||
| VMs 10.1.1.x | Internet | HTTP/HTTPS | ✅ NAT OPNsense |
|
||||
| VMs 10.1.1.x | Réseau Freebox | Tout | ❌ Bloqué par OPNsense |
|
||||
| VMs CTF | Tout | Tout | ❌ Pas d'interface réseau |
|
||||
|
||||
---
|
||||
|
||||
## Ports ouverts sur la Freebox
|
||||
|
||||
| Port | Proto | Destination | Service |
|
||||
|------|-------|-------------|---------|
|
||||
| 51820 | UDP | WireGuard LXC | VPN personnel |
|
||||
|
||||
> **Aucun autre port n'est ouvert.** L'accès à Guacamole et aux autres services web passe exclusivement par le Cloudflare Tunnel (connexion sortante initiée par TrueNAS).
|
||||
@@ -0,0 +1,125 @@
|
||||
# Politique de sécurité – Homelab Proxmox VE
|
||||
|
||||
## Objectif
|
||||
|
||||
Ce document décrit les choix de sécurité appliqués à l'infrastructure homelab. Il ne s'agit pas d'une liste de règles formelles mais d'une réflexion sur les principes retenus, les menaces considérées et les compromis effectués — dans le contexte d'un usage personnel et d'apprentissage.
|
||||
|
||||
---
|
||||
|
||||
## Modèle de menace
|
||||
|
||||
L'infrastructure est exposée à deux catégories de risques principaux :
|
||||
|
||||
**Risques externes**
|
||||
- Scan automatisé de ports et tentatives d'exploitation de services exposés
|
||||
- Compromission d'un compte d'accès (Guacamole, Proxmox)
|
||||
- Attaque sur le service VPN
|
||||
|
||||
**Risques internes**
|
||||
- Fuite d'un environnement de test vulnérable (VM CTF, malware) vers le réseau de production
|
||||
- Mauvaise manipulation sur une VM qui affecterait d'autres services
|
||||
- Compromission d'une VM TP accessible via Guacamole
|
||||
|
||||
---
|
||||
|
||||
## Principes appliqués
|
||||
|
||||
### 1. Exposition minimale
|
||||
|
||||
**Principe** : aucun service ne doit être accessible depuis internet s'il n'en a pas strictement besoin.
|
||||
|
||||
**Mise en œuvre** :
|
||||
- Un seul port ouvert sur la Freebox : UDP 51820 (WireGuard)
|
||||
- Tous les services web (Proxmox WebUI, Guacamole, TrueNAS) sont accessibles uniquement via VPN ou Cloudflare Tunnel
|
||||
- Pas de redirection de port RDP, SSH ou HTTP/HTTPS directe
|
||||
|
||||
---
|
||||
|
||||
### 2. Administration exclusivement via VPN
|
||||
|
||||
**Principe** : la surface d'attaque de l'administration doit être nulle depuis internet.
|
||||
|
||||
**Mise en œuvre** :
|
||||
- L'interface Proxmox (port 8006) n'est accessible que depuis le tunnel WireGuard
|
||||
- Toute intervention de maintenance (SSH sur LXC, console VM) passe par le VPN
|
||||
- WireGuard est préféré à OpenVPN pour sa simplicité de code (surface d'attaque réduite), ses performances et sa cryptographie moderne (Curve25519, ChaCha20)
|
||||
|
||||
---
|
||||
|
||||
### 3. Accès partagé cloisonné (Guacamole + Cloudflare Access)
|
||||
|
||||
**Principe** : les accès donnés à des tiers (étudiants, partenaires de TP) doivent être authentifiés, traçables et limités aux ressources concernées.
|
||||
|
||||
**Mise en œuvre** :
|
||||
- Guacamole exposé via Cloudflare Tunnel (aucun port direct)
|
||||
- Double couche d'authentification :
|
||||
- **Cloudflare Access** : vérification par lien email avant d'atteindre Guacamole
|
||||
- **Guacamole** : identifiants individuels par utilisateur
|
||||
- Les VMs accessibles via Guacamole sont sur le réseau 10.1.1.x, isolées du réseau Freebox
|
||||
- Ces VMs ont accès à internet (via NAT OPNsense) mais ne peuvent pas atteindre les services d'administration
|
||||
|
||||
**Pourquoi Cloudflare Tunnel plutôt qu'un VPN pour les TPs ?**
|
||||
Un VPN par utilisateur impliquerait une gestion de clés, une distribution sécurisée et une configuration cliente. Cloudflare Access permet un accès web simple (lien + email) sans client à installer, adapté à des utilisateurs non techniques ou ponctuels.
|
||||
|
||||
---
|
||||
|
||||
### 4. Segmentation réseau
|
||||
|
||||
**Principe** : les environnements de confiance différente ne doivent pas pouvoir communiquer librement.
|
||||
|
||||
**Mise en œuvre** :
|
||||
|
||||
| Segment | Confiance | Communication autorisée |
|
||||
|---------|-----------|------------------------|
|
||||
| Réseau Freebox (192.168.1.x) | Haute | Services de production, accès VPN |
|
||||
| Réseau interne OPNsense (10.1.1.x) | Moyenne | Internet sortant via NAT, pas de retour vers Freebox |
|
||||
| VMs CTF / Malware | Nulle | Aucune interface réseau |
|
||||
|
||||
OPNsense applique les règles suivantes :
|
||||
- NAT sortant pour les VMs 10.1.1.x → internet
|
||||
- Blocage de tout trafic 10.1.1.x → 192.168.1.x
|
||||
- Pas de règle entrante depuis Freebox vers 10.1.1.x (deny-all par défaut)
|
||||
|
||||
---
|
||||
|
||||
### 5. Isolation des environnements de test
|
||||
|
||||
**Principe** : une VM compromise ou délibérément vulnérable ne doit pas affecter l'infrastructure.
|
||||
|
||||
**Mise en œuvre** :
|
||||
- VMs CTF et malware déployées sans interface réseau ou sur réseau host-only Proxmox
|
||||
- Snapshots systématiques avant toute expérimentation
|
||||
- Restauration rapide vers un état propre après chaque session
|
||||
- Nommage clair des VMs pour distinguer production / test / éphémère
|
||||
|
||||
---
|
||||
|
||||
### 6. Journalisation
|
||||
|
||||
**Principe** : tout trafic réseau entre segments doit être visible.
|
||||
|
||||
**Mise en œuvre** :
|
||||
- OPNsense journalise les flux inter-segments et les connexions bloquées
|
||||
- Les logs WireGuard permettent de tracer les connexions VPN (date, IP source, handshake)
|
||||
- Guacamole journalise les sessions utilisateurs (connexion, durée, ressource accédée)
|
||||
|
||||
---
|
||||
|
||||
## Limites assumées
|
||||
|
||||
Ce homelab est un environnement personnel et d'apprentissage. Certaines mesures ne sont pas implémentées par choix pragmatique :
|
||||
|
||||
| Mesure | Statut | Raison |
|
||||
|--------|--------|--------|
|
||||
| IDS/IPS (Suricata) | Non déployé | Overhead CPU, prévu comme évolution |
|
||||
| Authentification MFA sur Proxmox | Non actif | Accès uniquement via VPN, risque résiduel accepté |
|
||||
| SIEM / centralisation des logs | Non déployé | Hors scope actuel |
|
||||
| Rotation automatique des clés WireGuard | Manuelle | Fréquence suffisante pour usage personnel |
|
||||
|
||||
---
|
||||
|
||||
## Évolutions prévues
|
||||
|
||||
- Déploiement de Suricata sur OPNsense pour détection d'intrusion
|
||||
- Mise en place d'un VLAN dédié aux VMs de TP (isolation plus fine)
|
||||
- Exploration d'un SIEM léger (Wazuh ou Graylog) pour centraliser les logs
|
||||
Reference in New Issue
Block a user