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 :
Entrez les données suivantes :
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 :
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