Table des matières

Fail2Ban

Description

Fail2Ban est un script qui analyse les log du système et exécute des actions suivant ce qu’on lui dit de trouver dans ces logs.

Par exemple : Trop de tentative de connexion à ssh qui échoue ⇒ on bannit l’adresse ip pendant un certain temps.

Avec l’usage, je me rend compte que fail2ban n’est pas adapté pour le bruteforce ssh en masse. Il devient lent et met plusieurs minutes à bannir une ip. Je conseille fail2ban plus pour lutter contre les exploitations de faille de sécurité sur apache.

Je vais tester DenyHosts qui ne se concentre que sur les attaques bruteforce ssh ⇒ https://wiki.debian.org/fr/DenyHosts

Installation

Sous Debian, rien de plus imple comme d’hab

aptitude install fail2ban

Configuration

Le fichier de config est la : /etc/fail2ban/fail2ban.conf

Un fichier permet de configurer l’activation des règles : /etc/fail2ban/jail.local

Le fichier /etc/fail2ban/jail.conf est le fichier par défaut et ne doit pas être modifié.

Tous les filtres se trouvent dans /etc/fail2ban/filter.d/

Toutes les actions se trouvent dans /etc/fail2ban/action.d/

D’autres règles peuvent être trouvé par là ⇒ http://j2c.org/informatique/linux/fail2ban.php

Et d’autres règles aussi par là ⇒ http://forums.ovh.com/showpost.php?p=269688&postcount=14

Commandes utiles

Vérifier un filtre

fail2ban-regex /var/log/apache2/error.log /etc/fail2ban/filter.d/apache-404.conf | less
Running tests
=============

Use regex file : /etc/fail2ban/filter.d/apache-404.conf
Use log file   : /var/log/apache2/error.log


Results
=======

Failregex
|- Regular expressions:
|  [1] [[]client <HOST>[]] File does not exist: .*
|
`- Number of matches:
   [1] 652 match(es)

Ignoreregex
|- Regular expressions:
|
`- Number of matches:

Summary
=======

Addresses found:
[1]
    50.17.179.154 (Sun Sep 30 19:23:01 2012)
    200.58.71.91 (Mon Oct 01 05:29:33 2012)
    200.58.71.91 (Mon Oct 01 05:29:34 2012)
    200.58.71.91 (Mon Oct 01 05:29:34 2012)
    200.58.71.91 (Mon Oct 01 05:29:35 2012)
    200.58.71.91 (Mon Oct 01 05:29:35 2012)
    200.58.71.91 (Mon Oct 01 05:29:36 2012)
    200.58.71.91 (Mon Oct 01 05:29:37 2012)
    200.58.71.91 (Mon Oct 01 05:29:38 2012)
       <==--- tronqué---==>
    192.31.21.179 (Tue Oct 02 02:51:40 2012)
    192.31.21.179 (Tue Oct 02 05:01:36 2012)
    192.31.21.179 (Tue Oct 02 07:24:32 2012)

Date template hits:
1326 hit(s): MONTH Day Hour:Minute:Second
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second Year
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second
0 hit(s): Year/Month/Day Hour:Minute:Second
0 hit(s): Day/Month/Year Hour:Minute:Second
0 hit(s): Day/Month/Year Hour:Minute:Second
0 hit(s): Day/MONTH/Year:Hour:Minute:Second
0 hit(s): Month/Day/Year:Hour:Minute:Second
0 hit(s): Year-Month-Day Hour:Minute:Second
0 hit(s): Day-MONTH-Year Hour:Minute:Second[.Millisecond]
0 hit(s): Day-Month-Year Hour:Minute:Second
0 hit(s): TAI64N
0 hit(s): Epoch
0 hit(s): ISO 8601
0 hit(s): Hour:Minute:Second
0 hit(s): <Month/Day/Year@Hour:Minute:Second>

Success, the total number of match is 652

However, look at the above section 'Running tests' which could contain important
information.

Vérifier qui est banni

Pour voir les prisons en cours

# fail2ban-client status
Status
|- Number of jail:	1
`- Jail list:		ssh

Pour voir le contenu d’une prison

# fail2ban-client status ssh
Status for the jail: ssh
|- filter
|  |- File list:	/var/log/auth.log 
|  |- Currently failed:	1
|  `- Total failed:	7
`- action
   |- Currently banned:	1
   |  `- IP list:	91.121.40.63 
   `- Total banned:	1

Sinon avec iptables

# iptables-save
# Generated by iptables-save v1.4.14 on Tue Jun 24 16:08:30 2014
*filter
:INPUT ACCEPT [668:59799]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [562:87424]
:fail2ban-ssh - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A fail2ban-ssh -s 91.121.40.63/32 -j DROP
-A fail2ban-ssh -j RETURN
COMMIT
# Completed on Tue Jun 24 16:08:30 2014

Pour bannir

fail2ban-client set [nom du jail] banip [IP à bannir]

ou (ancienne version)

iptables -I fail2ban-ssh 1 -s 212.196.204.209 -j REJECT --reject-with icmp-port-unreachable

ou (nouvelle version)

iptables -I f2b-sshd 1 -s 212.196.204.209 -j REJECT --reject-with icmp-port-unreachable

Pour dé-bannir

fail2ban-client set [nom du jail] unbanip [IP concerné]

ou (ancienne version)

iptables -D fail2ban-ssh -s 91.121.40.63/32 -j REJECT --reject-with icmp-port-unreachable

ou (nouvelle version)

iptables -D f2b-sshd -s 91.121.40.63/32 -j REJECT --reject-with icmp-port-unreachable