web-dev-qa-db-fra.com

Fail2Ban ou DenyHosts pour bloquer les tentatives de connexion SSH avec un nom d'utilisateur non valide

Existe-t-il un moyen de bloquer automatiquement l'adresse IP lorsqu'un utilisateur tente de se connecter avec un nom d'utilisateur non valide? J'ai déjà:

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3
bantime = 31536000

dans /etc/fail2ban/jail.conf

4
slayton1213

Je ne peux pas vous aider avec fail2ban, mais j'utilise avec succès denyhosts pour exactement cette chose. Vous pouvez régler pas mal de paramètres et il a aussi une base de données distribuée où vous pouvez envoyer et recevoir d’autres badhosts.

Voici comment faire plus détaillé:

Installer le package denyhosts (Sudo apt-get install denyhosts)

Regardez la configuration par défaut dans /etc/denyhosts.conf, les options DENY_TRESHOLD_INVALID, DENY_TRESHOLD_VALID et DENY_TRESHOLD_ROOT pourraient vous intéresser.

Quant au serveur de synchronisation, il est désactivé par défaut et vous devrez l'activer en supprimant la mise en commentaire de l'option SYNC_SERVER.

Il n’est pas mauvais non plus de définir l’option PURGE_DENY sur 1w ou quelque chose du genre si vous vous bloquez vous-même. Ainsi, l’entrée sera purgée après une semaine et vous pourrez vous reconnecter.

4
oerdnj

Ceci est délibérément non pris en charge dans fail2ban :

En d'autres termes, les utilisateurs non valides peuvent obtenir 2 tentatives tandis que les mots de passe non valides pour les utilisateurs valides en obtiennent 5. Comment cela peut-il être fait dans fail2ban?

Un argument convaincant à l'encontre de cette action indique qu'un attaquant peut savoir si un nom d'utilisateur est valide ou non, ce qui diminue considérablement l'espace de recherche d'une attaque par force brute.

J'ai trouvé votre question en essayant de faire la même chose, mais maintenant j'ai changé d'avis. Outre l'avantage du secret, pourquoi gagner du temps en attaquant un attaquant?

5
supervacuo

Pourquoi ne pas simplement refuser toutes les connexions root entièrement sur SSH, plutôt que d'utiliser Fail2Ban ou d'autres choses? En faisant cela, et en refusant l'utilisation de la connexion root, vous éliminez le problème de devoir bloquer tout le monde, car même s'ils devinent le mot de passe root, ça va leur refuser la connexion. Peu importe combien de fois ils essaient.

Dans /etc/ssh/sshd_config, trouvez la ligne contenant PermitRootLogin. Modifiez cela avec n'importe quel éditeur de texte, mais assurez-vous d'utiliser Sudo/gksudo (gksudo uniquement si vous utilisez un éditeur de texte GUI). Faites que la ligne que j'ai mentionnée dise PermitRootLogin no, puis enregistrez et faites Sudo service ssh restart.

(Cette réponse a été écrite pour la question initiale mal formulée. Cette réponse ne sera pas modifiée pour correspondre à la question révisée, car cela dépasse ma capacité de réponse. Je pourrais supprimer CETTE réponse ultérieurement.)

4
Thomas Ward

Commencez par définir le filtre pour les utilisateurs non valides dans filter.d/sshd-invaliduser.conf:

[INCLUDES]
before = common.conf

[Definition]
_daemon = sshd

failregex = ^%(__prefix_line)s[iI](?:llegal|nvalid) user .*? from <Host>(?: port \d+)?\s*$
ignoreregex = 

[Init]
journalmatch = _SYSTEMD_UNIT=sshd.service + _COMM=sshd

Puis activez-le dans jail.local:

[sshd-invaliduser]
enabled = true
maxretry = 1
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

Cela fonctionne avec fail2ban 0.9.6-2 sur Debian 9.

3
cweiske