Pense bête…mais si ça peut servir 😉

Bonjour à tous

Plus besoin de présenter cet outil, tout admin serveur le connait aujourd’hui (ou en tout cas devrait). Mise en place simple et quasi tout de suite fonctionnel, que demander de plus!

Le fonctionnement de fail2ban est assez simple, il analyse les logs du système (auth.log / access.log …) et quand des actions anormales apparaîssent il ban l’ip via iptables pour un temps défini (temps donné dans le fichier de conf)…sans chichi, sans détours, et bim! (comme dirait Ghost)

Pour l’installation il suffit de passer par son gestionnaire de paquet:

apt-get install fail2ban

Voir si fail2ban est bien en train de travailler et les jails lançés

fail2ban-client status

Voir un service en particulier (ip banni / fichier log prit en compte)

fail2ban-client status ssh
fail2ban-client status apache-noscript
...


 

Les fichiers de configuration sur trouve dans /etc/fail2ban/

Dans ce dossier il y a deux fichiers et deux dossiers…

Les fichiers:

fail2ban.conf, je n’ai rien changé dans ce fichier.

jail.conf, c’est ici que tout ce passe et que nous allons configurer nos prisons. Heureusement nous n’aurons pas besoin de tout faire nous même puisque les règles les plus courantes y sont déjà présentes.

jail.local, pour nos règles perso.

Je ne met ici que ce que j’ai modifié:

Première partie du fichier, les paramètres par defaut qui s’applique à tous les services surveillés mais il est possible de modifier ces valeurs par service (voir plus bas).

[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = 127.0.0.1/8  --->  adresse ip à ignorer
bantime = 604800  ---> temps du ban (une semaine ici)
maxretry = 3  ---> nombre d'essai max avant ban

Votre adresse mail:

# Destination email address used solely for the interpolations in
# jail.{conf,local} configuration files.
destemail = votreadresse@mail

Puis changer:

action = %(action_)s

par

action = %(action_mwl)s

Section jail, c’est ici qu’il faut activer les prisons et la encore c’est bien fait et c’est simple, exemple:

[ssh]
enabled = true  --> passer de false à true pour activer
port = 22  --> mettre le port que vous utilisé, il est vivement conseillé de changer le port par défaut
filter = sshd  --> le filtre utilisé (voir plus bas pour plus d'info)
logpath = /var/log/auth.log  --> le fichier de log analysé
maxretry = 1 --> nombre d'essai autorisé avant le ban (un des paramètres de départ que nous pouvons personnaliser selon le service)

Attention! avec maxretry à 1 vous n’avez pas le droit à l’erreur! une erreur de frappe et vous serez ban de votre propre serveur. J’utilise une connexion ssh par clé, c’est pour cela que j’ai mis cette valeur à 1…si ce n’est pas votre cas mettez 3 voir 6.

 

Nous aurions pû aussi changer le bantime pour ce service:
[ssh]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
bantime = 86400  ---> pour ban une journée

Pour tous les autres services c’est la même chose, à vous d’activer ceux dont vous avez besoins.

 

Petite parenthèse en ce qui concerne les filtrages via le fichier acces.log/error.log (apache*), je n’y avais pas pensé au départ mais ayant plusieurs sites sur ma machine, j’ai donné, via mes vhosts, des noms différents pour acces.log/error.log selon les sites.

Ouais c’est bien et?

Les chemins donnés dans les jails sont ceux par défaut, si vous avez donc comme moi, plusieurs sites, avec plusieurs acces.log/error.log (acces_site1.log acces_site2.log…), il faut faire attention de bien indiquer les bons fichiers à analyser.

Perso, j’ai donc mis:
logpath = /var/log/apache*/*error*.log

ou

logpath = /var/log/apache*/*acces*.log
Ainsi, tous mes fichiers logs sont prient en compte.

 

Un petit exemple tout de même:
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6

Changé en:
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error*.log
maxretry = 6

Il est aussi possible d’ajouter ces propres prisons qu’il faudra ajouter dans le fichier jail.local (a créer s’il n’éxiste pas) et en ajoutant ces règles dans le dossier /etc/fail2ban/filter.d

 

Les dossiers:

 

A viendre………

 

 Erreur au lancement de fail2ban:
iptables -I INPUT -p tcp --dport anyport -j fail2ban-pam-generic returned 200
2014-09-22 01:41:19,570 fail2ban.jail : INFO Jail 'xinetd-fail' started
2014-09-22 01:41:19,573 fail2ban.actions.action: ERROR iptables -N fail2ban-xinetd-fail
iptables -A fail2ban-xinetd-fail -j RETURN

Il faut modifier fail2ban-client qui se trouve dans /usr/bin/ et ajouter « time.sleep(0.1) »

def __processCmd(self, cmd, showRet = True):
beautifier = Beautifier()
for c in cmd:
time.sleep(0.1)
beautifier.setInputCmd(c)

Si 0.1 ne convient pas, passer à 0.2…si toujours pas, à une version de fail2ban supérieur à 0.8.5-2. (backport ou branche instable si Debian)

 

Débannir une ip

 

Heu! ce n’est qu’au cas où! non ça ne m’est jamais arrivé :/

iptables -L
Imaginons que quelqu’un ce soit fait bannir par fail2ban dans la chain « fail2ban-apache-phpmyadmin » (pas moi hein! on est bien d’accord…) et qu’on veuille le débannir (heu…doit bien y avoir une raison de vouloir débannir une ip d’un vilain qu’on ne connait pas :/)

Chain fail2ban-apache-phpmyadmin (1 references)
target prot opt source destination
DROP all -- XX.XX.XX.XX
DROP all -- 00.00.00.00
RETURN all -- anywhere anywhere

Il y a par exemple deux adresses ip ban dans cette chain, supposons que l’on veuille débannir la première ip, il faudrait donc saisir:
iptables -D fail2ban-apache-phpmyadmin 1
pour la deuxième
iptables -D fail2ban-apache-phpmyadmin 2

Simple non?

Source et complément