fail2ban

fail2ban est un logiciel permettant de bannir une adresse IP lorsque celle-ci semble vouloir brute-forcer certaines parties de votre serveur. Il permettra notamment d'arrêter tout brute-force sur votre serveur SSH, sur les zones d'identifications HTTP, ... Il s'agit donc d'une solution proactive contrairement à rkhunter.

Là aussi son installation est relativement simple. En revanche sa configuration est un peu plus complexe. Il faut en effet faire attention à certains paramètres ou vous risqueriez d'être banni vous même de votre propre serveur.

Pour l'installer :

apt-get install fail2ban

Puis nous allons créer le fichier /etc/fail2ban/jail.local. Celui-ci contiendra toute la configuration que nous souhaitons appliquer à fail2ban (elle viendra surcharger le fichier /etc/fail2ban/jail.conf). Nous allons notamment ajouter notre IP à la whitelist (pour ne pas être banni de son propre serveur), modifier la durée de recherche dans les logs ainsi que la durée de ban. Nous allons également définir quels services doivent être surveillés par fail2ban :

[DEFAULT]
ignoreip = 127.0.0.1 a.b.c.d # A remplacer par votre IP personnel. Pas celle de vos serveur mais bien celle-ci => http://www.mon-ip.com/ !
findtime = 1800               # Vérifie les erreurs produites dans les 30 dernières minutes
bantime = 604800              # Ban pour 1 semaine
destemail = votre@email.com   # Adresse(s) d'alerte en cas de ban

[ssh]
enabled = true
port = ssh,sftp,6554   # Remplacez "6554" par le port que vous aurez configuré dans le fichier `/etc/ssh/sshd_config`
maxretry = 3

[pam-generic]
enabled = true

[ssh-ddos]
enabled = true
port = ssh,sftp,6554   # Remplacez "6554" par le port que vous aurez configuré dans le fichier `/etc/ssh/sshd_config`

[apache]
enabled = true
maxretry = 1

[apache-myadmin]
enabled   = true
port      = http,https
filter    = apache-myadmin
banaction = iptables-allports
logpath   = /var/log/apache*/*error.log
maxretry  = 2

[apache-w00tw00t]
enabled   = true
port      = http,https
filter    = apache-w00tw00t
banaction = iptables-allports
logpath   = /var/log/apache*/*error.log
maxretry  = 1

Les deux derniers filtres utilisés (apache-myadmin et apache-w00tw00t) sont des filtres custom que nous allons créer. Ces deux types de scan sont courants et ils ont tendance à surcharger les fichiers d'erreurs (empêchant parfois d'utiliser correctement lesdits fichiers).

On va donc créer le fichier /etc/fail2ban/filter.d/apache-myadmin.conf :

[Definition]
failregex = ^[[]client <HOST>[]] File does not exist: *myadmin* *\s*$
    ^[[]client <HOST>[]] File does not exist: *MyAdmin* *\s*$
    ^[[]client <HOST>[]] File does not exist: *mysqlmanager* *\s*$
    ^[[]client <HOST>[]] File does not exist: *setup.php* *\s*$
    ^[[]client <HOST>[]] File does not exist: *mysql* *\s*$
    ^[[]client <HOST>[]] File does not exist: *phpmanager* *\s*$
    ^[[]client <HOST>[]] File does not exist: *phpadmin* *\s*$
    ^[[]client <HOST>[]] File does not exist: *sqlmanager* *\s*$
    ^[[]client <HOST>[]] File does not exist: *sqlweb* *\s*$
    ^[[]client <HOST>[]] File does not exist: *webdb* *\s*
ignoreregex =

Puis le fichier /etc/fail2ban/filter.d/apache-w00tw00t.conf :

[Definition]
failregex = ^.*\[client <HOST>\].*w00tw00t\.at\.ISC\.SANS\.DFind.*
ignoreregex =

Enfin, pour prévenir tout problème avec fail2ban en cas de crash de votre serveur, nous allons modifier le fichier /etc/default/fail2ban :

FAIL2BAN_OPTS="-x"

Pour débloquer une adresse IP :

iptables -D fail2ban-<CHAIN_NAME> -s <IP> -j DROP