Comment fournir un délai de connexion dans ssh

11

Je voulais fournir un délai de connexion lors de la connexion via ssh. J'ai essayé deux façons de faire la même chose mais je n'ai pas pu trouver le résultat souhaité.

J'ai essayé les étapes fournies par le lien donné.

http://hostingfu.com/article/ssh-dictionary-attack-prevention-with-iptables

iptables -N SSH_CHECK
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH_CHECK
iptables -A SSH_CHECK -m recent --set --name SSH
iptables -A SSH_CHECK -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP

Je n'ai pas de module pam installé sur ma machine, je ne peux donc pas apporter de modifications liées aux fichiers pam

Donc, n'importe quel organisme me laisse suggérer une autre façon de faire de même?

J'ai un noyau linux nu fonctionnant sur une plate-forme intégrée.

RAM
la source
Pourquoi voulez-vous introduire un retard? Quel est votre but ultime?
un CVn
Je voulais empêcher la possibilité d'une attaque par force brute.
Ram
3
Le simple fait d'introduire un retard sur les nouvelles connexions n'empêchera pas une attaque par force brute. Vous devez examiner des outils conçus pour résoudre votre problème réel. Je suggère de commencer par regarder fail2ban qui est spécialement conçu pour réagir aux entrées de journal répétées en exécutant des commandes données, et est souvent utilisé spécifiquement pour empêcher les tentatives de force brute d'obtenir un accès non autorisé.
un CVn
C'est bien Michael mais je dois le faire avec l'infrastructure existante que j'ai avec moi, comment puis-je introduire un retard chaque fois que je me connecte via ssh.
Ram
2
Mec, fail2banutilise l'infrastructure exacte que vous avez déjà - les journaux ssh et les règles iptables.
Shadur

Réponses:

11

Méthode n ° 1 - désactiver les connexions par mot de passe

Si vous n'avez pas besoin d'autoriser les connexions par mot de passe, alors simplement les interdire vous donnera l'effet souhaité. Ajoutez simplement cette ligne à /etc/ssh/sshd_config:

PasswordAuthentication     no

De plus, vous pouvez limiter l'utilisation du mot de passe à certains utilisateurs utilisant l' Matchopérateur dans sshd_config:

Match User root,foo,bar
    PasswordAuthentication no
Match User user1,user2
    PasswordAuthentication yes

Méthode n ° 2 - iptables

Vous pouvez également utiliser iptablespour suivre les tentatives de connexion échouées et les supprimer après un certain seuil. Ceci est similaire à votre exemple de hostingfu mais est plus facile à comprendre.

$ sudo iptables -I INPUT -p tcp --dport <YOUR PORT HERE> -i eth0 -m state --state NEW -m recent --set
$ sudo iptables -I INPUT -p tcp --dport <YOUR PORT HERE> -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

REMARQUE: la première ligne crée une règle qui s'applique uniquement aux paquets utilisés pour les nouvelles tentatives de connexion sur le port ssh. La deuxième ligne indique que s'il y a plus de 4 tentatives à partir d'une adresse IP dans les 60 secondes, tout trafic provenant de cette adresse IP doit être blackholé. Cette solution ne se soucie pas si les tentatives sur différents comptes d'utilisateurs.

Méthode n ° 3 - utilisez PAM

Je me rends compte que vous avez dit que PAM n'était pas disponible, mais si vous le faisiez, c'est ainsi que vous pourriez retarder les tentatives de connexion infructueuses. Si votre intention est de simplement retarder les échecs de connexion ssh, vous pouvez utiliser le module PAM pam_faildelay. Ce module PAM est généralement inclus avec le mixage par défaut.

Sur mon système Fedora 19, cela fait partie de l'installation par défaut.

Exemple

Recherchez les fichiers liés à pam_faildelay.

$ locate pam|grep -i delay
/usr/lib/security/pam_faildelay.so
/usr/lib64/security/pam_faildelay.so
/usr/share/doc/pam-1.1.6/html/sag-pam_faildelay.html
/usr/share/doc/pam-1.1.6/txts/README.pam_faildelay
/usr/share/man/man8/pam_faildelay.8.gz

Découvrez les RPM fournis par:

$ rpm -qf /usr/share/man/man8/pam_faildelay.8.gz
pam-1.1.6-12.fc19.x86_64
pam-1.1.6-12.fc19.i686

Usage

Pour créer un retard en cas d'échec, il vous suffit d'ajouter une ligne comme celle-ci à votre sshdfichier de configuration pam. Encore une fois sur les systèmes Fedora / CentOS / RHEL ce fichier se trouve ici: /etc/pam.d/sshd.

Pour créer un délai de 10 secondes:

       auth  optional  pam_faildelay.so  delay=10000000

Un délai de 60 secondes:

       auth  optional  pam_faildelay.so  delay=60000000

Exemple

Avec un délai de 20 secondes en utilisant la méthode ci-dessus, j'ai changé mon sshdfichier de configuration PAM comme suit:

#%PAM-1.0
auth       required     pam_sepermit.so
auth       substack     password-auth
auth       include      postlogin
auth       optional     pam_faildelay.so  delay=20000000
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    optional     pam_keyinit.so force revoke
session    include      password-auth
session    include      postlogin

Maintenant, lorsque je me connecte:

$ date
Tue Dec 17 09:16:30 EST 2013

$ ssh blah@localhost
blah@localhost's password: 
Permission denied, please try again.
blah@localhost's password: 

...Control + C....

$ date
Tue Dec 17 09:16:50 EST 2013

Références

slm
la source
Merci @slm mais encore une fois, je ne peux pas installer le module pam et mon authentification sshd n'est pas de pam. Voulez-vous suggérer un autre moyen
Ram
@AmitSinghTomar - désolé d'avoir développé ma réponse. J'essayais de créer une réponse canonique à votre question qui couvrait toutes les méthodes, pas seulement la vôtre seule.
slm
Merci encore @slm pour votre réponse détaillée, je suis intéressé à suivre la deuxième méthode que vous avez suggérée. Je vais essayer et vous faire connaître le résultat, Cela me donne également un délai avec la toute première tentative de connexion via ssh?
Ram
@AmitSinghTomar - non, cela ne devrait retarder qu'après 4 tentatives. Lorsque la valeur --hitcount 4est dépassée, la règle troue l'adresse IP incriminée pendant 60 secondes.
slm
Un point que je voulais savoir de vous, pour que votre 3ème méthode fonctionne (PAM), faut-il que l'authentification ssh se fasse via pam?
Ram
3

Désactivez les mots de passe. Pas de mots de passe, pas d'attaque par force brute.

Vous pouvez utiliser des clés ssh pour vous connecter - ce qui devrait être beaucoup plus sûr et beaucoup plus difficile à pirater.

Nils
la source
0

Sur une nouvelle installation d'Ubuntu 16.04 avec openssh-server, il y a déjà un délai pour une tentative de mot de passe incorrect de plus de zéro caractère. Le retard semble être supérieur à 1 seconde .

Pour une tentative de mot de passe erronée de zéro caractère, il n'y a pas de délai, donc l'attaquant déterminera immédiatement que votre mot de passe n'est pas la chaîne vide s'il ne s'agit en effet pas de la chaîne vide. Étant donné que la chaîne vide n'est probablement pas autorisée en tant que mot de passe, ils le savent déjà et ne vont donc pas essayer la chaîne vide.

H2ONaCl
la source