Configuration

Configuration jmv

Fail2Ban fait partie du dépôt de la grande majorité des distributions. Il s'installe donc avec tous les apt-get, yum, pacman et emerge de ce monde.

Configuration

  • Fail2Ban fonctionne à l'aide de "prisons"  (jails). 
  • Chaque service (web, courriel, etc.)  a sa propre prison.
  • Toute la configuration se trouve sous /etc/fail2ban/
  • En général, l'installation comprend par défaut un fichier jail.conf pour lequel seule la "prison ssh" est activée (désactivée dans le cas qui nous occupe, parce qu'il n'y a pas d'attaque contre ce service)
  • Certains recommandent d'en faire une copie (jail.local, que fail2ban pourrra lire), d'autres conseillent de créer ses propres fichiers dans le répertoire jail.d, ce que j'ai fait en partie.

Jail.conf

Contient les paramètres par défaut et les prisons que l'on veut activer :

  • ignoreip -> la boucle locale (127.0.0.1) et les autres adresses du réseau local ou des sous-réseaux
  • bantime -> la période de temps, en secondes, durant laquelle l'adresse IP offensante sera bannie. Dans ce cas-ci, il est à 86 400 secondes, soit 24h. Ce paramètre peut être modifié dans les prisons individuelles, qui ont préséance.
  • findtime -> la période de temps, en secondes, durant laquelle le nombre de "maxretry" établi aura été atteint.
  • maxretry -> le nombre de fois que l'adresse IP offensante aura tenté une action sur le serveur

Je n'ai rien changé au reste, si ce n'est l'activation de la prison Postfix pour le courriel

Configuration (suite)

Configuration (suite) jmv

filter.d/

Ce répertoire est rempli de filtres pour des services de toutes sortes, surtout pour Apache, le serveur Web.

  • Je n'ai rien trouvé qui me satisfaisait dans ce répertoire, étant donné que la majorité des attaques se faisaient au moyen de la requête "POST  / xmlrpc.php HTTP/1.1" qui sert à faire des modifications dans les pages du site à l'aide du courriel
  • Ces requêtes ne génèrent aucun message d'erreur.
  • La majorité des filtres préétablis s'appliquent aux messages d'erreur.
  • J'ai donc décidé de créer mon propre filtre pour Apache.
  • Après de nombreux essais et erreurs (je ne suis pas un spécialiste des expressions régulières), je suis arrivé à ceci :

failregex = ^<HOST>.*"POST /xmlrpc.php HTTP.*
            ^<HOST>.*"GET / .*

J'ai utilisé un fichier existant, j'ai remplacé le contenu de la définition par ce qui précède et je l'ai nommé apache-post.conf.

jail.d/

Au départ, ce répertoire est vide, du moins dans le cas de la distribution Gentoo. C'est dans ce répertoire que j'ai créé le fichier apache.conf :


[apache-post-clg]
enabled = true  (prison activée)
filter = apache-post (filter.d/apache-post.conf)
action = iptables[name=APACHE, port=http, protocol=tcp]
(action.d/iptables.conf) port = http,https logpath = /var/log/apache2/clo_access_log (le journal d'accès au serveur, et non pas le journal d'erreurs)
maxretry = 10 (nombre d'essais maximal)
findtime = 60 (période de temps durant laquelle le nombre d'essais sont effectués -- pourrait être plus courte)
bantime = 432000 (période de temps pendant laquelle l'adresse offensante sera bannie -- 5 jours)

[apache-post-securinux] enabled = true
filter = apache-post
action = iptables[name=APACHE, port=http, protocol=tcp] port = http,https]
logpath = /var/log/apache2/tux_access
log maxretry = 10
findtime = 60
bantime = 432000

 

Outils

Outils jmv

fail2ban-client a plusieurs fonctions, notamment celle de vérifier l'état des prisons avec l'option status :

fail2ban-client status nom-de-la-prison

Dans le cas du serveur du club, il n'y en a que quatre : postfix, sasl et apache-post-clg et apache-post-securinux

fail2ban-client a de nombreuses autres fonctions, dont celle de bannir un adresse IP immédiatement (fail2ban set <nom-de-la-prison> banip <adresse-ip-offensante>). Voir la page de manuel.

On peut aussi vérifier l'efficacité de la défense dans iptables

iptables -L