Afin de contrôler au mieux , nos box domotique ou autre serveur , en dehors de la maison , nous sommes amenés à ouvrir des ports et nous pouvons être confrontés à des attaques régulières , qui peuvent planter notre box ou permettre une ouverture sur notre réseau.
Pour surveiller toutes ces tentatives d’intrusion , je vais expliquer comment installer le service fail2ban , sur un serveur à base de linux.
Dans mon terminal je lance les commandes suivantes
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install fail2ban
Une fois installée , la configuration se réalise dans le fichier /etc/fail2ban/jail.conf
Les paramètres par défaut , peuvent être réglés dans ce fichier , mais il est préférable de réaliser un fichier de config personnalisé , qui permettra de ne pas être effacé lors des mises à jour.
Ce fichier se nomme jail.local , situé dans le répertoire /etc/fail2ban
Voici un exemple de mes valeurs par défaut :
[DEFAULT]
bantime = 84600
ignoreip = 127.0.0.1/8 192.168.0.10 192.168.0.12
Afin de prendre en compte les modifications, relancer le service avec la commande suivante :
sudo systemctl restart fail2ban.service
Services à surveiller
fail2ban , est en mesure de scruter les logs de la plupart des services , en fin de fichier de jail.conf , vous trouverez la longue liste des services disponibles.
Sur Debian , le service sshd est surveillé dès le lancement. Pour le voir, lancer la commande : fail2ban-client status
L’accès de mon serveur domotique se fait via apache de l’extérieur , je vais donc activer une surveillance des tentatives d’accès à mon serveur apache.
Je rajoute donc ces lignes à mon fichier local /etc/fail2ban/jail.local
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/*error.log
maxretry = 3
findtime = 600
ignoreip = 192.168.0.10
[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/apache2/*error.log
maxretry = 3
findtime = 600
ignoreip = 192.168.0.10
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/apache2/*error.log
maxretry = 2
findtime = 600
ignoreip = 192.168.0.10
[apache-badbots]
enabled = true
port = http,https
filter = apache-badbots
logpath = /var/log/apache2/*error.log
maxretry = 2
findtime = 600
ignoreip = 192.168.0.10
Avec la commande iptables suivante :
sudo iptables -L
il est possible de voir les règles créées au niveau du pare-feu.
Cette Règle en détail :
- [apache] : Cette règle sert à bloquer les tentatives de login ratées
- [apache-noscript] : Cette règle sert à bloquer les connexion qui tentent de lancer des scripts distants.
- [apache-overflows] : Cette régle est pour bloquer les clients , qui tentent des requêtes malicieuses .
- [apache-badbots] : Cette requête permet de bloquer les requêtes envoyées par des robots.
Mots clés utilisés :
- Enabled : Cette clé active la régle
- port : cette clé indique quels sont les services à écouter
- filter : Cette clé renvoie au fichier de définition ( dans le dossier /etc/fail2ban/filter.d/ ) des recherches à faire.
- logpath : Indique où est situé le fichier log
- findtime : Cette clé indique, en secondes , la durée sur laquelle la règle doit être exécutée ( ici on autorise 3 essais max sur 10 mn )
- maxretry : Le nombre d’essai max de tentative d’authentification.
- ignoreip : Cette clé permet de lister les adresses ip à ignorer
Redémarrer le service avec la commande :
systemctl restart fail2ban.service
Il suffit de lancer la commande : fail2ban-client status apache ,afin de visualiser l’état des blocages.
Status for the jail: apache |- Filter | |- Currently failed: 0 | |- Total failed: 0 | `- File list: /var/log/apache2/error.log `- Actions |- Currently banned: 0 |- Total banned: 0 `- Banned IP list:
il est également possible de débannir une ip
fail2ban-client set apache unbanip 192.168.100.12
# ou d’en bannir une
fail2ban-client set apache banip 192.168.100.12
Fail2ban peut vous notifier par mail des éventuelles intrusions , il faudra alors configurer un service d’envoi de messagerie ( Par exemple le service ssmtp ).
5 commentaires sur “Protéger votre serveur , contre les tentatives d’intrusion.”
Bonjour et merci pour le tuto, je vais mettre en place cela sur ma VM de Jeedom et ma VM Nextcloud. Je kiffe tes tutos, j’ai fait l’horloge en V 2.6 avec fonctionnement avec Jeedom, cela fonctionne très bien, c’est vraiment top.
Petite question, dans cet exemple; il faut mettre quelles IP’s ?
[DEFAULT]
bantime = 84600
ignoreip = 127.0.0.1/8 192.168.0.10 192.168.0.12
C’est les IP’s des postes qui vont avoir accès en local à mes VM ?
Merci , pour vos commentaires . 🙂
dans la partie ignoreip , se sont les adresses ‘blanches’ , celles qui ne sont pas controlés par fail2ban . En conclusion , il faut mettre l’adresse des postes depuis lesquels tu ne veux pas êtres banni. ( cela peut être une adresse locale du PC qui prend la main sur jeedom , ou une adresse extérieur ( par exemple celle de ton lieu de travail , si tu te connectes a distance ).
Merci, c’est parfait. Je vais mettre cela en place sur mes deux VM.
Je vais justement migrer vers un hystou mon jeedom et virtuasliser le tout , cela pourrait m’être utilse je pense. Un tuto pour installer jeedom avec proxmox ca serait le top si tu utilises cette solution 🙂
Merci pour tes comm .
pour l’instant , j’utilise un odroid , mais je réfléchis aussi à virtualiser le tout …