Fail2ban : installer et sécuriser votre serveur Linux

Présentation

Fail2ban est une application qui permet de sécuriser votre serveur Linux contre toute sorte d’attaques. Particulièrement modulaire, il va surveiller les fichiers de logs et déclencher des actions en fonction des services et des règles que vous mettrez en place. Bien configuré, c’est un outil indispensable à toute plateforme Linux (serveur, Raspberry, …).

Commençons par l’installer

$ apt-get install fail2ban

Configuration

Commençons par éditer le fichier /etc/fail2ban/jail.conf et modifier les paramètres suivants :

ignoreip = 127.0.0.1/8 X.X.X.X   # Ajouter l'IP de votre domicile par ex
bantime = 64800
findtime = 6000
maxretry = 4
destemail = Adresse@email     # Email du destinataire
sendername = Fail2Ban - Nom_Serveur
sender = adresse@email     # Email de l'expediteur
action = %(action_mwl)s

Nous allons maintenant créer le fichier /etc/fail2ban/jail.local, dans lequel nous indiquerons les règles que nous souhaitons selon les services qui sont exécutés sur le serveur (dans l’exemple, SSH, Exim, Proxmox). Si vous modifiez les ports de certains services, n’oubliez pas de les ajouter ici

[DEFAULT]
bantime = 1209600 ; 2 semaines
findtime = 6000 ; 100 minutes
maxretry = 3

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

[dropbear]
enabled  = true
port     = 2022,2032
filter   = dropbear
logpath  = /var/log/auth.log
maxretry = 3

[ssh-ddos]
enabled  = true
port     = 2022,2032
filter   = sshd-ddos
logpath  = /var/log/auth.log
maxretry = 3

[ddos]
enabled = true
action = iptables-allports
protocol = udp
filter = ddos
logpath = /var/log/kern.log

[portscan]
enabled = true
port = 21,22,23,25
filter = portscan
logpath = /var/log/kern.log

[proxmox4]
enabled = true
port = https,http,8006
filter = proxmox4
logpath = /var/log/daemon.log

[exim]
enabled = true
port = 25,587
filter = exim
logpath = /var/log/exim4/mainlog

[wordpress]
enabled  = true
port = http,https
filter   = wordpress
logpath  = /var/log/nginx/access.log      # Pour Apache2 avec plusieurs sites WordPress, utiliser /var/log/apache2/*_access.log
Créons maintenant les 4 filtres ddos, portscan, Proxmox4 et WordPress. Celui pour Exim existe déjà.
$ vi /etc/fail2ban/filter.d/ddos.conf

Pensez à adapter votre interface réseau si besoin (ici vmbr0). Ajoutez le contenu suivant :

[Definition]

failregex= IPTABLES-FLOOD LENGTH (28|46): IN=vmbr0 OUT= MAC=[a-zA-F0-9:]+ SRC=<HOST> DST=([0-9]{1,3}\.?){4} LEN=28
ignoreregex =
$ vi /etc/fail2ban/filter.d/portscan.conf

Et ajoutez le contenu suivant :

[Definition]

failregex = .*IN=vmbr0.* SRC=<HOST> (DST=.*PROTO=TCP SPT=.* DPT=21 WINDOW=.*|DST=.*PROTO=TCP SPT=.* DPT=22 WINDOW=.*|DST=.*PROTO=TCP SPT=.* DPT=23 WINDOW=.*|DST=.*PROTO=TCP SPT=.* DPT=25 WINDOW=.*)
ignoreregex =
$ vi /etc/fail2ban/filter.d/proxmox4.conf

Et ajoutez le filtre suivant :

[Definition]
failregex = pvedaemon\[.*authentication failure; rhost=<HOST> user=.* msg=.*
ignoreregex =

Pour WordPress (sous Nginx), voici le filtre

$ vi /etc/fail2ban/filter.d/wordpress.conf
[Definition]
failregex =  - - \[(\d{2})/\w{3}/\d{4}:\1:\1:\1 -\d{4}\] "POST /wp-login.php HTTP/1.1" 200
ignoreregex =

Et voici le filtre pour WordPress (sous Apache2) :

$ vi /etc/fail2ban/filter.d/wordpress.conf
[Definition]
failregex = ^ -.*POST /wp-login.php HTTP.*
ignoreregex =

Relancer le service Fail2ban

$ systemctl restart fail2ban

Ressources

wdt_ID Commande Commentaire
1 fail2ban-client -vvv -x start Lance fail2ban en mode verbose. S'assurer que le service est arrêté avant d’exécuter cette commande
2 journalctl -ru fail2ban Si le service ne se lance pas, affiche les logs.

Foire aux problèmes

Débannir une IP

Pour retirer une IP bannie, la commande est

$ fail2ban-client set NOM_DE_LA_REGLE unbanip ADRESSE_IP

La partie la plus compliquée est de déterminer la Règle utilisée pour bannir. Pour cela,

$ iptables -L -n
[...]
Chain fail2ban-ssh (1 references)
target prot opt source destination
REJECT all -- 152.206.144.42 0.0.0.0/0 reject-with icmp-port-unreachable
[...]

Il s’agit par ex de la Chain fail2ban-ssh. Pour connaitre le nom exacte de la Règle, taper

$ fail2ban-client status
|- Number of jail:      3
`- Jail list:           dropbear, ssh, ssh-ddos

La règle est donc ssh.

Pour débannir l’IP, tapez la commande suivante

$ fail2ban-client set ssh unbanip 152.206.144.42
152.206.144.42

Si l’IP apparait sur la ligne du dessous, c’est que cela a fonctionné.

Connaitre le nombre de règles activées

Pour connaitre le nombre de règles actives, taper la commande suivante :

$ fail2ban-client status
Status
|- Number of jail:      7
`- Jail list:           dropbear, ddos, ssh, portscan, proxmox4, exim, ssh-ddos

Vous aimerez aussi...