Tuxvador's Blog
Présentation de WorkItOut — Trouve ton partenaire de sport Rapports quotidiens automatisés CrowdSec par e-mail Gestion programmatique du DNS avec l'API IONOS Premiers pas avec Proxmox VE pour votre laboratoire maison Mon Homelab Proxmox VE : Aperçu de l'infrastructure
EN

Surveiller votre Homelab avec Grafana, Loki et CrowdSec


Si vous gérez plusieurs conteneurs, vous avez besoin d’observabilité. Quand quelque chose casse — ou quand quelqu’un sonde vos services — vous voulez le savoir avant que cela ne devienne un problème.

Ma pile de surveillance combine trois outils :

  • Loki pour l’agrégation de journaux
  • Grafana pour les tableaux de bord et les alertes
  • CrowdSec pour la détection d’intrusion et les menaces issues du crowd-sourcing

Architecture

Conteneur A ──→ Promtail ──→ Loki ──→ Grafana
Conteneur B ──→ Promtail ──→   ↑        ↑
Conteneur C ──→ rsyslog  ──→   └── CrowdSec (LAPI)

                                  bouncer (nginx)

                                  Bloquer IP malveillantes

Chaque conteneur envoie ses journaux via Promtail à Loki. CrowdSec analyse les journaux pour détecter des motifs d’attaque, partage des données anonymisées avec la communauté, et bloque les contrevenants récidivistes via un bouncer sur le proxy inverse.

Loki + Promtail

Loki est un système d’agrégation de journaux horizontalement scalable de Grafana Labs. Contrairement à Elasticsearch, il n’indexe pas le contenu des journaux — seulement les métadonnées (étiquettes), ce qui le rend beaucoup moins coûteux à exécuter.

Installation de Loki

Sur un conteneur dédié :

wget https://github.com/grafana/loki/releases/latest/download/loki-linux-amd64.deb
dpkg -i loki-linux-amd64.deb

Configuration de base (/etc/loki/config.yml) :

auth_enabled: false
server:
  http_listen_port: 3100
ingester:
  lifecycler:
    ring:
      kvstore:
        store: inmemory
  chunk_idle_period: 5m
schema_config:
  configs:
    - from: 2024-01-01
      store: boltdb-shipper
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 24h

Promtail sur Chaque Conteneur

Promtail récupère les fichiers journaux et les pousse vers Loki. Configuration (/etc/promtail/config.yml) :

clients:
  - url: http://mon-srv:3100/loki/api/v1/push
scrape_configs:
  - job_name: syslog
    static_configs:
      - targets: [localhost]
        labels:
          job: syslog
          __path__: /var/log/syslog

Grafana

Grafana se connecte à Loki comme source de données et vous permet de construire des tableaux de bord. J’en ai trois :

  1. Aperçu Système — CPU, mémoire, disque sur tous les conteneurs
  2. Événements de Sécurité — Alertes CrowdSec, tentatives de connexion SSH échouées, taux HTTP 4xx/5xx
  3. Santé des Services — Uptime, temps de réponse, expiration des certificats

Règles d’Alerte

Grafana peut alerter via email, Slack ou webhook. J’ai des règles pour :

  • Les tentatives de brute force SSH dépassent un seuil
  • Certificat renouvelé dans les 7 jours
  • Conteneur arrêté depuis plus de 5 minutes
  • Utilisation disque au-dessus de 85 %

CrowdSec

CrowdSec est un IPS moderne, piloté par la communauté. Il détecte les attaques en analysant les journaux, puis bloque l’IP incriminée via un bouncer.

La configuration se compose de :

  • LAPI (Local API) : Le service central qui traite les alertes et sert les décisions
  • Scénarios : Règles de détection d’attaques (brute force SSH, scan HTTP, scan de ports)
  • Bouncers : Composants qui bloquent effectivement les IP (iptables, NGINX, nftables)

Après l’installation, CrowdSec commence immédiatement à apprendre vos schémas de trafic :

cscli alerts list
cscli decisions list
cscli metrics

La liste noire communautaire est ce qui rend CrowdSec puissant — quand quelqu’un attaque un utilisateur de CrowdSec, chaque autre utilisateur bénéficie de cette intelligence.

Tout Assembler

Mon conteneur de surveillance (mon-srv) exécute les trois services en utilisant environ 256 Mo de RAM au total. Les instances Promtail sur chaque conteneur ajoutent une surcharge négligeable — environ 10 Mo chacune.

Pour un homelab avec 10 à 15 conteneurs, cette pile est plus que suffisante et entièrement gratuite. En production, vous ajouteriez des répartiteurs de charge, de la réplication et des politiques de rétention, mais pour un laboratoire, cela fonctionne parfaitement dès la sortie de la boîte.