UTMStack v11.2.8 Community Edition — Procédures de déploiement pour lab PME Suisse. Installation VMware, Suricata, CrowdSec, SOAR, OPNsense.
⚠️ Breaking change 26.1 : L’interface OPNsense est maintenant sur le port 8081 via lighttpd. nginx WAF tourne sur 80/443.
Bookmarker : https://<IP-OPNsense>:8081
| Accès | URL |
|---|---|
| Interface principale | https://10.100.1.254:8081 |
| Ancien port (bloqué par WAF) | http://10.100.1.254 → ❌ |
⚠️ Breaking change 26.1 : Les clés statiques TLS sont dissociées des instances lors de la migration.
Action requise après chaque mise à jour majeure :
None)None → sélectionnez la clé → Save → ApplySymptôme si oublié :
TLS Error: TLS key negotiation failed to occur within 60 seconds
TLS handshake failed
Après migration, le tunnel peut rester actif (ancienne session TLS en mémoire) mais la renégociation périodique (défaut : toutes les 3600 secondes) échoue silencieusement. Le tunnel tombe au prochain reboot ou expiration de session.
Symptôme :
TLS key negotiation failed to occur within 60 seconds
TLS handshake failed
Les erreurs apparaissent toutes les ~60 secondes dans les logs OPNsense alors que le tunnel semble actif.
Fix — désactiver la renégociation (site-to-site uniquement) :
Sur le serveur → VPN → OpenVPN → Instances → éditer → Renegotiate time → 0 → Save → Apply
Sur le client → même procédure → Durée de renégociation → 0 → Sauvegarder → Apply
ℹ️ Mettre
0des deux côtés est obligatoire — un seul côté ne suffit pas. La renégociation est utile pour les clients nomades mais inutile sur un lien site-to-site permanent.
# Suricata tourne ?
ps aux | grep suricata | grep -v grep
# Interface(s) monitorées
grep -A5 "netmap:" /usr/local/etc/suricata/suricata.yaml
⚠️ Breaking change 26.1 : Le fichier
custom.yamln’est plus supporté. Migrez vers/usr/local/etc/suricata/conf.d/.
# Vérifier les règles custom
cat /usr/local/etc/suricata/rules/custom.rules
Vérifier les connexions TCP :
netstat -an | grep "10.100.1.16"
Résultat attendu :
tcp4 0 0 10.100.1.254.xxxxx 10.100.1.16.7014 ESTABLISHED ← CrowdSec
tcp4 0 0 10.100.1.254.xxxxx 10.100.1.16.7019 ESTABLISHED ← Suricata
Si les connexions sont absentes :
service syslog-ng restart
sleep 15
netstat -an | grep "10.100.1.16"
Vérifier le hook de démarrage :
cat /usr/local/etc/rc.syshook.d/start/99-syslog-ng-restart
Contenu attendu :
#!/bin/sh
sleep 60
/usr/sbin/service syslog-ng restart
service suricata_syslog status # Forwarding EVE JSON → port 7019
service crowdsec_to_syslog status # Forwarding décisions CrowdSec → port 7014
service crowdsec status # CrowdSec engine
Si un service ne démarre pas :
cat /etc/rc.conf.local
# Contenu attendu : crowdsec_to_syslog_enable="YES"
Test pipeline Suricata :
logger -p local5.info -t suricata '{"event_type":"test","timestamp":"now"}'
# Vérifier dans UTMStack Log Explorer : dataType=suricata
Test pipeline CrowdSec :
logger -p local5.alert -t crowdsec 'CROWDSEC_BAN {"event_type":"ban","ip":"1.2.3.4","reason":"test","country":"CH","as":"AS0","type":"ban"}'
# Vérifier dans UTMStack Log Explorer : raw CONTAINS CROWDSEC_BAN
Test CrowdSec décisions :
/usr/local/bin/cscli decisions list
ℹ️ Testé sur OPNsense 26.1 après migration depuis 25.7.11