
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.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- 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.
Qu'est-ce que Snort ?
Section intitulée « Qu'est-ce que Snort ? »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é.
IDS ou IPS : détecter ou bloquer ?
Section intitulée « IDS ou IPS : détecter ou bloquer ? »La même brique se déploie de deux façons, et la distinction est fondamentale.
| IDS | IPS | |
|---|---|---|
| Rôle | détecte et alerte | détecte et bloque |
| Position | passif (copie du trafic) | inline (en coupure) |
| Raccordement | port SPAN / TAP | sur le flux réseau |
| Action de règle | alert | drop, 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.
Snort 2 ou Snort 3 ?
Section intitulée « Snort 2 ou Snort 3 ? »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.
Tester Snort en deux minutes avec Docker
Section intitulée « Tester Snort en deux minutes avec Docker »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.
-
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 bashdocker exec -it snort3 bash -
Vérifier la version installée :
Fenêtre de terminal snort -VLa sortie confirme le moteur et ses bibliothèques (extrait réel de l'image) :
,,_ -*> Snort++ <*-o" )~ Version 3.10.0.0Using DAQ version 3.0.23Using Hyperscan version 5.4.2Using libpcap version 1.10.5 (with TPACKET_V3) -
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 -
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 -TSnort charge la règle (
icmp ... total 1) et confirme :port rule countstcp udp icmp ipany 0 0 1 0Snort successfully validated the configuration (with 0 warnings).
Installer Snort 3 par compilation
Section intitulée « Installer Snort 3 par compilation »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).
-
Installer les dépendances de compilation :
Fenêtre de terminal sudo apt updatesudo 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 -
Compiler DAQ (Data Acquisition library), indispensable pour la capture :
Fenêtre de terminal git clone https://github.com/snort3/libdaq.gitcd libdaq./bootstrap && ./configure && makesudo make install && sudo ldconfigcd .. -
Télécharger et compiler Snort 3 :
Fenêtre de terminal SNORT_VERSION=3.12.2.0wget https://github.com/snort3/snort3/archive/refs/tags/${SNORT_VERSION}.tar.gztar -xzf ${SNORT_VERSION}.tar.gzcd snort3-${SNORT_VERSION}./configure_cmake.sh --prefix=/usr/local --enable-tcmalloccd build && make -j$(nproc)sudo make install && sudo ldconfig -
Vérifier l'installation :
Fenêtre de terminal snort -VLa commande affiche la version installée ainsi que les bibliothèques liées (DAQ, LuaJIT, OpenSSL, libpcap).
Préparer l'interface réseau
Section intitulée « Préparer l'interface réseau »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.
# Mode promiscuoussudo ip link set enp1s0 promisc on
# Desactiver GRO et LRO (sinon paquets > 1518 octets tronques)sudo ethtool -K enp1s0 gro off lro offVé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.
Configurer Snort
Section intitulée « Configurer Snort »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}Écrire une règle Snort
Section intitulée « Écrire une règle Snort »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),dropoureject(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 commecontentouflow.
Quel ruleset choisir ?
Section intitulée « Quel ruleset choisir ? »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.
| Ruleset | Accès | Délai des règles |
|---|---|---|
| Community | gratuit, sans compte | quotidien |
| Registered | gratuit avec compte (oinkcode) | 30 jours de décalage |
| Subscriber | payant | temps 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.
Lancer la détection et lire les alertes
Section intitulée « Lancer la détection et lire les alertes »Une fois la règle écrite, démarrez Snort en mode détection sur l'interface, avec un affichage d'alertes rapide :
sudo snort -c /usr/local/etc/snort/snort.lua \ -R /usr/local/etc/rules/local.rules \ -i enp1s0 -A alert_fast -s 65535 -k noneDepuis 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.92Chaque 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.
Snort ou Suricata ?
Section intitulée « Snort ou Suricata ? »Suricata est l'alternative la plus citée, et la comparaison est honnête plutôt que tranchée.
| Snort 3 | Suricata | |
|---|---|---|
| Multi-thread | oui (réécriture) | oui (dès l'origine) |
| Sortie | unified2 | EVE JSON |
| Règles Snort | natif | compatible (la plupart) |
| Atout | OpenAppID, Talos | inté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.
Pièges à connaître
Section intitulée « Pièges à connaître »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.
À retenir
Section intitulée « À retenir »- 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/snort3permet de tester en deux minutes ;snort -Tvalide une config sans capturer. - Une règle suit
action proto src -> dst (options);sidlocal > 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.
FAQ : questions fréquentes sur Snort
Section intitulée « FAQ : questions fréquentes sur Snort »Un IDS/IPS réseau open source
Snort est un IDS/IPS réseau (Network Intrusion Detection/Prevention System) open source, la référence du domaine.- Créé en 1998 par Martin Roesch (fondateur de Sourcefire).
- Édité par Cisco depuis le rachat de Sourcefire en 2013, maintenu par l'équipe Cisco Talos.
- Licence GPLv2, site officiel
snort.org.
Détecter ou bloquer
| IDS | IPS | |
|---|---|---|
| Rôle | détecte et alerte | détecte et bloque |
| Position | passif (copie du trafic) | inline (en coupure) |
| Raccordement | port SPAN / TAP | sur le flux |
| Action | alert |
drop, reject |
drop). Snort assure les deux selon son mode de déploiement et le DAQ utilisé.Snort 3 est la version recommandée
Snort 3 (« Snort++ ») est une réécriture complète par rapport à Snort 2 :- moteur multi-thread (Snort 2 est single-thread) ;
- configuration en Lua (
snort.lua) au lieu desnort.conf; - support hyperscan, architecture modulaire, OpenAppID.
Deux moteurs de détection réseau
| Snort 3 | Suricata | |
|---|---|---|
| Multi-thread | oui (réécriture) | oui (dès l'origine) |
| Sortie | unified2 | EVE JSON |
| Règles Snort | natif | compatible (la plupart) |
| Atout | OpenAppID, Talos | intégration SIEM |
Structure d'une règle
action protocole ip_src port_src -> ip_dst port_dst (options)
Exemple qui alerte sur tout accès HTTP :alert tcp any any -> any 80 (msg:"Acces HTTP"; sid:1000001; rev:1;)
- action :
alert(IDS),dropoureject(IPS) ; - protocole :
tcp,udp,icmp,ip; ->: sens du flux (source vers destination) ;- options entre parenthèses :
msg(libellé),sid(identifiant, > 1000000 pour vos règles locales),rev(révision),content,flow,classtype.
local.rules, incluses depuis snort.lua.Gratuit, seules certaines règles sont payantes
Snort est open source sous licence GPLv2 : le moteur est gratuit. La différence se joue sur les rulesets Talos :| Ruleset | Accès | Délai |
|---|---|---|
| Community | gratuit, sans compte | quotidien |
| Registered | gratuit avec compte (oinkcode) | 30 jours de décalage |
| Subscriber | payant | temps réel |