Pour débuter
Outils de base
VIM
06 min
SSH
14 min
rsync
20 min
Shell fish
13 min
Serveur HTTP
Apache
40 min
Nginx
30 min
PHP
NodeJS
Base de données
MySQL
15 min
Redis
08 min
Emails
HTTPS
FTP
ProFTPD
14 min
Sécurité
Pour le confort
Déploiement

Pour continuer à parler de la sécurité de notre serveur, nous allons installer Fail2Ban. Cet outil va permettre de bloquer de manière automatique les IPs suivant certaines conditions. On pourra par exemple bloquer quelqu'un qui se tromperait un trop grand nombre de fois au niveau de son mot de passe.

Installation

L'installation se fait via le gestionnaire de paquet

sudo apt-get install fail2ban

Une fois cette installation faite, nous allons copier la configuration par défaut afin qu'elle ne soit pas supprimée en cas de mise à jour.

cp /etc/fail2ban/jail.conf  /etc/fail2ban/jail.local

Configuration

Une fois notre configuration copiée nous allons pouvoir la modifier pour adapter à nos besoins. Par défaut la configuration n'est pas mauvaise, mais nous allons souhaiter obtenir des notifications lorsque des personnes seront bannies.

destemail = demoserver@monemail.fr
sendername = Fail2ban
sender = localhost@debian
mta = mail
action = %(action_mwl)s

Je n'ai mis ici que certains paramètres, mais n'hésitez pas à regarder la totalité du fichier pour voir les différents paramètres proposés dans la configuration. Plus bas dans le fichier nous allons avoir des configurations spécifiques qui permettront de gérer des filtres liés aux applications que nous avons installés sur notre serveur.

[ssh]
enabled  = true
port     = 5789
filter   = sshd
logpath  = /var/log/auth.log
findtime = 3600
maxretry = 6
bantime = 86400

Les propriétés présentes ici sont relativement claires. Le filter correspond à un fichier de configuration situé dans le dossier /etc/fail2ban/filter.d/. Ce fichier de configuration va contenir des expressions régulières qui permettent de déterminer si une ligne est considérée comme un échec.

# par exemple apache-noscript.conf
# Fail2Ban filter to block web requests for scripts (on non scripted websites)
[INCLUDES]
# overwrite with apache-common.local if _apache_error_client is incorrect.
before = apache-common.conf
[Definition]
failregex = ^%(_apache_error_client)s ((AH001(28|30): )?File does not exist|(AH01264: )?script not  found or unable to stat): /\S*(php([45]|[.-]cgi)?|\.asp|\.exe|\.pl)(, referer: \S+)?\s*$
            ^%(_apache_error_client)s script '/\S*(php([45]|[.-]cgi)?|\.asp|\.exe|\.pl)\S*' not     found or unable to stat(, referer: \S+)?\s*$
ignoreregex =

Une fois que vous êtes satisfait de votre configuration, vous pouvez redémarrer fail2ban:

sudo service fail2ban restart

Fail2ban-client

Maintenant que nous avons vu la configuration, nous allons devoir interagir avec fail2ban pour connaitre l'état de nos prisons. Pour cela on dispose de la commande fail2ban-client.

# permet d'obtenir des informations générales
fail2ban-client status
# permet d'obtenir des informations sur une prison
fail2ban-client status ssh
# pour retirer une ip d'une prison
fail2ban-client set ssh unbanip XXX.XXX.XXX.XXX

Créer une règle personnalisée

En plus des règles fournies par défaut on va souvent devoir adapter et créer nos propres règles. Pour cela on va commencer par créer un nouveau filtre dans le dossier filter.d. Ce fichier va contenir une expression régulière qui permettra d'identifier les lignes qui posent problème. Pour tester nos règles, on pourra utiliser la commande fail2ban-regex. Cette commande prend en premier paramètre une chaine ou un fichier de log, et en second le filtre que l'on souhaite tester.

fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/monfiltre.conf

Cette commande vous retournera le nombre de règles correspondant à votre filtre et vous permet de tester vos règles avant de les mettre en production. Une fois notre règle créée et validée il nous suffit de l'ajouter à notre fichier jail.local

[nginx-noscript]
enabled = true
filter  = nginx-noscript
port    = http,https
logpath = /var/log/nginx/error.log
     /var/log/nginx/custom.log