Método # 1 - desativar logins de senha
Se você não precisar permitir logins de senhas, simplesmente desabilitá-los dará o efeito desejado. Basta adicionar esta linha a /etc/ssh/sshd_config
:
PasswordAuthentication no
Além disso, você pode limitar o uso de senha para determinados usuários usando o Match
operador 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 descartá-las após um certo 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 em 60 segundos, qualquer tráfego desse IP deverá ser trocado. Esta solução não se importa se as tentativas em diferentes contas de usuário ou não.
Método # 3 - use PAM
Sei que você disse que não possui o PAM disponível, mas, se o tiver, é assim que você poderá atrasar as tentativas de login com falha. Se sua intenção é simplesmente atrasar falhas de login ssh, você poderá usar o módulo PAM pam_faildelay
. Esse módulo PAM geralmente é incluído no mix padrão.
No meu sistema Fedora 19, faz parte da instalação padrão.
Exemplo
Procure por 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 por qual 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 esta ao seu sshd
arquivo de configuração do 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 sshd
arquivo de configuração 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 faço o 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
Referências