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
1 |
$ apt-get install fail2ban |
Configuration
Commençons par éditer le fichier /etc/fail2ban/jail.conf et modifier les paramètres suivants :
1 2 3 4 5 6 7 8 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
[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à. |
1 |
$ vi /etc/fail2ban/filter.d/ddos.conf |
Pensez à adapter votre interface réseau si besoin (ici vmbr0). Ajoutez le contenu suivant :
1 2 3 4 |
[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 = |
1 |
$ vi /etc/fail2ban/filter.d/portscan.conf |
Et ajoutez le contenu suivant :
1 2 3 4 |
[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 = |
1 |
$ vi /etc/fail2ban/filter.d/proxmox4.conf |
Et ajoutez le filtre suivant :
1 2 3 |
[Definition] failregex = pvedaemon\[.*authentication failure; rhost=<HOST> user=.* msg=.* ignoreregex = |
Pour WordPress (sous Nginx), voici le filtre
1 |
$ vi /etc/fail2ban/filter.d/wordpress.conf |
1 2 3 |
[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) :
1 |
$ vi /etc/fail2ban/filter.d/wordpress.conf |
1 2 3 |
[Definition] failregex = ^ -.*POST /wp-login.php HTTP.* ignoreregex = |
Relancer le service Fail2ban
1 |
$ 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
1
|
$ 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,
1
2
3
4
5
6
|
$ 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
1
2
3
|
$ 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
1
2
|
$ 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 :
1
2
3
4
|
$ fail2ban-client status
Status
|- Number of jail: 7
`- Jail list: dropbear, ddos, ssh, portscan, proxmox4, exim, ssh-ddos
|