← Retour au portail

Fiche 7 - Snort / Suricata — IDS/IPS réseau

Comprendre les IDS/IPS réseau, installer Suricata sur Debian et analyser les alertes de détection d'intrusion.

Avancé — SISR 2ème année ⏱️ 25 min 📁 Cybersécurité

🎯 Objectifs de la fiche

  1. IDS vs IPS — Principe — Détection vs prévention, mode inline vs mirror
  2. Snort vs Suricata — Comparaison, choix selon le contexte
  3. Installer Suricata sur Debian — Installation, configuration de base
  4. Règles Suricata — Syntaxe, sources de règles (Emerging Threats)
  5. Analyser les alertes — Logs, eve.json, tableau de bord

Prérequis

Debian avec accès root. Connaître les protocoles réseau (TCP/IP, HTTP, DNS). Avoir lu les fiches sur nmap et Wireshark.

1. IDS vs IPS

TypeSignificationModeAction
IDSIntrusion Detection SystemPassif — écoute une copie du traficDétecte et alerte uniquement
IPSIntrusion Prevention SystemInline — trafic passe par luiDétecte, alerte ET bloque
Mode de déploiementDescriptionAvantages / Inconvénients
Mode miroir (SPAN)Reçoit une copie du trafic depuis un port miroir du switchPas d'impact sur le trafic, ne peut pas bloquer
Mode inline (IPS)Placé physiquement entre le réseau et InternetPeut bloquer, mais devient un SPOF si tombe
Mode NFQUEUEVia iptables/nftables sous Linux — trafic routé vers SuricataIPS sur Linux sans matériel dédié

2. Snort vs Suricata

CritèreSnort 3Suricata
ÉditeurCisco (open source)OISF (open source)
Multi-threadOui (Snort 3)Oui — natif, très performant
RèglesFormat Snort (compatibles)Format Snort + extensions
ProtocolesNombreuxPlus complet (TLS, SMB, HTTP2...)
SortieLogs texte, unificat2eve.json (JSON) — facile à intégrer
IntégrationBonneExcellente (ELK, Splunk, Wazuh)
Usage recommandéEnvironnements CiscoChoix par défaut aujourd'hui

3. Installer Suricata sur Debian

# Ajouter le dépôt OISF
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:oisf/suricata-stable    # Ubuntu/Debian
# OU sur Debian pur :
sudo apt install suricata -y

# Vérifier la version
sudo suricata --build-info | grep Version

# Activer le service
sudo systemctl enable --now suricata

3.1 Configuration de base

sudo nano /etc/suricata/suricata.yaml
# Paramètres clés dans suricata.yaml

# 1. Définir votre réseau (IP à protéger)
vars:
  address-groups:
    HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"
    EXTERNAL_NET: "!$HOME_NET"

# 2. Interface réseau à surveiller
af-packet:
  - interface: eth0    # Changer selon votre interface

# 3. Activer le log eve.json
outputs:
  - eve-log:
      enabled: yes
      filetype: regular
      filename: /var/log/suricata/eve.json

4. Télécharger et mettre à jour les règles

# Suricata-update gère les sources de règles
sudo apt install python3-pip -y
sudo pip3 install --upgrade suricata-update --break-system-packages

# Mettre à jour les règles (Emerging Threats - libre)
sudo suricata-update

# Lister les sources de règles disponibles
sudo suricata-update list-sources

# Activer des sources supplémentaires (ex: ET Open)
sudo suricata-update enable-source et/open
sudo suricata-update

# Planifier la mise à jour hebdomadaire des règles
# Dans crontab -e :
# 0 2 * * 1 suricata-update && systemctl reload suricata

5. Tester Suricata

# Vérifier la configuration
sudo suricata -T -c /etc/suricata/suricata.yaml -v

# Lancer en mode test sur un fichier pcap
sudo suricata -r /chemin/capture.pcap -l /tmp/suricata-test/

# Voir les alertes en temps réel
sudo tail -f /var/log/suricata/fast.log

# Analyser eve.json avec jq
sudo tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="alert")'

6. Comprendre une règle Suricata

Structure d'une règle :
action  protocole  src_ip  src_port  direction  dst_ip  dst_port  (options)

Exemple :
alert tcp any any -> $HOME_NET 22 (msg:"SSH scan détecté"; \
  flags:S; threshold:type threshold, track by_src, count 5, seconds 60; \
  classtype:attempted-recon; sid:1000001; rev:1;)

Explication :
- alert         : action (alert, drop, reject, pass)
- tcp           : protocole
- any any       : source IP:port quelconque
- ->            : direction (-> ou <>)
- $HOME_NET 22  : destination réseau interne port 22
- msg           : message d'alerte
- flags:S       : paquet SYN uniquement
- threshold     : déclenche si 5 SYN en 60 secondes depuis la même IP
- sid           : identifiant unique de la règle

7. Analyser les alertes

# Compter les alertes par type
sudo cat /var/log/suricata/eve.json | \
  jq -r 'select(.event_type=="alert") | .alert.signature' | \
  sort | uniq -c | sort -rn | head -20

# Voir les IPs sources les plus actives
sudo cat /var/log/suricata/eve.json | \
  jq -r 'select(.event_type=="alert") | .src_ip' | \
  sort | uniq -c | sort -rn | head -10

# Statistiques globales
sudo cat /var/log/suricata/stats.log | tail -30
Quelle est la différence entre un IDS et un IPS ?
  • Un IDS est plus récent qu'un IPS
  • Un IDS détecte et alerte, un IPS peut aussi bloquer le trafic
  • Un IDS est hardware, un IPS est software
  • Il n'y a pas de différence

✅ Réponse : Un IDS détecte et alerte, un IPS peut aussi bloquer le trafic

Quel format de log Suricata est le plus facile à intégrer avec des outils SIEM ?
  • fast.log (texte)
  • unified2 (binaire)
  • eve.json (JSON)
  • syslog

✅ Réponse : eve.json (JSON)

Quelle commande met à jour les règles Suricata ?
  • suricata --update-rules
  • suricata-update
  • apt upgrade suricata-rules
  • snort --pull-rules

✅ Réponse : suricata-update

Dans une règle Suricata, que signifie l'action drop ?
  • Journaliser le paquet sans autre action
  • Alerter et laisser passer
  • Alerter et bloquer le paquet (mode IPS)
  • Ignorer complètement le paquet

✅ Réponse : Alerter et bloquer le paquet (mode IPS)

Quelle variable Suricata définit les réseaux à protéger ?
  • PROTECTED_NET
  • HOME_NET
  • LOCAL_NET
  • INTERNAL_NET

✅ Réponse : HOME_NET