Blog & Astuces

Monitorer son serveur avec Grafana et Prometheus - Monitorer fail2ban

Monitorer son serveur avec Grafana et Prometheus - Monitorer fail2ban

Tuto

Dans ce tutoriel, je vais présenter comment monitorer fail2ban avec Grafana et Prometheus.

Pré-requis

  • Un serveur Linux
  • Avoir installé et paramétré fail2ban sur son serveur
  • Avoir installé Docker, Grafana et Prometheus sur le serveur. Vous pouvez vous reporter sur mon précédent tutoriel pour voir comment installer Grafana avec Docker. J'expliquerai après comment installer Prometheus avec Docker.

Introduction

Fail2ban est une solution de sécurité permettant d'identifier les comportements suspects à partir de logs. Il permet de bannir automatiquement une adresse IP lorsque le comportement suspect a été repéré et répété plusieurs fois, comme par exemple une tentative de connexion à un panel d'administration.

Nous allons mettre en place ici une surveillance et monitoring de Grafana permettant de connaître le nombre de banissemnts que Fail2ban a décidés, tout cela visible dans un dashboard (le même que celui présenté dans l'image d'en-têtre de l'article).

Mise en place de Prometheus

Nous allons ici mettre en place Prometheus pour qu'il puisse accéder aux données, les enregistrer dans sa base de données et les exposer à Grafana.

Créer un fichier docker-compose.yml comme suit :

version: "3"

volumes:
  prometheus_data: {}
  grafana_data: {}

networks:
  grafana_prometheus:
    driver: bridge

services:
  prometheus:
    container_name: prometheus
    hostname: prometheus
    image: prom/prometheus:latest
    restart: unless-stopped
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - ./alert_rules.yml:/etc/prometheus/alert_rules.yml
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.retention.time=1y'
      - '--storage.tsdb.retention.size=60GB'
    ports:
      - 9090:9090
    networks:
      - grafana_prometheus
    extra_hosts:
      - "host.docker.internal:192.168.1.25"

  grafana:
    container_name: grafana
    hostname: grafana
    image: grafana/grafana-oss:latest
    restart: unless-stopped
    volumes:
      - grafana_data:/var/lib/grafana
    ports:
      - 3000:3000
    networks:
      - grafana_prometheus

Ici j'ai fait apparaître aussi le container de Grafana dans le fichier de configuration. Le but ici est que Prometheus et Grafana soient dans le même réseau pour qu'ils puissent communiquer facilement.

Créez ensuite un fichier prometheus.yml avec les données suivantes :

# global settings
global:
  scrape_interval:     15s
  evaluation_interval: 15s

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:

Démarrez les containers avec docker-compose up -d.

Pour paramétrer Prometheus avec Grafana, allez dans Connections, puis Add new connection et sélectionnez Prometheus :

Grafana

Entrez les données suivantes :

Grafana

Notamment l'URL du serveur qui doit être http://localhost:9090

Sauvegardez la datasource. Vous pouvez aussi cliquer sur "Test" pour vérifier que la configuration soit bien effective :

Grafana

Installation de fail2ban-exporter

Ce petit utilitaire va permettre d'exposer les données fournies par Fail2ban à Prometheus, pour pouvoir être stockées dans sa base de données, puis que ces données soient exposées à Grafana. Nous allons l'installer grâce à Docker.

Dans le fichier docker-compose.yml que nous avons créé précedemment, ajoutez ceci au niveau de la partie services :

    fail2ban-exporter:
       image: registry.gitlab.com/hectorjsmith/fail2ban-prometheus-exporter:latest
       container_name: fail2ban-exporter
       volumes:
         - /var/run/fail2ban/:/var/run/fail2ban:ro
       expose:
         - "9191"
       networks:
         - grafana_prometheus

Ajouter la configuration suivante à Prometheus pour qu'il puisse scrapper l'URL, sous "scrape_configs" :

scrape_configs:
    - job_name: nut-primary
    metrics_path: /ups_metrics
    static_configs:
      - targets: ['fail2ban-exporter:9191']

fail2ban-exporter ici correspond au hostname du container.

Démarrer ensuite le container avec la commande docker-compose up -d.

Configuration de Grafana

Configuration du tableau de bord de NUT

Télécharger le dashboard suivant puis importez-le dans Grafana : https://gitlab.com/hectorjsmith/fail2ban-prometheus-exporter/-/blob/main/_examples/grafana/dashboard.json?ref_type=heads

Si tout s'est bien passé, vous devriez voir s'afficher le dashboard avec les données de votre instance fail2ban.

Commentaires