Quels sont les avantages / inconvénients des différentes méthodes pour bloquer les attaques SSH par force brute?

20

Il existe un certain nombre de packages différents pour bloquer les adresses IP à partir desquelles des attaques SSH par force brute sont lancées sur votre système. Par exemple:

Quels sont les avantages / inconvénients de ceux-ci ou d'autres?

Ma solution actuelle consiste à prendre l'e-mail que logwatch génère chaque jour et à vider les adresses IP flagrantes dans un fichier texte que j'alimente dans un script qui reconstruit ensuite iptables. C'est hacky, chronophage et manuel, et j'aimerais mieux.

(Notez que je n'ai pas demandé quelle était la "meilleure" façon de résoudre le problème, car il n'y a pas de "meilleure" façon de faire quoi que ce soit.)

Andy Lester
la source

Réponses:

15

J'utilise DenyHosts, donc je peux au moins répondre à cela:

Avantages

  • C'est complètement automatique
  • Il est configurable (combien de tentatives ont échoué avant la mise sur liste noire, pour les noms d'utilisateur qui n'existent pas, les noms d'utilisateur qui existent et une entrée spéciale pour root)
  • Il peut vous envoyer par e-mail périodiquement une liste des nouveaux hôtes sur liste noire et / ou exécuter un programme donné chaque fois qu'un nouvel hôte est sur liste noire.
  • Il prend en charge la suppression automatique de la liste noire des hôtes après un certain temps

Les inconvénients

Je n'ai aucun inconvénient irréparable, tant que vous l'utilisez correctement:

  • Dans sa configuration par défaut, il ne vous alertera pas sur les nouveaux hôtes sur liste noire, donc si quelqu'un attaque votre réseau à partir de centaines d'adresses différentes, vous ne le remarquerez peut-être pas tout de suite comme vous le feriez si vous surveillez vos journaux manuellement, mais (comme mentionné dans la section pros) il peut vous envoyer un e-mail ou exécuter un exécutable pour vous alerter lorsque de nouveaux hôtes sont ajoutés
  • Par défaut, il mettra vos hôtes sur liste noire comme tous les autres, vous voudrez donc probablement les ajouter /etc/hosts.allow. Je me suis bloqué une fois en échouant à taper mon mot de passe, et une fois que quelqu'un du travail a essayé de se connecter à mon compte root pour plaisanter et a mis ma liste d'adresses IP sur liste noire, et il m'a fallu quelques jours pour comprendre pourquoi je ne pouvais pas me connecter soudainement à mon réseau du travail plus
Michael Mrozek
la source
19

Un autre est fail2ban , qui repose sur iptables (donc il fonctionne avec n'importe quel service, pas seulement ssh). Avec fail2ban, vous pouvez:

  • Spécifiez le chemin d'accès à n'importe quel fichier journal (apache, ssh, nginx, serveur de messagerie, ...).
  • Spécifiez l'expression régulière pour les modèles d'attaque (par exemple, plus de 10 "404 erreurs" par la même adresse IP sur le journal d'accès nginx en 6 secondes)
  • Spécifiez l'expression régulière pour ignorer certains modèles (très utile!)
  • Spécifiez le temps d'interdiction
  • Envoyer un email (ou toute autre alerte ...)
  • Entièrement personnalisable (vous pouvez écrire vos propres alertes et filtres)

Un "inconvénient" de DenyHosts est qu'il nécessite des wrappers tcp, donc il ne fonctionnera qu'avec les services qui regardent le fichier /etc/hosts.deny. Mais pour être juste avec DenyHosts, sshd est compilé pour utiliser TCP Wrappers sur la plupart des distributions Linux. Je trouve également que DenyHosts est plus facile à configurer hors de la boîte que fail2ban (mais moins puissant).

Référence à une question SF similaire

Barthelemy
la source
fail2ban, heureusement, fonctionne également avec pf - pas seulement iptables
Good Person
10

Une protection simple et efficace contre les attaques basées sur l'analyse consiste à ne pas utiliser le port standard. 443 (le port https) vous expose à différentes attaques par force brute qui ne vont pas casser vos mots de passe faibles et peut éventuellement passer par plus de pare-feu que le port par défaut (22).

La plupart des méthodes pour empêcher les attaques par force brute ssh sont d'excellents moyens de s'auto-faire (oups, j'ai foiré la configuration! , l'attaquant vient de / a subverti une machine dans le même sous-réseau que moi (plage IP dynamique, réseau universitaire ...) et je suis banni aussi!).

Si vous ne vous connectez qu'à partir de quelques endroits, vous pouvez simplement mettre en liste blanche les adresses IP source. Ce n'est évidemment pas bon si vous voulez utiliser votre ordinateur portable ou votre téléphone portable en déplacement.

Avoir un démon ssh qui n'écoute que les connexions IPv6 devrait vous protéger des analyses pendant quelques années encore. Mais de nombreux pare-feu ne vous permettent pas de transporter IPv6 de manière raisonnable.

Une autre méthode que vous ne mentionnez pas est le portage . Il ne souffre pas de problèmes d'auto-DoS (autres qu'une mauvaise configuration), mais il ne traverse pas bien les pare-feu et peut ajouter plusieurs secondes de latence à l'établissement de la connexion.

Si vous avez de bons mots de passe ou si vous pouvez vivre sans authentification par mot de passe, désactivez l'authentification par mot de passe. (Les clés et les mots de passe à usage unique sont suffisants pour la plupart des cas d'utilisation: si vous ne faites pas suffisamment confiance à la machine cliente pour stocker une clé ssh, vous ne lui faites pas confiance non plus pour ne pas avoir un enregistreur de frappe). Ensuite, les attaques par force brute vous coûteront un peu de CPU et de bande passante mais ne vous exposent pas à une intrusion (tant que vous n'avez pas vérifié qu'aucune de vos clés ne provienne d'un OpenSSL Debian à faible entropie ).

Dans l'ensemble, notez que le changement de port ne réduit pas considérablement votre exposition. Vous obtiendrez moins d' analyse , mais tout ce que vous pouvez couper est le fruit bas qui cherche à exploiter les anciennes vulnérabilités et les mots de passe faibles. Tant que vous gardez votre démon à jour et appliquez des mots de passe raisonnables ou des limites de taux de tentatives raisonnables, le changement de port est plus une responsabilité qu'une mesure de sécurité.

Gilles 'SO- arrête d'être méchant'
la source
1
Je suis d'accord qu'il faut un peu de pratique pour ne pas vous interdire ;-) Changer les ports par défaut et ne pas compter sur un mot de passe mais sur une clé protégée par mot de passe sont également de bons conseils. Mais je ne sais vraiment pas pourquoi je devrais laisser les réseaux de robots remplir mes fichiers journaux d'accès alors que mon serveur SSH et Web doivent refuser des milliers de demandes par heure. Avec fail2ban, mon journal d'accès est propre et mes applications serveur ne voient pas du tout ce trafic (sauf les premières X mauvaises requêtes :-)).
Barthelemy
L'utilisation d'un port non standard n'ajoute pas beaucoup de protection. La recherche de SSH sur un port non standard ne prend que quelques minutes de plus que la recherche de SSH sur le port 22 (en supposant que le pirate effectue une analyse et que l'analyse n'a pas été bloquée par un IDS. Mais si vous avez un IDS, l'obscurcissement de port n'est probablement pas nécessaire ). Si j'étais un pirate et que je trouvais SSH sur un port non standard, je serais encore PLUS intéressé parce que je sais que l'administrateur pensait que ce service était assez précieux pour être caché et qu'il dépend de la sécurité par obscurité.
Stefan Lasiewski
1
@Stefan: La plupart des attaques ne sont pas dirigées contre un hôte donné mais contre un service donné. Pour cela, il est beaucoup plus efficace d'analyser un seul port sur plusieurs adresses que de nombreux ports sur chaque adresse. Et si un attaquant vous cible, vous feriez mieux de le savoir, vous voudrez donc que les mots de passe forts ou interdits et les attaques soient enregistrés.
Gilles 'SO- arrête d'être méchant'
1
@Stefan Je considère les ports non standard comme une solution efficace à une nuisance (analyses par force brute) et pas vraiment comme une mesure de sécurité (c'est-à-dire, empêcher quelqu'un de prendre le contrôle de mon serveur).
Barthelemy
1
@sudowed La spécification d'un autre port n'est guère gênante. C'est juste une ligne .ssh/config. Le verrouillage est un problème si le pare-feu ne vous laisse pas passer, et la solution la plus simple est de s'en tenir au port 22 et d'écouter également le 443. Je suis d'accord que changer de port n'améliore pas vraiment la sécurité, peut-être devrais-je le préciser . Je ne sais pas pourquoi vous considérez qu'il est impossible pour un démon SSH de ne pas prendre en charge l'authentification par mot de passe: il s'agit simplement d'ajouter une ligne à sshd_configOpenSSH, l'implémentation la plus courante.
Gilles 'SO- arrête d'être méchant'