Aller au contenu
Sécurité medium

Snort 3 : détecter les intrusions réseau (IDS/IPS)

14 min de lecture

Logo Snort 3

Snort est l'IDS/IPS réseau open source de référence : il capture le trafic, le compare à des règles et alerte (ou bloque) sur les scans, exploits et malwares. Édité par Cisco (équipe Talos), sous licence GPLv2, sa version actuelle est Snort 3.12.2.0 (mai 2026). Ce guide montre comment tester Snort en deux minutes avec Docker, l'installer par compilation, écrire une règle, lancer la détection, et choisir entre Snort et Suricata. Pour administrateurs et profils blue team, sur Debian/Ubuntu.

  • La différence entre un IDS (détecter) et un IPS (bloquer).
  • Tester Snort 3 immédiatement avec Docker.
  • Installer Snort 3 par compilation et préparer l'interface réseau.
  • Écrire une règle et lire les alertes.
  • Choisir le bon ruleset et situer Snort face à Suricata.

Snort est un système de détection et de prévention d'intrusion réseau (NIDS/NIPS). Il capture le trafic circulant sur une interface et le compare à une base de règles pour repérer les comportements suspects. À chaque correspondance, il génère une alerte exploitable par un analyste ou un SIEM.

Trois faits le situent :

  • créé en 1998 par Martin Roesch, fondateur de Sourcefire ;
  • édité par Cisco depuis le rachat de Sourcefire en 2013, maintenu par Cisco Talos, le groupe de renseignement sur les menaces de Cisco (à ne pas confondre avec Talos Linux) ;
  • open source sous licence GPLv2.

Snort fonctionne selon trois modes : sniffer (affiche le trafic), packet logger (enregistre les paquets), et NIDS (compare aux règles et alerte). C'est ce dernier mode qui en fait un outil de sécurité.

La même brique se déploie de deux façons, et la distinction est fondamentale.

IDSIPS
Rôledétecte et alertedétecte et bloque
Positionpassif (copie du trafic)inline (en coupure)
Raccordementport SPAN / TAPsur le flux réseau
Action de règlealertdrop, reject

En mode IDS (Intrusion Detection System), Snort écoute une copie du trafic via un port SPAN (mirroring) ou un TAP : il alerte sans jamais toucher au flux. En mode IPS (Intrusion Prevention System), il est placé en coupure sur le flux et peut bloquer un paquet malveillant (action drop). Le choix du DAQ (Data Acquisition library) et du placement réseau détermine le mode.

Visez Snort 3 : c'est la version recommandée et activement maintenue. Snort 3 (« Snort++ ») est une réécriture en C++ apportant le multi-thread, une configuration en Lua (snort.lua au lieu de snort.conf), le support hyperscan et OpenAppID (détection applicative). Snort 2 reste single-thread.

Avant d'installer Snort sur une machine, l'image Docker officielle Cisco Talos permet de le découvrir sans rien compiler. Elle embarque un Snort 3 prêt à l'emploi et ses fichiers d'exemple.

  1. Démarrer le conteneur et entrer dedans :

    Fenêtre de terminal
    docker run --name snort3 -h snort3 -u snorty -w /home/snorty \
    -d -it ciscotalos/snort3 bash
    docker exec -it snort3 bash
  2. Vérifier la version installée :

    Fenêtre de terminal
    snort -V

    La sortie confirme le moteur et ses bibliothèques (extrait réel de l'image) :

    ,,_ -*> Snort++ <*-
    o" )~ Version 3.10.0.0
    Using DAQ version 3.0.23
    Using Hyperscan version 5.4.2
    Using libpcap version 1.10.5 (with TPACKET_V3)
  3. Créer une règle locale qui alerte sur le ping :

    Fenêtre de terminal
    printf 'alert icmp any any -> any any (msg:"PING ICMP detecte"; sid:1000001; rev:1;)\n' \
    > /tmp/local.rules
  4. Valider la configuration avec l'option -T (test sans capture) :

    Fenêtre de terminal
    snort -c $HOME/snort3/etc/snort/snort.lua -R /tmp/local.rules -T

    Snort charge la règle (icmp ... total 1) et confirme :

    port rule counts
    tcp udp icmp ip
    any 0 0 1 0
    Snort successfully validated the configuration (with 0 warnings).

Pour un déploiement réel, on compile Snort depuis les sources. La procédure ci-dessous a été validée sur une Debian 12 (compatible Ubuntu 24.04).

  1. Installer les dépendances de compilation :

    Fenêtre de terminal
    sudo apt update
    sudo apt install -y git wget build-essential libpcap-dev libpcre3-dev \
    libdumbnet-dev zlib1g-dev libluajit-5.1-dev libssl-dev cmake libunwind-dev \
    luajit hwloc bison flex liblzma-dev openssl pkg-config libhwloc-dev \
    libsqlite3-dev uuid-dev libcmocka-dev libnetfilter-queue-dev libmnl-dev \
    autotools-dev libfl-dev libgoogle-perftools-dev ethtool
  2. Compiler DAQ (Data Acquisition library), indispensable pour la capture :

    Fenêtre de terminal
    git clone https://github.com/snort3/libdaq.git
    cd libdaq
    ./bootstrap && ./configure && make
    sudo make install && sudo ldconfig
    cd ..
  3. Télécharger et compiler Snort 3 :

    Fenêtre de terminal
    SNORT_VERSION=3.12.2.0
    wget https://github.com/snort3/snort3/archive/refs/tags/${SNORT_VERSION}.tar.gz
    tar -xzf ${SNORT_VERSION}.tar.gz
    cd snort3-${SNORT_VERSION}
    ./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc
    cd build && make -j$(nproc)
    sudo make install && sudo ldconfig
  4. Vérifier l'installation :

    Fenêtre de terminal
    snort -V

    La commande affiche la version installée ainsi que les bibliothèques liées (DAQ, LuaJIT, OpenSSL, libpcap).

Pour qu'un IDS voie tout le trafic, son interface doit passer en mode promiscuous (elle accepte alors les paquets qui ne lui sont pas destinés) et désactiver l'offloading matériel, qui tronque les gros paquets et masque des menaces. Remplacez enp1s0 par votre interface.

Fenêtre de terminal
# Mode promiscuous
sudo ip link set enp1s0 promisc on
# Desactiver GRO et LRO (sinon paquets > 1518 octets tronques)
sudo ethtool -K enp1s0 gro off lro off

Vérifiez avec ip link show enp1s0 (la mention PROMISC doit apparaître). Ces réglages sont temporaires : pour les rendre permanents, créez un service systemd oneshot qui rejoue ces deux commandes au démarrage avec ExecStart.

Le fichier de configuration de Snort 3 est un fichier Lua, snort.lua, généralement dans /usr/local/etc/snort/. Deux réglages comptent pour démarrer : l'interface surveillée et la définition des réseaux.

La variable HOME_NET décrit votre réseau local à protéger, EXTERNAL_NET le reste. Cette distinction permet à Snort de cibler ses alertes sur le trafic entrant ou sortant pertinent.

HOME_NET = '192.168.20.0/24'
EXTERNAL_NET = 'any'

Activez ensuite le chargement des règles locales en pointant local.rules dans la section ips du fichier :

ips =
{
enable_builtin_rules = true,
include = RULE_PATH .. "/local.rules",
variables = default_variables
}

Une règle Snort se lit comme une phrase : une action, un protocole, une source, une destination et des options.

action protocole ip_src port_src -> ip_dst port_dst (options)

Voici une règle qui alerte dès qu'un ping ICMP atteint le réseau local :

alert icmp any any -> $HOME_NET any (msg:"Ping ICMP detecte"; sid:1000001; rev:1;)

Les éléments à connaître :

  • action : alert (IDS), drop ou reject (IPS) ;
  • protocole : tcp, udp, icmp, ip ;
  • -> : le sens du flux (source vers destination) ;
  • options : msg (libellé de l'alerte), sid (identifiant unique, supérieur à 1000000 pour vos règles locales), rev (numéro de révision), et des critères comme content ou flow.

Vous n'écrirez pas toutes vos règles à la main : Talos publie des rulesets prêts à l'emploi. Le bon choix dépend de votre budget et de votre tolérance au délai.

RulesetAccèsDélai des règles
Communitygratuit, sans comptequotidien
Registeredgratuit avec compte (oinkcode)30 jours de décalage
Subscriberpayanttemps réel

Les Community Rules (GPLv2) suffisent pour apprendre et couvrir les menaces courantes. Les Subscriber offrent les règles Talos dès leur publication, un atout face aux menaces récentes. L'outil PulledPork automatise leur téléchargement et leur mise à jour.

Une fois la règle écrite, démarrez Snort en mode détection sur l'interface, avec un affichage d'alertes rapide :

Fenêtre de terminal
sudo snort -c /usr/local/etc/snort/snort.lua \
-R /usr/local/etc/rules/local.rules \
-i enp1s0 -A alert_fast -s 65535 -k none

Depuis une autre machine, un simple ping vers l'hôte surveillé déclenche la règle. Snort affiche alors une alerte par paquet :

[**] [1:1000001:0] "Ping ICMP detecte" [**] [Priority: 0] {ICMP} 192.168.20.50 -> 192.168.20.92

Chaque ligne donne le SID de la règle (1:1000001), le message, le protocole et les adresses source et destination. Si rien ne s'affiche, vérifiez le mode PROMISC, le chemin de local.rules et l'adresse cible du ping.

Suricata est l'alternative la plus citée, et la comparaison est honnête plutôt que tranchée.

Snort 3Suricata
Multi-threadoui (réécriture)oui (dès l'origine)
Sortieunified2EVE JSON
Règles Snortnatifcompatible (la plupart)
AtoutOpenAppID, Talosintégration SIEM

Suricata brille par sa sortie EVE JSON (alertes, flux, DNS, HTTP, TLS) qui s'envoie directement dans ELK, Grafana ou Loki, et par sa compatibilité avec la plupart des règles Snort. Snort 3 garde l'écosystème Talos et OpenAppID. En pratique : Suricata si l'intégration SIEM prime, Snort si vous misez sur Talos ou un parc Cisco.

Snort n'est pas magique, et trois limites doivent guider son déploiement.

  • Le chiffrement TLS limite l'inspection : sur un flux HTTPS, Snort voit surtout le handshake, pas le contenu applicatif. Couplez-le à une terminaison TLS ou à de l'analyse de métadonnées.
  • Les faux positifs sont nombreux sans tuning : un ruleset brut génère du bruit. Désactivez les règles non pertinentes et adaptez HOME_NET.
  • Le placement réseau est critique : un IDS sur un port SPAN ou un TAP voit une copie du trafic ; un IPS doit être en coupure. Mal placé, Snort ne voit rien.
  • Snort est un IDS/IPS réseau open source (GPLv2), édité par Cisco Talos, version 3.12.2.0 en 2026.
  • IDS = détecter et alerter (passif, port SPAN/TAP) ; IPS = bloquer (inline, action drop).
  • Visez Snort 3 (multi-thread, config Lua) : de nombreuses versions anciennes sont EOL depuis janvier 2026.
  • L'image ciscotalos/snort3 permet de tester en deux minutes ; snort -T valide une config sans capturer.
  • Une règle suit action proto src -> dst (options) ; sid local > 1000000.
  • Les Community Rules sont gratuites ; les Subscriber payantes donnent la détection en temps réel.
  • TLS, faux positifs et placement (SPAN/TAP) sont les trois pièges majeurs.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn