UTMStack v11.2.8 Community Edition — Procédures de déploiement pour lab PME Suisse. Installation VMware, Suricata, CrowdSec, SOAR, OPNsense.
L’intégration native Suricata (port 7019) crée l’index v11-log-suricata-* avec les champs parsés automatiquement par UTMStack :
| Champ | Contenu | Exemple |
|---|---|---|
log.eventType |
Type d’événement EVE | alert, http, anomaly, dns |
log.alert.signature |
Nom de la règle Suricata | ET SCAN Zmap User-Agent |
log.alert.severity |
Sévérité (1=High, 3=Low) | 1 |
log.alert.category |
Catégorie de l’alerte | Network Scan |
origin.ip |
IP source de l’attaque | 40.124.175.174 |
origin.geolocation.country |
Pays d’origine | United States |
origin.geolocation.city |
Ville | Des Moines |
origin.geolocation.countryCode |
Code ISO pays | US |
origin.geolocation.latitude |
Latitude | 41.6021 |
origin.geolocation.longitude |
Longitude | -93.6124 |
target.ip |
IP cible | 10.100.1.254 |
ℹ️ La géolocalisation est enrichie automatiquement par UTMStack — aucune configuration supplémentaire nécessaire.
New Visualization → Metric
v11-log-suricata-*log.eventType.keyword is alertCountTotal Alertes SuricataSuricata - Total AlertesNew Visualization → Bar horizontal
v11-log-suricata-*Termslog.eventType.keyword10Suricata - Types d'événementsTypes attendus : alert, http, anomaly, dns, flow
New Visualization → Bar horizontal
v11-log-suricata-*log.eventType.keyword is alertTermslog.alert.signature.keyword10Suricata - Top SignaturesNew Visualization → Table
v11-log-suricata-*log.eventType.keyword is alertTermslog.alert.signature.keyword100Suricata - Top Signatures TableNew Visualization → Line
v11-log-suricata-*log.eventType.keyword is alertDate Histogram@timestampHourSuricata - Timeline AlertesNew Visualization → Bar horizontal
v11-log-suricata-*log.eventType.keyword is alertTermsorigin.ip.keyword10Suricata - Top Source IPsNew Visualization → Bar horizontal
v11-log-suricata-*log.eventType.keyword is alertTermsorigin.geolocation.country.keyword10Suricata - Top Paysℹ️ La visualisation Region map (carte monde) n’est pas fonctionnelle dans UTMStack v11.2.8 — utiliser le Bar horizontal pays à la place.
ℹ️ Ce widget utilise
origin.geolocation.country.keyword(nom complet : “United States”) pour le Dashboard Suricata. Le widget “Top Pays — Alertes Suricata” dans le Dashboard CrowdSec utiliseorigin.geolocation.countryCode.keyword(code ISO : “US”) pour une meilleure lisibilité côte à côte avec les bans CrowdSec.
Dashboards → New Dashboard → Add Visualization — ajouter les 7 visualisations :
[ Suricata - Total Alertes ] [ Suricata - Types d'événements ]
[ Suricata - Top Signatures ] [ Suricata - Timeline Alertes ]
[ Suricata - Top Signatures Table ]
[ Suricata - Top Source IPs ] [ Suricata - Top Pays ]
Save dashboard → Dashboard Suricata
Les décisions CrowdSec arrivent dans l’index v11-log-syslog-*. Les données sont filtrées par la présence de CROWDSEC_BAN dans le champ raw.
Format d’un événement dans raw (format JSON depuis la mise à jour de soar_ban.sh) :
<169>May 28 18:16:31 ms.bsculier.ch crowdsec[33276]: CROWDSEC_BAN {"event_type":"ban","ip":"45.67.246.120","reason":"utmstack","country":"ES","as":"214678","type":"ban"}
crowdsec_country — Ingest pipeline OpenSearchLe champ country dans le JSON est extrait automatiquement par un ingest pipeline OpenSearch et indexé comme champ structuré crowdsec_country :
# Création de l'ingest pipeline (à effectuer une seule fois)
docker exec $(docker ps -q -f name=utmstack_node1) curl -sk \
-u 'admin:<password>' \
-X PUT "https://localhost:9200/_ingest/pipeline/crowdsec-country" \
-H "Content-Type: application/json" \
-d '{
"description": "Extract country from CROWDSEC_BAN syslog",
"processors": [
{
"script": {
"lang": "painless",
"source": "if (ctx.raw != null && ctx.raw.contains(\"CROWDSEC_BAN\")) { def m = /country[=:\\\"]([A-Z]{2})/.matcher(ctx.raw); if (m.find()) { ctx.crowdsec_country = m.group(1); } }"
}
}
]
}'
# Application du pipeline à l'index du jour courant (remplacer la date)
docker exec $(docker ps -q -f name=utmstack_node1) curl -sk \
-u 'admin:<password>' \
-X PUT "https://localhost:9200/v11-log-syslog-$(date +%Y-%m-%d)/_settings" \
-H "Content-Type: application/json" \
-d '{"index.default_pipeline": "crowdsec-country"}'
# Template pour tous les futurs index v11-log-syslog-* (automatique dès le lendemain)
docker exec $(docker ps -q -f name=utmstack_node1) curl -sk \
-u 'admin:<password>' \
-X PUT "https://localhost:9200/_index_template/utmstack-syslog-crowdsec" \
-H "Content-Type: application/json" \
-d '{
"index_patterns": ["v11-log-syslog-*"],
"priority": 1,
"template": {
"settings": {
"index.default_pipeline": "crowdsec-country"
}
}
}'
ℹ️ Le pipeline s’applique automatiquement aux nouveaux index
v11-log-syslog-*via le template OpenSearch. Vérification :curl ... "https://localhost:9200/v11-log-syslog-$(date +%Y-%m-%d)/_settings" | grep pipeline
| Champ | Contenu | Exemple |
|---|---|---|
raw |
Message syslog brut complet | CROWDSEC_BAN {"event_type":"ban","ip":"45.67.246.120",...} |
crowdsec_country |
Code ISO pays extrait par le pipeline | ES, US, MX |
New Visualization → Metric
v11-log-syslog-*raw contains CROWDSEC_BANCountBans CrowdSecCrowdSec - Total BansNew Visualization → Line
v11-log-syslog-*raw contains CROWDSEC_BANDate Histogram@timestampHourCrowdSec - Timeline BansNew Visualization → Table
v11-log-syslog-*raw contains CROWDSEC_BANTermsraw.keyword50CrowdSec - Derniers BansNew Visualization → Bar horizontal
v11-log-syslog-*raw contain CROWDSEC_BANTermscrowdsec_country.keyword10Top Pays — Bans CrowdSecℹ️ Nécessite l’ingest pipeline
crowdsec-countryactif (voir section précédente). Le champcrowdsec_countryn’est indexé que sur les événements arrivés après la mise en place du pipeline.
New Visualization → Bar horizontal
v11-log-suricata-*log.eventType contain alertTermsorigin.geolocation.countryCode.keyword10Top Pays — Alertes Suricataℹ️ Ce widget est placé dans le Dashboard CrowdSec pour avoir une vue consolidée des menaces géographiques — bans vs alertes côte à côte.
Dashboards → New Dashboard → Add Visualization :
[ CrowdSec - Total Bans ]
[ CrowdSec - Timeline Bans ]
[ CrowdSec - Derniers Bans ]
[ Top Pays — Bans CrowdSec ] [ Top Pays — Alertes Suricata ]
Save dashboard → Dashboard CrowdSec
Test Suricata :
logger -p local5.info -t suricata '{"event_type":"alert","timestamp":"now","src_ip":"1.2.3.4","alert":{"signature":"TEST RULE","severity":1}}'
Test 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"}'
Les événements apparaissent dans les dashboards dans les 30 secondes.
ℹ️ Testé sur UTMStack v11.2.8, OpenSearch 2.x intégré
| ← Intégration CrowdSec | → SOAR & Incident Response |