Proxmox fail2ban

De The Linux Craftsman
Aller à la navigation Aller à la recherche

Introduction

Proxmox utilise une interface web d'administration qui utilise le port TCP 8006 et c'est un vecteur possible d'attaque par force brut. Nous allons donc dresser fail2ban pour agir en cas d'attaque !

Proxmox utilise Debian, nous allons principalement reproduire les étapes décrites dans le tutoriel de Fail2ban pour Rocky et adapter à Debian.

Avant d'aller plus loin, assurez-vous d'avoir correctement installé et configuré iptables sur Proxmox

Installation

# apt -y install fail2ban

Configuration

Tout d'abord il faut copier le fichier /etc/fail2ban/jail.conf en /etc/fail2ban/jail.local

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Dans ce fichier, on va s'intéresser aux variables suivantes:

  • ignoreip : correspond à la suite d'adresses IP qui ne se feront jamais bannir;
  • maxretry : correspond au nombre d'essais;
  • findtime : correspond à la période pendant laquelle les essais vont incrémenter maxretry;
  • bantime : correspond au temps ou l'adresse IP ne peut pas se connecter.

Configuration de base

Choix de la punition

Il faut choisir quelque chose de cohérent (une punition suffisante) pour ne pas permettre de se faire cracker son mot de passe:

  • maxretry = 3
  • findtime = 86400 (correspond à 1 journée)
  • bantime = 604800 (correspond à 1 semaine)

Cela signifie que si une adresse IP se trompe 3 fois en 1 journée (86400s) elle se fait bannir pendant 1 semaine (604800s).

Un rapide calcule permet de trouver le nombre maximal de tentative durant une année:

365 jours / 7 jours par semaine * 3 tentatives = 156 essais, ce qui reste raisonnable.

Si le pirate possède un botnet, il faut bien sûr multiplier ce nombre par le nombre de machines dans le botnet...

Attention : fail2ban parcours les logs de connexion pour connaître le numéro de la tentative, ce qui a pour conséquence, si le findtime est grand, de prendre un certain temps...

Jail pour SSH

Il suffit d'ajouter la ligne enabled=true dans la section à activer !

[sshd]

# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode   = normal
enabled = true
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

Configuration spécifique

Jail pour PVEPROXY

Pveproxy écoute sur le port 8006 et ne fonctionne pas exactement comme un serveur Apache httpd qui mettrait ces logs dans le fichier error_log.

Nous allons mettre cette configuration spécifique dans le fichier /etc/fail2ban/jail.d/proxmox.conf :

[proxmox]
enabled = true
port = https,http,8006
filter = proxmox
backend = systemd
maxretry = 3
findtime = 2d
bantime = 1h

Le backend utilisé est systemd, exactement comme si vous utilisiez la commande :

# journalctl -fu pvedaemon

Filtre pour PVEPROXY

Il ne nous reste plus qu'a spécifier le filtre proxmox dans le fichier /etc/fail2ban/filter.d/proxmox.conf :

[Definition]
failregex = pvedaemon\[.*authentication failure; rhost=<HOST> user=.* msg=.*
ignoreregex =
journalmatch = _SYSTEMD_UNIT=pvedaemon.service

Démarrage et enregistrement dans le chargeur de démarrage

# systemctl start fail2ban.service
# systemctl enable fail2ban.service

Vous pouvez maintenant démarrer fail2ban