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' Match
opé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 iptables
pour 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 sshd
fichier 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 sshd
fichier 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