web-dev-qa-db-fra.com

SSH / SSHD - Comment définir le nombre maximal de tentatives de connexion?

Quelle est la façon la plus simple de configurer les tentatives de connexion max dans un environnement LAMP (sshd installé via yum)? Existe-t-il un package ou une règle de pare-feu simple?

17
John Himmelman

J'utilise Fail2ban ; J'ai utilisé Denyhosts dans le passé, et cela fonctionne très bien aussi. Je préfère Fail2ban maintenant parce qu'il est plus configurable et plus capable de gérer la surveillance de plusieurs services différents - par exemple, votre page de connexion sshd et votre application Web simultanément (à condition que vous enregistriez les échecs).

Vous pouvez également envisager d'implémenter une règle LIMIT dans iptables; Je ne peux malheureusement pas vous aider, sauf si vous souhaitez installer Shorewall , puis je vous indiquerai simplement l'excellente documentation sur ce site pour savoir comment configurer une règle LIMIT pour, eh bien, limiter la capacité de quelqu'un à forcer brutalement votre serveur.

11
Kromey

Je n'aime pas utiliser d'outils tiers. Par conséquent, j'ai utilisé une combinaison de configuration ssh et de paramètres de pare-feu. Avec la solution suivante, un attaquant est autorisé à produire exactement 3 connexions d'erreur en 2 minutes, ou il sera bloqué pendant 120 secondes.

1) Ajoutez la ligne suivante à /etc/ssh/sshd_config

MaxAuthTries 1

Cela ne permettra qu'une seule tentative de connexion par connexion. Redémarrez le serveur ssh.

2) Ajoutez les règles de pare-feu suivantes

Créer une nouvelle chaîne

iptables -N SSHATTACK
iptables -A SSHATTACK -j LOG --log-prefix "Possible SSH attack! " --log-level 7
iptables -A SSHATTACK -j DROP

Bloquer chaque adresse IP pendant 120 secondes, ce qui établit plus de trois connexions en 120 secondes. En cas de quatrième tentative de connexion, la demande est déléguée à la chaîne SSHATTACK, qui est responsable de la journalisation de l'attaque ssh possible et finalement abandonne la demande.

iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --set
iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --update --seconds 120 --hitcount 4 -j SSHATTACK

) Voir les entrées du journal des attaques ssh possibles dans /var/log/syslog

Dec 27 18:01:58 ubuntu kernel: [  510.007570] Possible SSH attack! IN=eth0 OUT= MAC=01:2c:18:47:43:2d:10:c0:31:4d:11:ac:f8:01 SRC=192.168.203.129 DST=192.168.203.128 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=30948 DF PROTO=TCP SPT=53272 DPT=1785 WINDOW=14600 RES=0x00 SYN URGP=0
44
My-Name-Is

Il n'y a pas de package spécifique associé à SSH pour configurer cela. Vous pouvez cependant installer CSF qui est ConfigServer & Firewall.

CSF

Deux changements de configuration que je suggérerais seraient apportés dans le fichier:/etc/ssh/sshd_config

Limitez le nombre maximal de connexions non authentifiées que le serveur ssh gérera en même temps. Plus il est petit, plus il est difficile pour les script kiddies de faire des tentatives de craquage parallèles et coordonnées avec plusieurs connexions. éditez sshd_config et changez MaxStartups de la valeur par défaut de "10" à "3:50:10". Les valeurs séparées par deux points indiquent au serveur ssh de "permettre à 3 utilisateurs de tenter de se connecter en même temps et de supprimer de façon aléatoire et croissante les tentatives de connexion entre 3 et 10 maximum". Remarque: cela devrait être augmenté sur les serveurs avec un nombre important d'utilisateurs ssh valides qui se connectent.

  • Par défaut : MaxStartups 10
  • MaxStartups 3:50:10

Réduisez la durée maximale de connexion réussie avant de vous déconnecter. La valeur par défaut de 2 minutes est trop de temps pour maintenir ouverte une tentative de connexion non authentifiée (voir ci-dessus); 30 secondes, c'est plus que suffisant pour se connecter:

  • Par défaut : LoginGraceTime 2m
  • LoginGraceTime 30
4
Brendan

J'utilise ces règles IPTables pour cela:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 4 --rttl  --name SSH -j DROP

Cela ne permettra que 4 paquets TCP/SYN au port 22 à partir d'une adresse IP en 5 minutes. S'il fait plus de tentatives, la porte est fermée jusqu'à 5 minutes.

3
timkofu

il y a une option que vous pouvez mettre dans votre fichier sshd_config pour le serveur:

 MaxAuthTries
         Specifies the maximum number of authentication attempts permitted per
         connection.  Once the number of failures reaches half this value, additional 
         failures are logged.  The default is 6.
1
mdpc