Restreindre les tentatives de connexion SSH avec fail2ban (remède pour les bots essayant de forcer les mots de passe via SSH)

image



SSH est assez sécurisé, surtout si vous prenez des précautions raisonnables, comme exiger une authentification basée sur une paire de clés. Cependant, il existe encore de nombreux robots dans la nature qui tentent de trouver des hôtes vulnérables en essayant de se connecter avec des noms d'utilisateur et des mots de passe compromis courants tels que root / root ou admin / admin. Bien qu'ils aient peu de chances de réussir, ils utiliseront toujours votre bande passante et généreront d'énormes quantités de journaux.



Une façon de minimiser les tentatives de connexion par force brute consiste à modifier le port par défaut sur lequel SSH écoute. Cependant, cela n'est pas considéré comme une bonne pratique - tout d'abord, rappelez-vous que chaque fois qu'ils se connectent au serveur, ils doivent définir le port correct, autre que celui par défaut. De plus, cela peut créer une autre vulnérabilité de sécurité si le port sélectionné est supérieur à 1024. Habituellement, seul root peut se lier aux numéros de port inférieurs à 1024. Cependant, si un numéro de port plus élevé est utilisé pour SSH, dans certaines circonstances, les utilisateurs sans accès root peuvent remplacer le démon SSH avec un autre service éventuellement malveillant.

La meilleure façon de résoudre ce problème est d'utiliser un outil qui empêchera un attaquant d'accéder au serveur SSH. Un de ces outils largement utilisé est fail2ban ( www.fail2ban.org ). En analysant les journaux, fail2ban détecte les échecs répétés des tentatives d'authentification et définit automatiquement des règles de pare-feu pour rejeter le trafic provenant de l'adresse IP de l'attaquant.



Installez fail2ban sur Ubuntu



Installation manuelle L'



installation de fail2ban sur Ubuntu (et d'autres distributions basées sur Debian) est très simple:



$ sudo apt install fail2ban
      
      





Vérification de son fonctionnement



Vous pouvez vérifier si le service est en cours d'exécution avec la commande suivante:



$ sudo systemctl status fail2ban



La sortie doit ressembler à ce qui suit - l'état du service doit être actif:



● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-05-18 12:36:36 ***; ** min ago
       Docs: man:fail2ban(1)
    Process: 723*** ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
   Main PID: 723*** (f2b/server)
      Tasks: 5 (limit: 38293)
     Memory: 18.0M
     CGroup: /system.slice/fail2ban.service
             └─723488 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
      
      





Voyons comment fail2ban a changé les règles iptables:



$ sudo iptables -L -n -v
      
      





Vous devriez également voir qu'il existe une nouvelle chaîne f2b-sshd dans la configuration iptables qui est référencée par la règle de chaîne INPUT:



Chain INPUT (policy ACCEPT 73411 packets, 6622K bytes)
 pkts bytes target     prot opt in     out     source               destination
 1019 65297 f2b-sshd   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22


Chain f2b-sshd (1 references)
 pkts bytes target     prot opt in     out     source               destination
    8   480 REJECT     all  --  *      *       94.191.93.46         0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       77.50.75.162         0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       51.254.143.190       0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       46.101.97.5          0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       43.129.28.88         0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       41.221.168.167       0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       35.247.219.12        0.0.0.0/0            reject-with icmp-port-unreachable
   12   720 REJECT     all  --  *      *       220.180.119.192      0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       218.75.121.75        0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       213.87.101.176       0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       192.139.15.34        0.0.0.0/0            reject-with icmp-port-unreachable
   21  1260 REJECT     all  --  *      *       187.104.145.210      0.0.0.0/0            reject-with icmp-port-unreachable
    8   480 REJECT     all  --  *      *       177.191.189.13       0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       159.89.82.134        0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       159.75.140.97        0.0.0.0/0            reject-with icmp-port-unreachable
    8   480 REJECT     all  --  *      *       157.92.13.105        0.0.0.0/0            reject-with icmp-port-unreachable
   11   660 REJECT     all  --  *      *       117.80.225.245       0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       106.53.121.179       0.0.0.0/0            reject-with icmp-port-unreachable
  865 56057 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0
      
      







Le package fail2ban contient un outil appelé fail2ban-client. Il vous permet de vérifier l'état du service et d'interagir avec lui (par exemple, il vous permet de bloquer et débloquer manuellement les adresses IP, d'activer et de désactiver les jails, etc.)



Voyons quels jails sont actifs:



$ sudo fail2ban-client status
      
      





Status
|- Number of jail:	1
`- Jail list:	sshd
      
      







Il n'y a qu'une seule prison - sshd - dont sq est responsable de la surveillance des journaux du serveur SSH pour les échecs de connexion et de la configuration des règles de pare-feu pour bloquer les tentatives ultérieures.



Nous pouvons maintenant vérifier les statistiques de la prison sshd:



$ sudo fail2ban-client status sshd
      
      





Status for the jail: sshd
|- Filter
|  |- Currently failed:	8
|  |- Total failed:	26
|  `- File list:	/var/log/auth.log
`- Actions
   |- Currently banned:	22
   |- Total banned:	25
   `- Banned IP list:	106.53.121.179 117.80.225.245 157.92.13.105 159.75.140.97 159.89.82.134 177.191.189.13 187.104.145.210 213.87.101.176 218.75.121.75 220.180.119.192 35.247.219.12 41.221.168.167 43.129.28.88 46.101.97.5 51.254.143.190 77.50.75.162 94.191.93.46 1.55.165.141 120.53.245.68 104.131.178.145 106.56.102.83 152.32.146.21
      
      





Configuration de fail2ban



Dans la plupart des cas, la configuration par défaut devrait être suffisante. Cependant, il est utile de comprendre quels sont ces paramètres par défaut et comment ils peuvent être modifiés pour répondre à vos besoins.



Dans une configuration standard, fail2ban protégera le serveur SSH et bloquera l'attaquant pendant 10 minutes après 5 tentatives de connexion infructueuses dans les 10 minutes. Le fichier de configuration par défaut se trouve dans /etc/fail2ban/jail.conf. Le fichier est bien documenté et en grande partie explicite. Veuillez noter que vous ne devez apporter aucune modification à ce fichier car il peut être écrasé lors de la mise à jour de fail2ban.



Après avoir modifié la configuration, n'oubliez pas de redémarrer le service:



$ sudo systemctl restart fail2ban
      
      





Je dois noter que dans ce cas, j'ai changé les paramètres de configuration, compris la stratégie d'attaque et reçu une liste quotidienne des hôtes attaquants et l'ai bloqué.



Mais je vous en parlerai plus tard dans une note séparée, si celle-ci est utile et intéressante pour quelqu'un.



All Articles