Dans cet article, le premier du blog, il sera question de sécuriser son serveur dédié. Tout simplement.
Bien sûr, il ne s’agit pas de le sécuriser contre toutes les attaques, ce qui n’est pas possible, mais au moins réduire les risques.
Pour cela, nous allons utiliser un petit outil, fail2ban, qui se charge pour vous de surveiller les fichiers de journalisation (logs), et qui prend des décisions en cas d’échec répété du mot de passe, par exemple.
Installation
Bien sûr, pour l’utiliser il faut l’installer.
Selon votre système d’exploitation, la commande change un peu. Je n’ai personnellement testé que sur Debian 7.8 et 8.0, mais il devrait être dans les dépôts de votre système (et si ce n’est pas le cas, envisagez un changement !)
La commande pour l’installer sur un système Debian (et dérivés, à savoir Ubuntu, Linux Mint …) est apt-get install fail2ban
(ou aptitude install fail2ban
, selon vos préférences).
Pour un système basé sur CentOS, la manipulation est déjà un peu plus compliquée. Il faut tout d’abord ajouter les dépôts epel:
Si vous utilisez CentOS6
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
sudo rpm -Uvh epel-release-6*.rpm
Si vous utilisez CentOS7
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-1.noarch.rpm
sudo rpm -Uvh epel-release-7*.rpm
Ensuite, il vous suffit d’utiliser la commande yum install fail2ban
.
Une fois installé, vous pouvez vérifier qu’il est lancé avec un service fail2ban status
.
Configuration
La configuration de fail2ban se trouve dans /etc/fail2ban/jail.conf
.
Ce fichier étant potentiellement modifié à chaque mise à jour, je vous conseille de le copier dans /etc/fail2ban/jail.local
avec la commande cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
et de modifier ce fichier à la place.
Ce fichier de configuration se décompose en trois parties.
La première vous permet de définir des paramètres valides pour toutes les prisons (jails), et plus particulièrement deux paramètres qui nous intéressent.
Le premier qui nous intéresse est ignoreip qui vous permet de définir une liste d’adresses IP à ne pas bannir automatiquement, même si elles se trompent une infinité de fois. Sa valeur par défaut est 127.0.0.1⁄8, et pour mettre en liste blanche l’adresse 20.21.22.23, il vous suffit de remplacer la valeur par ceci : 127.0.0.1/8, 20.21.22.23
. Si vous connaissez la notation CIDR, ou désirez utiliser un hostname (par exemple, blog.ungeek.fr), vous pouvez !
Le second élément de configuration qui nous intéresse est le bantime, qui correspond à la durée du bannissement, c’est à dire du bloquage de l’adresse IP, exprimé en secondes. Sa valeur par défaut est 600, c’est à dire 10 minutes. Personnellement je mets un mois de bannissement, sans quoi certaines personnes s’amusent à revenir un peu trop fréquemment.
La suite de cette partie est je pense assez facile à comprendre, le maxretry définit le nombre d’échecs avant le bannissement, et sender permet de définir votre adresse si vous désirez être informé de chaque bannissement.
L’option action qui vaut par défaut %(action_)s
permet de choisir entre les trois valeurs présentes par défaut: action, qui bannit uniquement, action_mw, qui vous envoie par mail un whois de l’adresse bannie, et action_mwl qui vous envoie le whois et les lignes de log qui ont conduit au bannissement.
La seconde partie de la configuration, qui concerne cette fois les prisons (jails), permet de définir les fichiers de log à surveiller.
Une prison est définie comme un bloc de configuration. Prenons par exemple:
[ssh]
enabled = true
port = ssh
filter = sshd
banaction = iptables-allports
logpath = /var/log/auth.log
[ssh] qui correspond au nom commercial, celui que vous utiliserez et verrez.
enabled prend la valeur booléenne (true pour vrai, false pour faux), ce qui permet d’activer ou non la prison.
port permet à fail2ban d’empêcher l’accès à l’utilisateur à un port particulier.
filter définit le filtre à utiliser, qui correspond à un fichier de configuration du dossier /etc/fail2ban/filter.d/
.
banaction permet de définir l’action à utiliser. Elles sont définies dans le dossier /etc/fail2ban/actions.d/
. Mentions spéciales pour iptables-allports qui bloque l’accès à tous les ports, hostsdeny qui effectue la même tâche mais en utilisant hostsdeny (le fichier /etc/hosts.deny) au lieu de iptables.
logpath qui définit le fichier que logpath doit surveiller, ici le fichier des authentifications réussies et échouées.
Il est bon de savoir que vous pouvez aussi redéfinir les valeurs de bantime, maxretry et findtime dans cette section.
Commandes utiles
Débloquer une adresse IP
Fail2ban est un bon outil lorsqu’il s’agit de vous bloquer un accès, même si le serveur vous appartient. Il vous suffit pour cela de vous tromper plus de N fois de mot de passe. C’est extrèmement simple. Mais peu utile, à part pour tester fail2ban. La plupart du temps, vous voudrez juste vous débannir. Et pour celà, il faut vous connecter, mais depuis ailleurs (cybercafé, 3G, Wifi du voisin que vous venez de pirater).
La commande permettant de vous débannir dépend de l’action effectuée, et donc de la prison.
Afin de l’obtenir, tapez ceci fail2ban-client get JAIL actionunban ACTION
, en remplaçant JAIL et ACTION par le nom de la prison, et l’action d’où vous désirez vous débloquer.
Par exemple, fail2ban-client get ssh actionunban iptables-multiport
renvoie
iptables -D fail2ban-<name> -s <ip> -j DROP
.
Ainsi, pour débannir l’IP 8.8.8.8 pour le ssh, il suffit de taper iptables -D fail2ban-ssh -s 8.8.8.8 -j DROP
.
Cependant, si vous êtes maladroit et trop souvent bloqué, vous pouvez vous ajouter à la liste blanche ignoreip. Ou utiliser une clé ssh :-)
Installation manuelle d’une action/prison
Si vous désirez ajouter manuellement une action ou prison, je vous conseille de vous inspirer de ceux présents ici: https://github.com/fail2ban/fail2ban/tree/master/config dans filter.d et action.d. Pour l’installer, il vous suffit de placer le fichier dans /etc/fail2ban/.
Attention tout de même, parfois les fichiers ne seront pas adaptés à votre installation (et en particulier entre la version 0.8 et 0.9), donc prenez le temps de bien les tester ! C’est l’avantage (et inconvénient) de travailler avec les fichiers de la version master: ils sont plus récents, mais pas forcément compatibles / fonctionnels.