suricatasnortids
MDstable
NoteSnippetChecklistPlaybook
Suricata & Snort — IDS/IPS Configuration
Déploiement et configuration des IDS/IPS Suricata et Snort : règles, modes inline, alerting, intégration ELK
snippetintermediate 2026-05-30 4 min read
suricatasnortidsipsnidsdetectionnetwork
Suricata — Installation
bash
# Ubuntu/Debianadd-apt-repository ppaoisf/suricata-stableapt update && apt install -y suricata# Vérificationsuricata --versionsuricata-update # MAJ des règles Emerging Threats
Docker
yaml
# docker-compose.ymlservices:suricata:image: jasonish/suricata:latestnetwork_mode: hostcap_add:- NET_ADMIN- NET_RAW- SYS_NICEvolumes:- ./suricata.yaml:/etc/suricata/suricata.yaml- ./rules:/var/lib/suricata/rules- ./logs:/var/log/suricatacommand: -i eth0
Configuration suricata.yaml
yaml
# /etc/suricata/suricata.yaml# Réseau localvars:address-groups:HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"EXTERNAL_NET: "!$HOME_NET"port-groups:HTTP_PORTS: "80,8080,8443"SHELLCODE_PORTS: "!80"# Outputsoutputs:- eve-log:enabled: yesfiletype: regularfilename: eve.jsontypes:- alert- http- dns- tls- flow- ssh# Interfaceaf-packet:- interface: eth0cluster-id: 99cluster-type: cluster_flowdefrag: yes# Règlesrule-files:- suricata.rules- /var/lib/suricata/rules/emerging-threats.rules
Syntaxe des règles
Structure
action proto src_ip src_port direction dst_ip dst_port options
Exemples de règles
bash
# Détection scan nmap SYNalert tcp $EXTERNAL_NET any > $HOME_NET anymsg"SCAN nmap SYN Stealth"; flagsS12;thresholdtype thresholdtrack by_srccount 20seconds 1;sid1000001; rev1;# Détection SQLi basiquealert http $EXTERNAL_NET any > $HTTP_SERVERS $HTTP_PORTSmsg"SQL Injection attempt";content"' OR"; http_uri; nocase;sid1000002; rev1;# Détection shell inversealert tcp $HOME_NET any > $EXTERNAL_NET anymsg"Possible Reverse Shell - /bin/bash";content"/bin/bash";sid1000003; rev1;# Exfiltration DNS (requêtes longues suspectes)alert dns any any > any 53msg"DNS exfiltration - long subdomain";dnsquery; content".";byte_test1>500stringdec;sid1000004; rev1;# Détection Mimikatz via SMBalert smb any any > $HOME_NET anymsg"Possible Mimikatz - lsass dump via SMB";content"lsass"; nocase;sid1000005; rev1;
Options clés
| Option | Description |
|--------|-------------|
| msg | Message d'alerte |
| content | Correspondance chaîne |
| pcre | Regex Perl |
| threshold | Limitation alertes |
| sid | ID unique règle |
| rev | Révision |
| classtype | Catégorie (trojan-activity, etc.) |
| priority | 1 (haute) à 255 |
Mode IPS (inline)
bash
# Activer NFQueuesuricata -c /etc/suricata/suricata.yaml -q 0# iptables pour rediriger le traficiptables -I FORWARD -j NFQUEUE --queue-num 0iptables -I INPUT -j NFQUEUE --queue-num 0iptables -I OUTPUT -j NFQUEUE --queue-num 0# Dans suricata.yaml : mode = repeat (drop le trafic)nfqmode repeatrepeat-mark: 1repeat-mask: 1bypass-mark: 1bypass-mask: 1
Snort — Comparaison et config rapide
bash
# Installation Snort 3apt install -y snort3# Configuration /etc/snort/snort.luaHOME_NET "192.168.0.0/16"EXTERNAL_NET "!$HOME_NET"# Règle Snort 3alert tcp $EXTERNAL_NET any > $HOME_NET 22msg"SSH Brute Force";detection_filtertrack by_src count 5 seconds 60;sid2000001;# Lancementsnort -c /etc/snort/snort.lua -i eth0 -A alert_fast
Suricata vs Snort
| | Suricata | Snort 3 | |---|---|---| | Multi-thread | Oui (natif) | Oui (v3) | | Protocoles | HTTP2, TLS, QUIC | HTTP, TLS | | Output | EVE JSON | Unified2, JSON | | Performance | Très haute | Haute | | Règles | ET + Snort compat | Snort native | | IPS inline | NFQueue, AF_PACKET | NFQueue |
Intégration ELK (EVE JSON → Elasticsearch)
yaml
# Filebeat module suricatafilebeat.modules:- module: suricataeve:enabled: truevar.paths: ["/var/log/suricata/eve.json"]output.elasticsearch:hosts: ["localhost:9200"]index: "suricata-%{+yyyy.MM.dd}"
Dashboards Kibana
bash
# Importer dashboards Suricatafilebeat setup --dashboards# Index pattern : suricata-*# Champs clés : alert.signature, src_ip, dest_ip, proto
Mise à jour des règles
bash
# suricata-update (Emerging Threats)suricata-update list-sourcessuricata-update enable-source et/opensuricata-update# Cron quotidien0 3 /usr/bin/suricata-update && systemctl reload suricata
OPS·BRAIN v1.08 notes · Monitoringlocal