Método 1 - desabilitar logins de senha
Se você não precisa permitir logins de senha, simplesmente não permitir que eles lhe dêem o efeito desejado. Basta adicionar esta linha a /etc/ssh/sshd_config
:
PasswordAuthentication no
Além disso, você pode limitar o uso de senhas a determinados usuários usando o operador Match
em sshd_config
:
Match User root,foo,bar
PasswordAuthentication no
Match User user1,user2
PasswordAuthentication yes
Método 2 - iptables
Você também pode usar iptables
para rastrear tentativas de login com falha e soltá-las após um determinado limite. Isso é semelhante ao seu exemplo de hostingfu, mas é mais fácil de entender.
$ 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
NOTA: A primeira linha basicamente cria uma regra que se aplica apenas aos pacotes usados para novas tentativas de conexão na porta ssh. A segunda linha diz que se houver mais de 4 tentativas de um IP dentro de 60 segundos, qualquer tráfego desse IP deve ser blackholed. Esta solução não se importa se as tentativas de diferentes contas de usuários são ou não.
Método 3 - use o PAM
Sei que você disse que não tem o PAM disponível, mas se o fizer, será possível atrasar tentativas de login malsucedidas. Se sua intenção é simplesmente atrasar as falhas de login do ssh, então você pode usar o módulo PAM pam_faildelay
. Este módulo PAM é geralmente incluído com o mix padrão.
No meu sistema Fedora 19, ele faz parte da instalação padrão.
Exemplo
Procure arquivos relacionados a 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
Veja a que RPM eles são fornecidos:
$ 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
Uso
Para criar um atraso na falha, basta adicionar uma linha como essa ao arquivo de configuração sshd
pam. Novamente nos sistemas Fedora / CentOS / RHEL, este arquivo está localizado aqui: /etc/pam.d/sshd
.
Para criar um atraso de 10 segundos:
auth optional pam_faildelay.so delay=10000000
Um atraso de 60 segundos:
auth optional pam_faildelay.so delay=60000000
Exemplo
Com um atraso de 20 segundos usando o método acima, alterei meu arquivo de configuração sshd
do PAM da seguinte forma:
#%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
Agora, quando eu fizer login:
$ 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