🔥 Pare-feu et filtrage réseau

Bloc 3 Module 3.4 BTS SIO SISR
FormationBTS SIO option SISR — IRIS Mediaschool
BlocB3 — Cybersécurité des services informatiques
ModuleM3.4 — Disponibilité, intégrité et confidentialité
Durée7 heures
PrérequisModè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érationTechnologieFiltrage
1ère — Filtrage de paquetsRègles IP/portCouche 3-4 : IP source/destination, protocole, port
2ème — StatefulSuivi 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 IAMachine LearningDé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

SourceDestinationServiceAction
InternetDMZ (Web)TCP 80, 443ALLOW
InternetLANToutDENY
DMZLAN (DB)TCP 3306ALLOW (restreint)
DMZLANTout autreDENY
LANDMZAdmin (SSH)ALLOW (admin réseau)
LANInternetTCP 80, 443ALLOW (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

  1. Quelle est la différence entre un pare-feu stateless et stateful ?
  2. Que signifie "politique par défaut DROP" dans iptables et pourquoi est-ce recommandé ?
  3. Quel est l'intérêt d'une DMZ dans une architecture réseau ?
  4. Quels états de connexion sont gérés par un pare-feu stateful ?
  5. Qu'est-ce qu'un WAF et contre quels types d'attaques protège-t-il ?
  6. Dans iptables, quelle chaîne gère le trafic transitant par le pare-feu (non destiné à lui) ?
📝 Afficher les corrections
  1. 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.
  2. 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.
  3. 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.
  4. NEW, ESTABLISHED, RELATED, INVALID — NEW : nouvelle connexion, ESTABLISHED : connexion en cours, RELATED : connexion liée (ex : FTP data), INVALID : paquet non conforme.
  5. 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.
  6. 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.
← Retour au module Cours suivant →