🔥 Pare-feu et filtrage réseau
| Formation | BTS SIO option SISR — IRIS Mediaschool |
|---|---|
| Bloc | B3 — Cybersécurité des services informatiques |
| Module | M3.4 — Disponibilité, intégrité et confidentialité |
| Durée | 7 heures |
| Prérequis | Modèle OSI, adressage IP, protocoles TCP/UDP, notions de routage |
🎯 Objectifs
- Comprendre les différentes générations de pare-feux et leurs fonctionnements
- Maîtriser iptables/nftables sous Linux pour filtrer le trafic réseau
- Concevoir une architecture avec DMZ pour exposer des services en sécurité
- Configurer un pare-feu pfSense/OPNsense
- Comprendre le principe des pare-feux applicatifs (WAF)
- Rédiger une politique de sécurité réseau (PSR)
📖 Générations de pare-feux
| Génération | Technologie | Filtrage |
|---|---|---|
| 1ère — Filtrage de paquets | Règles IP/port | Couche 3-4 : IP source/destination, protocole, port |
| 2ème — Stateful | Suivi des connexions | État des connexions TCP (NEW, ESTABLISHED, RELATED) |
| 3ème — Applicatif (NGFW) | DPI (Deep Packet Inspection) | Couche 7 : protocoles applicatifs, identités, applications |
| 4ème — NGFW avec IA | Machine Learning | Détection comportementale, analyse des flux chiffrés |
📖 iptables — Linux
Architecture iptables
iptables organise les règles en tables et chaînes :
- Tables : filter (par défaut), nat, mangle, raw
- Chaînes : INPUT (entrant), OUTPUT (sortant), FORWARD (transit)
- Politiques par défaut : ACCEPT, DROP, REJECT
#!/bin/bash
# Script de pare-feu iptables — serveur basique
# 1. Vider les règles existantes
iptables -F
iptables -X
iptables -Z
# 2. Politiques par défaut : tout bloquer
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT # Autoriser le trafic sortant
# 3. Autoriser le loopback
iptables -A INPUT -i lo -j ACCEPT
# 4. Autoriser les connexions établies et liées
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 5. Autoriser SSH depuis le réseau d'administration
iptables -A INPUT -p tcp --dport 22 -s 10.0.0.0/24 -j ACCEPT
# 6. Autoriser HTTP et HTTPS (serveur web)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 7. Autoriser ICMP (ping) depuis le réseau interne uniquement
iptables -A INPUT -p icmp --icmp-type echo-request -s 10.0.0.0/8 -j ACCEPT
# 8. Logger et rejeter le reste
iptables -A INPUT -j LOG --log-prefix "IPT-DROP: " --log-level 4
iptables -A INPUT -j DROP
# Persister les règles
iptables-save > /etc/iptables/rules.v4
NAT avec iptables
# Activer le forwarding IP
echo 1 > /proc/sys/net/ipv4/ip_forward
# Permanent : net.ipv4.ip_forward = 1 dans /etc/sysctl.conf
# MASQUERADE (NAT sortant — routeur Internet)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# Port Forwarding (DNAT — redirection de port)
# Rediriger port 80 entrant vers le serveur web interne 192.168.1.10
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \
-j DNAT --to-destination 192.168.1.10:80
iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 \
-m state --state NEW,ESTABLISHED -j ACCEPT
📖 nftables — successeur d'iptables
#!/usr/sbin/nft -f
# /etc/nftables.conf — Configuration moderne
flush ruleset
table inet firewall {
chain input {
type filter hook input priority 0; policy drop;
# Loopback
iif "lo" accept
# Connexions établies
ct state established,related accept
# ICMP
icmp type echo-request accept
icmpv6 type { echo-request, nd-neighbor-solicit, nd-router-advert } accept
# SSH depuis admin
ip saddr 10.0.0.0/24 tcp dport 22 accept
# Web
tcp dport { 80, 443 } accept
# Logging
log prefix "nft-drop: " drop
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
📖 Architecture DMZ
La DMZ (Zone Démilitarisée) est un réseau intermédiaire entre Internet et le réseau interne, hébergeant les services exposés au public (serveur web, serveur mail, reverse proxy). En cas de compromission d'un serveur DMZ, l'attaquant n'a pas accès direct au réseau interne.
Internet
|
[Pare-feu externe / Border]
|
[DMZ — 172.16.0.0/24]
├── Serveur Web: 172.16.0.10
├── Serveur Mail: 172.16.0.11
└── Reverse Proxy: 172.16.0.12
|
[Pare-feu interne]
|
[LAN Interne — 10.0.0.0/8]
├── Postes de travail
├── Serveurs internes
└── Base de données
Règles de filtrage DMZ
| Source | Destination | Service | Action |
|---|---|---|---|
| Internet | DMZ (Web) | TCP 80, 443 | ALLOW |
| Internet | LAN | Tout | DENY |
| DMZ | LAN (DB) | TCP 3306 | ALLOW (restreint) |
| DMZ | LAN | Tout autre | DENY |
| LAN | DMZ | Admin (SSH) | ALLOW (admin réseau) |
| LAN | Internet | TCP 80, 443 | ALLOW (via proxy) |
📖 pfSense / OPNsense
pfSense et OPNsense sont des distributions FreeBSD dédiées au pare-feu et au routage, utilisées en PME et en production. Fonctionnalités clés :
- Pare-feu stateful avec interface web intuitive
- VPN intégré (OpenVPN, IPsec, WireGuard)
- IDS/IPS intégré (Snort, Suricata)
- Proxy (Squid) et filtrage URL
- Haute disponibilité (CARP)
- Traffic shaping et QoS
📖 WAF — Web Application Firewall
Un WAF filtre le trafic HTTP/HTTPS au niveau applicatif (couche 7). Il protège contre les attaques web courantes : injections SQL, XSS, CSRF, SSRF, LFI/RFI, selon les règles OWASP ModSecurity Core Rule Set.
# ModSecurity avec Nginx — configuration de base
# /etc/nginx/modsec/main.conf
Include "/etc/nginx/modsec/modsecurity.conf"
Include "/etc/nginx/owasp-crs/crs-setup.conf"
Include "/etc/nginx/owasp-crs/rules/*.conf"
# Activer ModSecurity dans nginx.conf
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
🛠️ Outils / Ressources
- iptables / nftables : pare-feu Linux
- pfSense / OPNsense : pare-feu open source
- Cisco ASA / Fortinet FortiGate : pare-feux enterprise
- ModSecurity + OWASP CRS : WAF open source
- Wireshark / tcpdump : analyse de trafic réseau
- Guide ANSSI — Recommandations pour la sécurité des architectures
📝 QCM — Testez vos connaissances
- Quelle est la différence entre un pare-feu stateless et stateful ?
- Que signifie "politique par défaut DROP" dans iptables et pourquoi est-ce recommandé ?
- Quel est l'intérêt d'une DMZ dans une architecture réseau ?
- Quels états de connexion sont gérés par un pare-feu stateful ?
- Qu'est-ce qu'un WAF et contre quels types d'attaques protège-t-il ?
- Dans iptables, quelle chaîne gère le trafic transitant par le pare-feu (non destiné à lui) ?
📝 Afficher les corrections
- Stateless : filtre chaque paquet indépendamment sans mémoire des connexions. Stateful : suit l'état des connexions TCP et n'autorise que les paquets appartenant à une connexion légitime, bloquant les paquets hors contexte.
- Tout ce qui n'est pas explicitement autorisé est refusé — C'est le principe de "deny all, permit by exception", beaucoup plus sécurisé que "permit all" où il faudrait explicitement bloquer chaque menace connue.
- La DMZ isole les services exposés à Internet du réseau interne. En cas de compromission d'un serveur DMZ, l'attaquant n'a pas d'accès direct aux ressources internes. Les règles de pare-feu contrôlent strictement ce qui peut transiter entre les zones.
- NEW, ESTABLISHED, RELATED, INVALID — NEW : nouvelle connexion, ESTABLISHED : connexion en cours, RELATED : connexion liée (ex : FTP data), INVALID : paquet non conforme.
- Un WAF (Web Application Firewall) filtre le trafic HTTP/HTTPS au niveau applicatif et protège contre les injections SQL, XSS, CSRF, SSRF, LFI/RFI et autres attaques OWASP Top 10.
- La chaîne FORWARD — INPUT = trafic destiné au pare-feu lui-même ; FORWARD = trafic en transit (routage) ; OUTPUT = trafic généré par le pare-feu.
