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

17

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?

John Himmelman
la source
@Hyppy Merci, j'ai essayé de chercher mais malheureusement il y a beaucoup de questions / fils mal nommés.
John Himmelman

Réponses:

11

J'utilise Fail2ban ; J'ai utilisé Denyhosts dans le passé, et cela fonctionne très bien aussi. Je préfère Fail2ban maintenant car 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 avec cela, sauf si vous voulez installer Shorewall , et je vous indiquerais simplement l'excellente documentation sur ce site pour savoir comment configurer une règle LIMIT pour, eh bien, limiter la capacité de quelqu'un à brutaliser -forcez votre serveur.

Kromey
la source
Je dois ajouter que Fail2ban est disponible dans de nombreux dépôts de distributions, donc son installation est un jeu d'enfant; Je n'ai vu aucun Denyhosts dans aucun d'entre eux, mais cela ne signifie pas qu'il ne l'est pas dans certains, ni qu'il n'a pas été ajouté depuis la dernière fois que j'ai vérifié.
Kromey
J'ai rencontré un problème selon lequel fail2ban de la v0.8.14 ne fonctionnait pas correctement avec la commande iptables-multiport. Et c'est un problème connu avec l'utilitaire fail2ban résolu dans de nouvelles versions ... Voici la description: github.com/fail2ban/fail2ban/issues/798 Je ne crois donc qu'aux mécanismes de sécurité développés en logiciel serveur, ni aux utilitaires tiers ...
George Gaál
44

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 SSHATTACKchaîne, qui est responsable de la journalisation de l'attaque ssh possible et abandonne finalement 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

3) 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
Mon nom est
la source
2
Impressionnant! mais j'ai un problème, un gars / bot en France n'a pas configuré correctement ses outils de piratage, donc il continue de se connecter, même si son trafic est diminué. Le résultat, mes journaux sont remplis de données chaque seconde de ce type. Un moyen de contourner cela?
Smarties89
2
Pour les personnes moins expérimentées comme moi: les lignes iptables sont tapées à l'invite bash, pas entrées dans un fichier quelque part.
Andrew Swift
4

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 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
Brendan
la source
3

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 permettra seulement à 4 paquets TCP / SYN de se connecter 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.

timkofu
la source
Que fallait-il éditer?
timkofu
A peu près la même chose que: -A INPUT -p tcp -m tcp --dport 22 -m limit --limit 48/hour -j ACCEPT.
Alix Axel
J'ai fait ces deux commandes iptables dans Debian Jessie, mais je peux toujours voir les tentatives de connexion SSH toutes les 2 secondes à partir de la même adresse IP. Des idées?
Alexey Ozerov
1

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.
mdpc
la source
Utile (surtout lorsqu'il est combiné avec d'autres suggestions déjà faites), mais ne résout pas vraiment le problème à lui seul car il est trivial pour quelqu'un de continuer à se reconnecter.
Kromey