Quel outil ou quelle technique utilisez-vous pour prévenir les attaques de force brute contre votre port SSH? J'ai remarqué dans mes journaux de sécurité que j'ai des millions de tentatives de se connecter en tant que divers utilisateurs via SSH.
C'est sur une boîte FreeBSD, mais j'imagine que ce serait applicable n'importe où.
Voici un bon post sur ce sujet de Rainer Wichmann.
Il explique les avantages et les inconvénients sur ces méthodes pour le faire:
J'utilise échec1ban qui verra une sortie IP après plusieurs tentatives infructueuses pour une durée configurable.
Combinez ceci avec des tests de force de mot de passe (utilisant -John (John the Ripper)) pour assurer des attaques de force brute ne réussira pas.
Ons petite chose que vous pouvez faire est d'utiliser quelque chose comme des dénonhosts:
http://denyhosts.sourceforge.net/
Il utilise les hôtes intégrées/hôtes.Deny pour bloquer les abuseurs SSH.
L'un des moyens les plus faciles d'éviter ces attaques est de changer le port que SSHD écoute
Comme le souligne Chris, utilisez des touches de cryptage au lieu de mots de passe.
Ajouté à cela:
Combien de personnes ou d'emplacements (avec des IP publiques flottants) avez-vous vraiment besoin d'accéder à vos connexions ssh publics?
Selon le nombre d'hôtes publiques SSH, vous maintenez et si vous pouvez réduire vos critères de connexion généraux, il peut s'agir d'une configuration plus simple et maintenable pour limiter l'accès à quelques hôtes externes.
Si cela fonctionne pour vous, il peut vraiment simplifier votre administration.
En plus des autres bonnes suggestions, une chose très facile à faire est de limiter les connexions entrantes. Limiter à 3 connexions par minute par IP:
iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
Utilisez l'option "allowUsers" dans sshd_config pour vous assurer que seuls un petit ensemble d'utilisateurs peut se connecter du tout. Tous les autres seront rejetés, même si leur nom d'utilisateur et leur mot de passe sont corrects.
Vous pouvez même restreindre les utilisateurs à la connexion à partir de un hôte particulier.
par exemple.,
AllowUsers user1 [email protected]
Cela réduira l'espace de recherche et évitera ces anciens utilisateurs qui ont été laissés accidentellement portées ou activés (bien que cela soit bien sûr désactivé de toute façon, il s'agit d'un moyen facile de les empêcher d'être utilisé pour une entrée basée sur SSH).
Cela n'arrête pas entièrement les attaques de la force brute, mais contribue à réduire le risque.
Utilisez quelque chose comme ça avec PF:
table <ssh-brute> persist
Bloc en journal rapide de l'étiquette SSH_Brute
[.____] transmettre sur $ ext_if proto TCP à ($ ext_if) port ssh moduler l'état \
[.____] (Max-SRC-Conn-Taux 3/10, surcharge Flush Global)
Knocking est une méthode assez solide de garder ce genre de chose. Légèrement fidèlement, parfois agaçant, mais cela rend certainement le problème disparaître.
Suite à Suggestion limitant du taux de Sherbang , la durée du retard est importante. En augmentant le délai entre les groupes de 3 tentatives de connexion de 2 minutes à 20 minutes, le nombre d'adresses IP différentes qui a fait plus de trois tentatives de connexion supprimées, comparant deux semaines de longues-périodes sur une machine à mine, à partir de 44 tentatives de 3 . Aucune de ces trois adresses n'a continué à essayer pendant plus de 11 heures.
Très anecdotal, mais auth.log est devenu beaucoup plus lisible pour moi ...
Le contexte est important, mais je recommanderais quelque chose comme ça:
installer Ossec. Non seulement informatique surveille les connexions répétées, il entrera dans un bloc temporaire avec IPtables pour l'IP délinquante. Et à la fin, il vous enverra un rapport indiquant les détails. Il enregistre tout ce qui est sympa. Somone a une fois essayé plus de 8000 noms de connexion pour vous connecter. J'ai analysé les bûches et j'ai reçu une belle liste d'utilisateurs hors de transaction;)