Introduction
Suricata est le successeur moderne de Snort : engine multi-thread, deep packet inspection, support TLS/HTTP/SSH/DNS/SMB, capable d'inspecter 10 Gbps avec le hardware adequat.
Trois modes possibles :
- IDS : inspecte et logge les alertes (passif)
- IPS : inspecte et bloque les paquets malveillants (actif, inline)
- NSM : enregistre le trafic pour analyse forensique
Regles incluses : Emerging Threats (gratuit), Talos (gratuit avec snort.org), Proofpoint (commercial).
Prerequis
- VPS Debian / Ubuntu
- 2 vCPU minimum, 4+ recommande
- 4 Go RAM
- Acces root
- Interface reseau primaire identifiee (eth0, ens3, etc.)
Etape 1 : Installation
sudo add-apt-repository ppa:oisf/suricata-stable
sudo apt update
sudo apt install -y suricata
Verifiez :
sudo suricata --build-info
Etape 2 : Configuration de base
Identifiez votre interface :
ip a
Editez /etc/suricata/suricata.yaml :
af-packet:
- interface: ens3 # adaptez
cluster-id: 99
cluster-type: cluster_flow
defrag: yes
use-mmap: yes
Definissez vos reseaux internes :
vars:
address-groups:
HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"
EXTERNAL_NET: "!$HOME_NET"
Etape 3 : Telecharger les regles ET
sudo suricata-update
Telecharge les regles Emerging Threats Open. Pour activer plus de sources :
sudo suricata-update list-sources
sudo suricata-update enable-source et/open
sudo suricata-update enable-source oisf/trafficid
sudo suricata-update enable-source ptresearch/attackdetection
sudo suricata-update
Etape 4 : Demarrer Suricata
sudo systemctl enable --now suricata
sudo systemctl status suricata
Verifiez les logs :
sudo tail -f /var/log/suricata/suricata.log
Cherchez engine started qui confirme le bon demarrage.
Etape 5 : Voir les alertes
Les alertes sont loggees dans /var/log/suricata/eve.json (format JSON).
sudo tail -f /var/log/suricata/fast.log
Format fast.log :
05/16/2026-14:32:01.123456 [**] [1:2008581:11] ET SCAN Nmap Scripting Engine [**] [Classification: Web Application Attack] [Priority: 1] {TCP} 1.2.3.4:54321 -> 5.6.7.8:80
Test : depuis une autre machine, lancez un nmap sur votre serveur :
nmap -sS -O votre-vps.fr
Verifiez :
sudo grep nmap /var/log/suricata/fast.log
Etape 6 : Parser eve.json
sudo apt install -y jq
sudo tail -n 100 /var/log/suricata/eve.json | jq 'select(.event_type=="alert")'
Compter les alertes par signature :
sudo cat /var/log/suricata/eve.json | jq -r 'select(.event_type=="alert") | .alert.signature' | sort | uniq -c | sort -rn | head
Top des IPs sources d'alertes :
sudo cat /var/log/suricata/eve.json | jq -r 'select(.event_type=="alert") | .src_ip' | sort | uniq -c | sort -rn | head
Etape 7 : Mode IPS (bloquant)
Passer en mode bloquant requiert nftables / iptables et un peu de patience.
Avec nftables
sudo apt install -y nftables
sudo nano /etc/nftables.conf
table inet filter {
chain forward {
type filter hook forward priority 0;
queue num 0
}
}
sudo systemctl enable --now nftables
Suricata en mode nfqueue
/etc/default/suricata :
RUN=yes
LISTENMODE=nfqueue
sudo systemctl restart suricata
Suricata recevra maintenant les paquets via nfqueue. Quand une regle a action drop, le paquet est bloque.
Etape 8 : Ecrire une regle custom
Format : action proto src dst (options)
sudo nano /etc/suricata/rules/local.rules
Bloquer un user-agent connu :
drop http any any -> any any (msg:"Bloque sqlmap"; content:"sqlmap"; http_user_agent; sid:1000001;)
Detecter une tentative de connexion sur un port unusual :
alert tcp any any -> $HOME_NET 31337 (msg:"Port 31337 (backdoor classique)"; sid:1000002;)
Activez la regle dans suricata.yaml :
rule-files:
- suricata.rules
- local.rules
sudo systemctl restart suricata
Etape 9 : Detection TLS / chiffrement
Suricata extrait les metadonnees TLS meme sur HTTPS :
alert tls any any -> any any (msg:"TLS auto-signe detecte"; tls.subject; content:"CN=self"; sid:1000003;)
Identifier les SNI (Server Name Indication) des connexions HTTPS, meme si vous ne dechiffrez pas :
sudo cat /var/log/suricata/eve.json | jq -r 'select(.event_type=="tls") | .tls.sni' | sort -u | head
Utile pour : detecter du C2 (command and control), du DNS over HTTPS suspect, du Tor.
Etape 10 : Performance
Suricata est multi-thread. Sur 4 cores :
threading:
cpu-affinity:
- management-cpu-set:
cpu: [ 0 ]
- receive-cpu-set:
cpu: [ 0 ]
- worker-cpu-set:
cpu: [ "1-3" ]
mode: "exclusive"
prio:
default: "high"
Mettez Suricata sur des cores dedies via cpu-affinity.
Activez l'offload kernel :
af-packet:
- interface: ens3
ring-size: 32768
block-size: 32768
Etape 11 : Visualisation
Pour explorer vos alertes facilement, integrez Suricata avec :
- ELK (Elasticsearch + Kibana) via Filebeat
- Grafana + Loki
- Wazuh (Suricata est nativement supporte)
- SELKS (distribution all-in-one Suricata + ELK + dashboards)
Pour un demarrage rapide, telechargez SELKS : https://www.stamus-networks.com/selks
Etape 12 : Tuner les faux positifs
Identifier les regles bruyantes :
sudo cat /var/log/suricata/eve.json | jq -r 'select(.event_type=="alert") | .alert.signature_id' | sort | uniq -c | sort -rn | head
Desactiver une regle precise :
echo "2008581" | sudo tee -a /etc/suricata/disable.conf
sudo suricata-update
sudo systemctl restart suricata
Depannage
Suricata ne demarre pas
sudo suricata -T -c /etc/suricata/suricata.yaml
Affiche les erreurs de syntaxe yaml ou de regles.
Aucune alerte (test nmap pourtant lance)
Verifiez l'interface :
sudo suricata --list-runmodes
sudo grep interface /etc/suricata/suricata.yaml
Verifiez que les paquets passent bien par cette interface :
sudo tcpdump -i ens3 host 8.8.8.8 -c 5
Performance basse / paquets dropped
sudo suricatasc -c "iface-stat ens3"
Si beaucoup de drops : augmentez ring-size, ajoutez des workers, ou montez en gamme.
"rule-files: file does not exist"
sudo suricata-update
Les regles ne sont pas telechargees.
Commandes utiles
# Status
sudo systemctl status suricata
# Voir les regles actives
sudo suricata --dump-rules-info
# Reload regles sans restart
sudo suricatasc -c reload-rules
# Stats temps reel
sudo suricatasc -c "dump-counters"
# Tester un fichier pcap
sudo suricata -r capture.pcap -l /tmp/out
# Logs principaux
sudo tail -f /var/log/suricata/suricata.log
sudo tail -f /var/log/suricata/fast.log
sudo tail -f /var/log/suricata/eve.json | jq
# Update regles
sudo suricata-update && sudo systemctl restart suricata
Conclusion
Suricata vous donne :
- Detection / blocage des attaques reseau connues
- Visibilite TLS, DNS, HTTP, SMB
- Compatible avec les ecosystemes SIEM standards
- Performance multi-gigabit avec le bon tuning
Pour aller plus loin :
- Combinez avec Zeek (anciennement Bro) pour la visibilite reseau
- Integrez avec Wazuh comme source d'evenements
- Utilisez SELKS pour une stack pretes a l'emploi
Ressources
- Documentation officielle : https://docs.suricata.io
- Source : https://github.com/OISF/suricata
- Regles Emerging Threats : https://rules.emergingthreats.net
- SELKS : https://www.stamus-networks.com/selks


















