Dans le tutoriel précédent, nous avons créé plusieurs VLANs avec pfSense pour séparer les usages du réseau.
Aujourd’hui, on passe à l’étape suivante : ajouter une DMZ et y tester l’accès à un serveur web (un Raspberry Pi sous NGINX).
À quoi sert la DMZ, en vrai ? À exposer ce qui doit l’être sans donner de passe-droit au reste du réseau. On y place typiquement un site web, un serveur mail, un reverse proxy ou un petit service maison. Si l’un de ces services est mal configuré ou compromis, il reste enfermé dans la DMZ : pas d’accès direct aux postes, partages de fichiers, sauvegardes, ni aux autres VLANs. On obtient ainsi un espace « vitrine sur l’extérieur » contrôlé, idéal pour publier un service tout en gardant le cœur du réseau au frais.
Pour rendre la tâche plus difficile, nous n’allons pas simplement ajouter un VLAN de plus, mais couper un VLAN existant et réserver une partie de ses adresses pour cette zone. Concrètement, nous allons scinder le VLAN20 en deux sous-réseaux /27 :
- la moitié basse 172.16.1.64/27 devient VLAN100_DMZ (passerelle 172.16.1.65),
- la moitié haute 172.16.1.96/27 reste le VLAN20 (passerelle 172.16.1.97).
Le Raspberry Pi recevra une IP fixe en DMZ et sera joignable depuis le WAN grâce à un NAT sur les ports 80/443, tandis que le LAN et les autres VLANs resteront invisibles depuis cette zone.
Prérequis
Avant de commencer, il faut avoir effectué les étapes suivantes :
Étape 1. Modifier VLAN20
Allez dans pfSense → Interfaces > VLAN20_Compta (OPT2)
- Changez l’adresse IPv4 en 172.16.1.97/27
- Cliquez sur Save + Apply
👉 Cette modification réduit la plage du VLAN20 à la moitié supérieure du réseau initial (172.16.1.96–127). L’autre moitié sera réservée pour la future DMZ.
Adapter le DHCP du VLAN20
Allez dans Services > DHCP Server > OPT2 (VLAN20_Compta)
- Range : 172.16.1.98 – 172.16.1.120
- Gateway : 172.16.1.97
- DNS Server : 172.16.1.97
- Cliquez sur Save + Apply
👉 Ces réglages garantissent que les clients du VLAN20 recevront bien une adresse dans la nouvelle plage (172.16.1.96/27), avec comme passerelle et DNS le pfSense à 172.16.1.97.
Étape 2. Créer le VLAN100_DMZ
Nous avons libéré la plage d’adresses nécessaire, il est temps de créer le VLAN pour la DMZ.
Allez dans Interfaces > Assignments > VLANs > Add
- Parent interface : ue0
- VLAN tag : 100
- Description : VLAN100_DMZ
- Cliquez sur Save + Apply
👉 Cela ajoute un VLAN logique (100) sur l’interface physique ue0. Ce VLAN sera utilisé exclusivement pour la zone DMZ.
Étape 3. Assigner et configurer l’interface VLAN100_DMZ
Allez dans Interfaces > Assignments
Ajoutez VLAN100 → une nouvelle interface apparaît (par ex. OPT4).
Cliquez sur OPT4 et configurez :
Enable : coché
Description : VLAN100_DMZ
Static IPv4 : 172.16.1.65/27
Cliquez sur Save + Apply
👉 Cette configuration active l’interface DMZ avec son adresse passerelle. Tous les hôtes du VLAN100 utiliseront 172.16.1.65 comme gateway.
Étape 4. Activer le DHCP pour la DMZ
Allez dans Services > DHCP Server > OPT4 (VLAN100_DMZ)
- Enable : coché
- Range : 172.16.1.76 – 172.16.1.94 (les 10 premières adresses sont réservées pour les serveurs, par ex. le Raspberry Pi)
- Gateway : 172.16.1.65
- DNS Server : 172.16.1.65
- Save + Apply
👉 Avec cette configuration, les clients branchés dans la DMZ recevront automatiquement une adresse IP, la passerelle et le DNS pointant vers pfSense. Bien sûr, en production, privilégiez IP fixes dans une DMZ afin de mieux contrôler vos services, mais j’active le DHCP ici juste pour le fun 😉.
Étape 5. Firewall pour VLAN100_DMZ (OPT4)
Dans Firewall → Rules → OPT4, les règles doivent être placées exactement dans cet ordre (de haut en bas) :
Block DMZ → LAN
- Action : Block
- Source : OPT4 net
- Destination : LAN net
- Description : Block DMZ → LAN
Block DMZ → OPT1
- Action : Block
- Source : OPT4 net
- Destination : OPT1 net
Block DMZ → OPT2
- Action : Block
- Source : OPT4 net
- Destination : OPT2 net
Block DMZ → OPT3
- Action : Block
- Source : OPT4 net
- Destination : OPT3 net
Allow DNS/NTP vers pfSense
- Action : Pass
- Source : OPT4 net
- Destination : OPT4 address (172.16.1.65)
- Ports : 53 TCP/UDP, 123 UDP
- Description : DNS/NTP to pfSense
Allow ICMP (Ping)
- Action : Pass
- Source : OPT4 net
- Destination : Any
- Protocole : ICMP
- Description : Allow Ping
Block DMZ → This Firewall
- Action : Block
- Source : OPT4 net
- Destination : This Firewall (self)
- Description : Block DMZ → pfSense GUI/SSH
Allow Web (80/443) → Internet
- Action : Pass
- Source : OPT4 net
- Destination : Any
- Ports : 80, 443 (TCP/UDP)
- Description : Allow web traffic to Internet
Cette structure garantit :
- une isolation complète vis-à-vis des autres VLANs et du pfSense lui-même,
- l’accès DNS/NTP uniquement vers la passerelle DMZ,
- la possibilité de pinguer l’extérieur pour diagnostiquer,
- et la sortie web (HTTP/HTTPS) vers Internet.
👉 Attention : l’ordre des règles est crucial ! Si un « Block » est placé trop haut, il neutralise les règles d’autorisation situées en dessous.
Au besoin, si vous voulez permettre aussi les mises à jour système ou APT depuis le Raspberry Pi, il faut simplement s’assurer que les règles HTTP/HTTPS (80/443) vers Internet sont bien présentes. Dans mon cas elles le sont déjà. Si d’autres services spécifiques sont nécessaires (ex. Git via SSH), il faudra ouvrir les ports correspondants de façon ciblée.
Étape 6. Port Forward depuis le WAN vers la DMZ
Allez dans Firewall > NAT > Port Forward et ajoutez deux règles :
1. HTTP (80)
- Interface : WAN
- Protocol : TCP
- Destination : WAN address
- Redirect target IP : 172.16.1.70 (Raspberry Pi)
- Redirect target port : 80
- Add associated filter rule : coché
2. HTTPS (443)
- Interface : WAN
- Protocol : TCP
- Destination : WAN address
- Redirect target IP : 172.16.1.70
- Redirect target port : 443
- Add associated filter rule : coché
Cliquez sur Save + Apply.
Avec ces règles, toute requête entrante sur l’IP WAN du pfSense (ports 80 et 443) est redirigée vers le Raspberry Pi en DMZ.
Étape 7. Configuration du switch L2
Dans mon cas, j’utilise un Catalyst 2950. Il faut créer le VLAN100, l’activer sur le trunk vers pfSense, puis affecter le port du Raspberry Pi à ce VLAN.
Pour plus de détails sur la configuration d’un switch Cisco, vous pouvez consulter mon blog dans la catégorie Cisco.
Bien sûr, vous pouvez également utiliser un autre switch L2 managé sur lequel il est possible de créer des VLANs. La logique reste la même, quel que soit le modèle de switch.
conf t vlan 100 name DMZ exit interface Gi0/1 description Uplink-to-pfSense switchport mode trunk switchport trunk allowed vlan 10,20,30,100 exit interface Fa0/10 description RaspberryPi-DMZ switchport mode access switchport access vlan 100 exit end write memory
Étape 8. Raspberry Pi dans la DMZ
Attribuez une adresse IP statique au Raspberry Pi :
IP : 172.16.1.70
Gateway : 172.16.1.65
DNS : 172.16.1.65
Branchez ensuite le Pi sur le port du switch configuré pour le VLAN100 (dans mon cas, le port Fa0/10).
Vérifications :
Depuis le Pi :
ping google.com
Si tout est bien configuré, l’accès Internet fonctionne.
Depuis pfSense :
Allez dans Diagnostics → Ping et testez vers 172.16.1.70 ou vers une adresse Internet (ex. 8.8.8.8).
À ce stade, le Raspberry Pi est en DMZ, isolé des autres VLANs mais accessible depuis le WAN sur les ports 80 et 443 grâce au Port Forward.
Étape 9. Test d’accès au serveur web en DMZ
Dans mon cas, NGINX était déjà préinstallé sur le Raspberry Pi.
Après avoir configuré les règles de Port Forward, j’ai vérifié l’adresse WAN de pfSense (ici 10.10.23.8).
Depuis n’importe quel poste situé dans le même réseau WAN que pfSense (mon « Internet » de labo), j’ai ouvert un navigateur et saisi :
http://10.10.23.8
ou
https://10.10.23.8
Résultat : la page par défaut de NGINX s’affiche, preuve que le trafic entrant arrive bien jusqu’au Raspberry Pi placé dans la DMZ.
Ce test confirme que :
- Le Raspberry Pi est isolé dans la DMZ (pas d’accès aux autres VLANs),
- Il obtient un accès contrôlé à Internet,
- Les utilisateurs externes peuvent atteindre le service via l’IP WAN de pfSense,
- La configuration firewall + NAT fonctionne comme prévu.
Voilà, nous avons configuré une DMZ sur pfSense, isolée des VLAN internes mais accessible depuis l’extérieur grâce au NAT. Le Raspberry Pi placé dans cette zone héberge désormais un serveur web disponible via l’adresse WAN, tout en protégeant le cœur du réseau. Cette approche permet de publier des services sans compromettre la sécurité de l’infrastructure interne.
Bonne chance!