Skip to content

Instantly share code, notes, and snippets.

@diyfr
Created December 24, 2025 14:02
Show Gist options
  • Select an option

  • Save diyfr/68766938783557591c5e200341c8129e to your computer and use it in GitHub Desktop.

Select an option

Save diyfr/68766938783557591c5e200341c8129e to your computer and use it in GitHub Desktop.
CROWDSEC + VictoriaMetrics + Grafana [DRAFT]

CROWDSEC + VictoriaMetrics + Grafana [DRAFT]

Prérequis:

ufw doit être installé et configuré, par défaut, autorisez les ports 80,443 + votre port SSH et bloquez tous les autres (sauf ceux que vous souhaitez exposer sur internet)

Rendre accessible les logs de traefik

Exemple charts values

spec:
  valuesContent: |-
    deployment:
      additionalVolumes:
      - name: traefik-logs-pvc
        persistentVolumeClaim:
          claimName: traefik-logs-pvc
    additionalVolumeMounts:
      - name: traefik-logs-pvc
        mountPath: /var/log/traefik		  

Pour le reste de l'installation, considérons que les logs de traefik sont accessibles maintenant sur le host dans /srv/vol/traefik-logs
Assurez-vous que traefik a bien les droits pour écrire au besoin ajustez au besoin avec cette commande

sudo chown -R 65532:65532 /srv/vol/traefik-logs

Bonus : Logrotate 😊 contenu à copier dans /etc/logrotate.d/traefik

/srv/vol/traefik-logs/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 644 traefikuser traefik
    sharedscripts
    postrotate
        POD=$(kubectl -n kube-system get pods -l app.kubernetes.io/name=traefik -o jsonpath='{.items[0].metadata.name}')
        kubectl -n kube-system exec "$POD" -- pkill -HUP traefik || echo "Impossible d'envoyer HUP à Traefik"
    endscript
}

Installer crowdsec.

Ref : https://docs.crowdsec.net/u/getting_started/installation/linux Ajouter la clé

curl -fsSL https://packagecloud.io/crowdsec/crowdsec/gpgkey | gpg --dearmor > /etc/apt/keyrings/crowdsec_crowdsec-archive-keyring.gpg

Ajouter le repo

nano /etc/apt/sources.list.d/crowdsec_crowdsec.list
deb [signed-by=/etc/apt/keyrings/crowdsec_crowdsec-archive-keyring.gpg] https://packagecloud.io/crowdsec/crowdsec/any any main
deb-src [signed-by=/etc/apt/keyrings/crowdsec_crowdsec-archive-keyring.gpg] https://packagecloud.io/crowdsec/crowdsec/any any main

On mets à jour et on vérifie la dispo de la dernière version

apt update
apt list crowdsec

Installation + bouncer (iptables en lien avec ufw)

apt install crowdsec crowdsec-firewall-bouncer-iptables

Auto completion

sudo cscli completion bash > /etc/bash_completion.d/cscli
source /etc/bash_completion
systemctl status crowdsec

Les commandes usuelles

cscli collections list
cscli parsers list
cscli scenarios list
cscli bouncers list

Autres ressources

Modifier le range IP d'écoute prometheus dans /etc/crowdsec/config.yaml 127.0.0.1 -> 0.0.0.0 (Sera protégé par firewall éventuellement autorisez votre cluster à accéder au prometheus de crowdsec ufw allow from 10.43.0.0/16 to any port 6060 comment "crowdsec")

Configurer crowdsec pour lire les logs traefik

Ajouter dans /etc/crowdsec/acquis.d/setup.traefik.yaml

filenames:
 - /srv/vol/traefik-logs/access.log
labels:
 type: traefik
source: file

Installer Victoria Metrics

TODO: Voir repo Victoria Metrics
Compatible avec les Jobs et api prometheus (entre autres) . Dispose aussi d'une API permettant de consommer des metriques. Indispensable dans notre cas d'usage pour consommer les push HTTP de crowdsec

Exposer Victoria Metrics sur le host

TODO

Récupérer les décisions via Victoria Metrics

Source https://freefd.github.io/articles/8_cyber_threat_insights_with_crowdsec_victoriametrics_and_grafana/

editez le fichier /etc/crowdsec/notifications/http.yaml en remplaçant sub.domain.tld par le dns de votre server Victoria Metrics (Nota : sur un cluster, pas de DNS local accessible depuis le host, un dns public est nécessaire)

type: http
name: http_default
log_level: info
format: >
  {{- range $Alert := . -}}
  {{- range .Decisions -}}
  {"metric":{"__name__":"cs_lapi_decision","instance":"[YOUR INSTANCE NAME]","country":"{{$Alert.Source.Cn}}","asname":"{{$Alert.Source.AsName}}","asnumber":"{{$Alert.Source.AsNumber}}","latitude":"{{$Alert.Source.Latitude}}","longitude":"{{$Alert.Source.Longitude}}","iprange":"{{$Alert.Source.Range}}","scenario":"{{.Scenario}}","type":"{{.Type}}","duration":"{{.Duration}}","scope":"{{.Scope}}","ip":"{{.Value}}"},"values": [1],"timestamps":[{{now|unixEpoch}}000]}
  {{- end }}
  {{- end -}}
url: http://sub.domain.tld:8428/api/v1/import
method: POST
headers:
  Content-Type: application/json

Facultatif Aller sur https://app.crowdsec.net/ Et faire l'enrôlement suivre la méthodo et redémarrer crowdsec

Ressources :
https://blog.stephane-robert.info/docs/securiser/reseaux/crowdsec/ Voir les modif dans config.yaml pour prometheus, dans profiles.yaml et dans notifications/http.yaml pour les notifications

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment