đ Introduction
Ce document dĂ©crit la mise en place dâun conteneur Suricata sur un routeur VyOS afin dâanalyser le trafic rĂ©seau en mode IDS/IPS.
Lâobjectif est dâobtenir une inspection des paquets transitant Ă travers le routeur, tout en gardant une configuration persistante dans /config.
𧩠Architecture générale
- VyOS joue le rĂŽle de routeur principal.
- Suricata est déployé dans un conteneur Docker géré nativement par VyOS.
- La configuration et les rÚgles de Suricata sont stockées dans le répertoire persistant
/config. - Le trafic réseau est redirigé vers Suricata via iptables et NFQUEUE pour inspection.
ââââââââââââââââ
â Internet â
ââââââââŹââââââââ
â
ââââââââŽââââââââ
â VyOS â
â (routeur) â
â â
â ââââââââââââââ â
â â Suricata â â
â â (container)â â
â ââââââââââââââ â
ââââââââŹââââââââââ
â
Réseau local
âïž Configuration VyOS
Conteneur Suricata
set container name suricata allow-host-networks
set container name suricata arguments '-q 0 -q 1 -q 2 -q 3 --runmode workers'
set container name suricata capability 'net-admin'
set container name suricata capability 'sys-nice'
set container name suricata image 'jasonish/suricata:latest'
set container name suricata memory '6144'
set container name suricata volume config destination '/etc/suricata'
set container name suricata volume config source '/config/containers/suricata/etc'
set container name suricata volume logs destination '/var/log/suricata'
set container name suricata volume logs source '/var/log/suricata'
set container name suricata volume rules destination '/var/lib/suricata'
set container name suricata volume rules source '/config/containers/suricata/rules'
allow-host-networks : permet au conteneur d’accéder au réseau du routeur.
arguments : dĂ©finit les files NFQUEUE utilisĂ©es (-q 0 -q 1 -q 2 -q 3) et le mode de travail (–runmode workers).
capabilities : autorise les privilĂšges nĂ©cessaires pour lâanalyse rĂ©seau.
volumes : montent les répertoires persistants du systÚme VyOS dans le conteneur.
đŠ Organisation des fichiers
/config/
âââ containers/
â âââ suricata/
â âââ etc/ ← Configuration Suricata (suricata.yaml, classification.config, etc.)
â âââ rules/ ← Règles IDS (Emerging Threats, etc.)
âââ scripts/
â âââ suricata-update.sh ← Script de mise à jour des règles
â âââ vyos-preconfig-bootup.script ← Script iptables exécuté au boot
âââ ...
đ Redirection du trafic avec iptables
Le script /config/scripts/vyos-preconfig-bootup.script contient les rĂšgles suivantes :
# Marquer les paquets forwardés
iptables -t mangle -A FORWARD -j MARK --set-mark 10
# Rediriger vers Suricata via NFQUEUE
iptables -t mangle -A POSTROUTING -m mark --mark 10 -j NFQUEUE \
--queue-balance 0:3 \
--queue-cpu-fanout \
--queue-bypass
Explications : Tous les paquets transitant (FORWARD) sont marqués.
Les paquets marqués sont envoyés à Suricata via NFQUEUE.
–queue-balance 0:3 : rĂ©partit la charge sur 4 files de traitement.
–queue-bypass : laisse passer le trafic si Suricata nâest pas actif (pas de coupure rĂ©seau).
C’est brutal, mais tout va ĂȘtre analysĂ©.
đ§ Mode dâanalyse Suricata
Dans le fichier /config/containers/suricata/etc/suricata.yaml, le paramĂštre suivant doit ĂȘtre activĂ© :
host-mode: router
Cela indique que Suricata doit analyser le trafic forwardé (celui qui transite à travers le routeur iptables forward) et non le trafic local (iptables input/output)
đ Mise Ă jour automatique des rĂšgles
Une tùche planifiée VyOS gÚre la mise à jour quotidienne des rÚgles Suricata :
set system task-scheduler task update-suricata-rules executable path '/config/scripts/suricata-update.sh'
set system task-scheduler task update-suricata-rules interval '1d'
Le script /config/scripts/suricata-update.sh contient typiquement :
set -euo pipefail
LOGFILE="/var/log/suricata-update.log"
CONTAINER="suricata"
TAG="suricata-update"
# tableau des commandes suricata-update
COMMANDS=(
"suricata-update"
"suricata-update list-sources"
"suricata-update list-enabled-sources"
"suricata-update enable-source et/open"
"suricata-update enable-source oisf/trafficid"
"suricata-update -f"
)
# fonction log simple compatible root / non-root
log() {
local level="$1"; shift
local msg="$*"
logger -t "$TAG" -p "user.${level}" "$msg"
echo "$(date '+%F %T') - $msg" | sudo tee -a "$LOGFILE" >/dev/null
}
log info "=== Mise à jour des règles Suricata ==="
if ! sudo podman ps --format '{{.Names}}' | grep -qx "$CONTAINER"; then
log error "Erreur : conteneur '$CONTAINER' introuvable."
exit 1
fi
for CMD in "${COMMANDS[@]}"; do
log info "Exécution de '$CMD' dans le conteneur..."
if ! sudo podman exec --user suricata "$CONTAINER" $CMD 2>&1 | sudo tee -a "$LOGFILE"; then
log error "Échec de l'exécution de '$CMD'."
exit 2
fi
done
log info "Redémarrage du conteneur Suricata..."
if ! /opt/vyatta/bin/vyatta-op-cmd-wrapper restart container "$CONTAINER" 2>&1 | sudo tee -a "$LOGFILE"; then
log error "Erreur lors du redémarrage."
exit 3
fi
log info "Mise à jour terminée avec succès."
đĄ Synchronisation de la configuration Pour sauvegarder ou rĂ©cupĂ©rer la configuration VyOS (et donc Suricata), on peut utiliser rsync :
/usr/bin/rsync -avz --rsync-path="sudo rsync" jbsky@
<IP_VYOS>:/config/ ./vyos/config/
Cette méthode permet :
De récupérer la configuration complÚte du routeur.
De la versionner dans un dépÎt Git.
De la restaurer facilement sur une autre instance VyOS.
đ Points forts du setup â Conteneurisation propre et isolĂ©e â Configuration persistante dans /config â Inspection inline via NFQUEUE â Mise Ă jour automatique des rĂšgles â Sauvegarde facile par rsync
â ïž Points Ă surveiller Performance : NFQUEUE peut introduire une lĂ©gĂšre latence ; si besoin, envisager AF_PACKET. => franchement, je ne vois pas la diff, je plafonne Ă 1GB avec iperf3.
Sécurité : allow-host-networks expose le conteneur au réseau hÎte, à restreindre si possible. Mais dans ce cas, il faudrait une autre solution. :)
Logs : /var/log/suricata peut croĂźtre rapidement â penser Ă une rotation ou une purge automatique.
exemple de logrotate, fichier avec root en tant qu’owner
/var/log/suricata/*.log /var/log/suricata/*.json
{
daily
maxsize 100M
rotate 10
missingok
nocompress
copytruncate
}
Mise Ă jour du conteneur : vĂ©rifier rĂ©guliĂšrement la version de lâimage jasonish/suricata:latest.
đ§© RĂ©fĂ©rences utiles Documentation VyOS – Containers
Suricata Documentation
NFQUEUE & Suricata Inline Setup
đ Conclusion
Cette intégration permet à VyOS de fonctionner comme un routeur IDS/IPS complet grùce à Suricata, tout en gardant une architecture modulaire, persistante et automatisée. Le tout repose sur des composants standard (containers, iptables, rsync) faciles à maintenir et à reproduire.
đ RĂ©serve personnel
- suricata bloque les connexions inactives.
- J’ai augmentĂ© la RAM Ă 6Go pour Ă©viter un Ă©ventuel crash, vu que j’en ai eu un rĂ©cĂ©ment, je surveille. logrotate n’Ă©tait pas fontionnel, Ă voir si ça corrige.
- Je viens de doubler la rÚgle mark pour suivre que la carte ethernet wan, ça bloque toujours les connexions actives
iptables -t mangle -A FORWARD -j MARK --set-mark 10 -i wan.vlanX
iptables -t mangle -A FORWARD -j MARK --set-mark 10 -o wan.vlan