cyber / cybersecurite-fondamentale
Sécurité réseau : pare-feu, segmentation et IDS/IPS
Explication
Ce que vous allez apprendre
- Configurer un pare-feu selon le principe "tout refuser, puis autoriser explicitement" (whitelist)
- Distinguer un pare-feu stateless d'un pare-feu stateful
- Segmenter un réseau en zones (DMZ, applicatif, données, administration) pour limiter l'impact d'une compromission
- Différencier IDS et IPS, et détection par signature vs détection par anomalie
- Mettre en place fail2ban pour réagir automatiquement à des tentatives de connexion suspectes
Dans quel contexte ?
Une entreprise découvre qu'un attaquant, après avoir compromis un simple serveur web public, a pu se connecter directement à la base de données de production et à un serveur d'administration interne, car tout le réseau communiquait sans restriction. Une segmentation correcte (DMZ pour le serveur web, réseau isolé pour la base de données) aurait limité l'incident au seul serveur web compromis, sans laisser l'attaquant rebondir plus loin.
Changement de niveau : de l'application au réseau
Après les vulnérabilités applicatives (OWASP Top 10), on remonte d'un cran : comment protéger le réseau qui transporte et héberge ces applications. Un pare-feu est le premier filtre : il décide quel trafic entre et sort, selon des règles.
La bonne philosophie : tout refuser, puis autoriser explicitement
Piège fréquent
Un pare-feu mal conçu commence par tout autoriser et bloque au cas par cas les menaces connues — une approche perdante car on ne peut pas prévoir toutes les menaces futures. La bonne pratique inverse la logique : on part d'un refus total, puis on ouvre explicitement chaque flux dont on a la preuve qu'il est légitime et nécessaire. Tout ce qui n'a pas été explicitement autorisé est automatiquement bloqué.
Pourquoi segmenter le réseau
Un réseau plat, où tout communique avec tout, transforme une seule machine compromise en porte d'entrée vers l'ensemble du système d'information. Segmenter en zones revient à cloisonner un bateau : une brèche dans un compartiment ne coule pas le navire entier.
| Zone | Contient | Accessible depuis Internet ? |
|---|---|---|
| DMZ | Reverse proxy, API gateway | Oui, en façade |
| Réseau applicatif | Services backend | Non, seulement depuis la DMZ |
| Réseau de données | Bases de données | Non, seulement depuis l'applicatif |
| Réseau d'administration | Accès SSH/bastion | Non, restreint par IP + MFA |
IDS vs IPS : détecter n'est pas bloquer
Un IDS (Intrusion Detection System) observe le trafic et alerte en cas d'anomalie, sans intervenir — un gardien qui prévient mais n'agit pas. Un IPS (Intrusion Prevention System) va plus loin et bloque activement le trafic suspect. La détection par signature reconnaît des attaques déjà connues et documentées ; la détection par anomalie repère des comportements inhabituels même inédits, au prix de davantage de fausses alertes.
Lien avec les leçons suivantes
Une fois le réseau segmenté et surveillé, il reste à durcir chaque couche applicative individuellement — c'est l'objet des leçons sur les headers de sécurité et les cookies qui suivent.
Commandes & code
Sécurité réseau : pare-feu, segmentation et IDS/IPS
# Pare-feu (firewall) : filtre le trafic selon des règles (IP source/dest, port, protocole, état)
Stateless : évalue chaque paquet indépendamment (rapide, moins précis)
Stateful : suit l'état des connexions (ex: n'autorise une réponse que si la requête sortante existe)# iptables : règles de base pour un serveur exposant une API web (drop par défaut = whitelist)
iptables -P INPUT DROP # tout refuser par défaut en entrée
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT # autoriser loopback
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # autoriser les réponses aux connexions sortantes
iptables -A INPUT -p tcp --dport 22 -s 10.0.0.0/24 -j ACCEPT # SSH uniquement depuis le réseau admin
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS ouvert au public
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP (redirection vers HTTPS uniquement)
iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROPPED: " # journaliser avant le drop final implicite# nftables (successeur moderne d'iptables), équivalent plus lisible
nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }
nft add rule inet filter input iifname "lo" accept
nft add rule inet filter input ct state established,related accept
nft add rule inet filter input tcp dport 22 ip saddr 10.0.0.0/24 accept
nft add rule inet filter input tcp dport 443 accept# Segmentation réseau : limiter le "blast radius" d'une compromission
DMZ (zone démilitarisée) : serveurs exposés publiquement (reverse proxy, API gateway)
Réseau applicatif : services backend, isolés du réseau public direct
Réseau de données : bases de données, accessible UNIQUEMENT depuis le réseau applicatif
Réseau d'administration : accès SSH/bastion, isolé, accès restreint par IP + MFA
# Règle d'or : la base de données ne doit JAMAIS être directement joignable depuis Internet# Exemple de segmentation avec Docker Compose : réseaux internes séparés
services:
api:
build: ./backend
networks: [frontend_net, backend_net]
db:
image: postgres:16
networks: [backend_net] # PAS de réseau frontend -> injoignable depuis l'extérieur
environment:
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
reverse_proxy:
image: nginx:alpine
networks: [frontend_net]
ports: ["443:443"]
networks:
frontend_net:
backend_net:
internal: true # aucune route vers l'extérieur, isolation forte# IDS (Intrusion Detection System) vs IPS (Intrusion Prevention System)
IDS : détecte et alerte, n'intervient pas sur le trafic (passif, en dérivation - "tap"/"span port")
IPS : détecte ET bloque en temps réel, en ligne sur le chemin du trafic (actif)
# Approches de détection
Signature-based : compare le trafic à une base de signatures d'attaques connues (rapide, faux négatifs sur 0-day)
Anomaly-based : détecte les écarts par rapport à une baseline de trafic normal (détecte l'inconnu, plus de faux positifs)# Suricata : IDS/IPS open-source, exemple de règle personnalisée détectant un scan de ports agressif
# /etc/suricata/rules/local.rules
alert tcp any any -> $HOME_NET any (msg:"Scan de ports détecté - nombreuses connexions courtes"; flags:S; threshold:type both, track by_src, count 20, seconds 10; sid:1000001; rev:1;)
# Lancer Suricata en mode IDS (écoute passive) sur une interface réseau
suricata -c /etc/suricata/suricata.yaml -i eth0# fail2ban : réagit aux logs (ex: échecs SSH répétés) en ajoutant des règles de blocage dynamiques
# /etc/fail2ban/jail.local
cat <<'EOF' > /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 22
maxretry = 5
findtime = 600
bantime = 3600
EOF
systemctl restart fail2ban
fail2ban-client status sshdRésumé
- Un pare-feu bien conçu part d'une politique "tout refuser" puis autorise explicitement (whitelist).
- La segmentation réseau (DMZ, applicatif, données, admin) limite l'impact d'une compromission.
- IDS détecte et alerte, IPS détecte et bloque ; signature-based et anomaly-based sont complémentaires.
- fail2ban/Suricata automatisent la réaction à des comportements suspects observés dans les logs/trafic.
Exercices pratiques
Mission : le rebond depuis le serveur web vers la base de production
Objectif : Analyser un incident de compromission par manque de segmentation et concevoir une architecture réseau qui l'aurait limité.
Contexte
Après une intrusion via une faille applicative sur son serveur web public, Technologik découvre que l'attaquant a pu se connecter directement au serveur PostgreSQL de production ET au panneau d'administration interne, car les trois machines communiquaient librement sur le même réseau plat, sans aucune règle de pare-feu entre elles.