Suricata est un IDS/IPS open source capable d'analyser le trafic réseau en temps réel pour détecter et bloquer les menaces. Guide complet d'installation et configuration.
Installation
# Debian/Ubuntu
apt install suricata
# RHEL/Rocky
dnf install epel-release
dnf install suricata
# Configuration interface
sed -i 's/interface: eth0/interface: ens18/' /etc/suricata/suricata.yaml
Configuration de base
# /etc/suricata/suricata.yaml
vars:
address-groups:
HOME_NET: '[192.168.1.0/24]'
EXTERNAL_NET: '!$HOME_NET'
af-packet:
- interface: ens18
threads: 4
cluster-type: cluster_flow
outputs:
- fast:
enabled: yes
filename: fast.log
- eve-log:
enabled: yes
filetype: regular
filename: eve.json
types:
- alert
- http
- dns
- tls
Gestion des règles
# Installer suricata-update
pip3 install suricata-update
# Mettre à jour les règles Emerging Threats
suricata-update
# Lister les sources disponibles
suricata-update list-sources
# Ajouter ET/PRO (gratuit sur inscription)
suricata-update enable-source et/pro
suricata-update update-sources
# Recharger Suricata
suricatasc -c reload-rules
Règles personnalisées
# /etc/suricata/rules/local.rules
# Détecter scan de ports
alert tcp any any -> $HOME_NET any (msg:"Port Scan Detected"; \
flags:S; threshold:type threshold, track by_src, count 20, seconds 60; \
sid:1000001; rev:1;)
# Bloquer requêtes vers domaine malveillant
drop dns any any -> any any (msg:"Malicious Domain"; \
dns_query; content:"evil.com"; nocase; sid:1000002; rev:1;)
# Détecter injection SQL
alert http any any -> $HOME_NET any (msg:"SQL Injection Attempt"; \
flow:established,to_server; content:"union"; nocase; \
content:"select"; nocase; distance:0; sid:1000003; rev:1;)
Mode IPS (inline blocking)
# Configuration NFQueue
iptables -I INPUT -j NFQUEUE
iptables -I OUTPUT -j NFQUEUE
# suricata.yaml
nfq:
mode: accept
repeat-mark: 1
repeat-mask: 1
route-queue: 2
batchcount: 20
# Démarrer en mode IPS
suricata -c /etc/suricata/suricata.yaml -q 0
Intégration ELK
# filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/suricata/eve.json
json.keys_under_root: true
output.elasticsearch:
hosts: ['localhost:9200']
index: 'suricata-%{+yyyy.MM.dd}'
Tuning performance
# Multi-threading
threading:
set-cpu-affinity: yes
cpu-affinity:
- management-cpu-set:
cpu: [0]
- receive-cpu-set:
cpu: [1, 2]
- worker-cpu-set:
cpu: [3, 4, 5, 6]
# Buffer sizes
stream:
memcap: 256mb
checksum-validation: yes
# Défragmentation
defrag:
memcap: 512mb
hash-size: 65536
Conclusion
Suricata offre une détection réseau avancée en temps réel. Combinez-la avec CrowdSec pour l'IPS collaboratif, ModSecurity pour le WAF applicatif, ou Wazuh pour la centralisation SIEM. Utilisez les logs iptables/nftables en NFQUEUE pour un blocking kernel-level performant.


