Warning: Declaration of syntax_plugin_styler_styler::handle($match, $state, $pos, &$handler) should be compatible with DokuWiki_Syntax_Plugin::handle($match, $state, $pos, Doku_Handler $handler) in /home/anaeleufv/mon-serveur.anael.eu/lib/plugins/styler/syntax/styler.php on line 20

Warning: Declaration of syntax_plugin_styler_styler::render($mode, &$renderer, $data) should be compatible with DokuWiki_Syntax_Plugin::render($format, Doku_Renderer $renderer, $data) in /home/anaeleufv/mon-serveur.anael.eu/lib/plugins/styler/syntax/styler.php on line 20

Protection anti bruteforce

Retour à la liste des tutoriels

Les attaques automatisées des serveurs sont aujourd'hui courantes.


Présentation

Un pare-feu (iptables) est installé sur votre serveur. Fail2ban va permettre d'ajouter des règles de filtrage visant à filtrer les hôtes indésirables.

Je ne vais pas m'attarder sur la parade des attaques Apache / web, mais sur les tentatives de connexion en ssh (port 22).
Rappel : le ssh permet d'ouvrir une console de gestion du serveur à distance.

Une solution “simple” consiste à modifier le port d'écoute de SSH.
Toutefois, ceci peut vous empêcher de vous connecter à votre serveur depuis des réseaux académiques ou professionnels qui sont fortement filtrés.

Log SSH

SSH enregistre toutes les tentatives de connexion (réussies ou non) dans le fichier journal /var/log/auth.log .

Exemple : connexion échouée

Jun 26 05:56:31 vm sshd[30103]: Invalid user Aurdaneta from 200.69.248.161
Jun 26 05:56:31 vm sshd[30103]: pam_unix(sshd:auth): check pass; user unknown
Jun 26 05:56:31 vm sshd[30103]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=h248-161.decidir.net
Jun 26 05:56:32 vm sshd[30103]: Failed password for invalid user Aurdaneta from 200.69.248.161 port 52101 ssh2

Exemple : connexion réussie

Jun 26 02:00:16 vm sshd[29793]: Accepted password for user-web from 88.191.122.115 port 1986 ssh2
Jun 26 02:00:16 vm sshd[29793]: pam_unix(sshd:session): session opened for user user-ssh by (uid=0)

Fonctionnement de fail2ban

Fail2ban sera un daemon sur le serveur, c'est à dire qu'il sera exécuté en permanence, et lira les logs indiqués afin de les analyser et prendre les mesures requises en cas d'abus / tentative de hack de la part d'une personne.

Fail2ban est capable d'analyser différents types de logs (SSH, web, FTP, …). Toutefois attention aux ressources consommées par un processus tournant en permanence et analysant des logs !

Installation

apt-get install fail2ban

Configuration

Toute la configuration de fail2ban s'effectue dans le fichier /etc/fail2ban/jail.conf .

ignoreip

Liste des ip à ignorer dans le scan des logs.
Par défaut 127.0.0.1 .

  • Séparer les valeurs par une virgule.
  • Indication avec un masque réseau possible (10.0.0.0/16 → couvre de 10.0.0.0 à 10.0.255.255)

bantime

Durée du ban, en secondes. Par défaut 600.
Cette valeur peut-être laissée telle qu'elle (une attaque bruteforce automatisée s'arrêtera immédiatement s'il ne reçoit plus de réponses de la part du serveur).

destemail

Fail2ban peut prévenir par mail à chaque ip bannie / débannie.

maxretry

Nombre de tentatives maximales au bout duquel l'adresse IP est bloquée.

Cette valeur peut-être redéfinie dans chaque module de type de logs.

SSH

Voici la partie dans laquelle j'indique de vérifier les connexions SSH.

[ssh]
 
enabled = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 6

Le module SSH de fail2ban est activé.
La valeur de maxretry peut-être minorée à 3 ou 4 (nombre maximal de tentatives échouées avant ban)

Suite

Il faut recharger la configuration de fail2ban :

service fail2ban reload

Commandes utiles

Liste des bans actuels

iptables -L

fail2ban est apparu dans la liste !

Log de fail2ban

tail /var/log/fail2ban.log

Enlever un ban

iptables -D fail2ban-ssh -s @IP -j DROP 

Où @IP est l'adresse IP à débloquer.


Liens