Como posso atrasar o login do sshd após uma senha incorreta?

6

Como posso atrasar a resposta de repetição do SSH quando uma senha incorreta é tentada ou uma tentativa de login malsucedida. Eu queria que o atraso fosse de 2 a 3 segundos mais do que o habitual.

Eu não encontrei nenhuma opção no arquivo sshd_config para conseguir o mesmo.

Então alguém pode me dizer como devo proceder.

    
por Patha 10.12.2013 / 08:32

3 respostas

11

Se você bloquear todos os usuários, inclusive o block root, você poderá adicionar essas linhas a /etc/pam.d/password-auth ou /etc/pam.d/sshd . Na seção auth, adicione isso para bloquear todos os usuários por 5 minutos:

auth        required      pam_tally2.so  file=/var/log/tallylog deny=3 even_deny_root unlock_time=300

Agora adicione a seguinte linha à seção da conta:

account     required      pam_tally2.so

Finalmente reinicie seu sshd e ele deve funcionar. Depois disso, você pode verificar se há logins de falhas com o comando: pam_tally2 Você obterá esta saída:

# pam_tally2
Login           Failures Latest failure     From
userxy            4    12/10/13 09:52:31  192.168.100.100
    
por 10.12.2013 / 08:54
2

Você pode tentar adicionar

auth       optional   pam_faildelay.so  delay=250000

ao arquivo de configuração pam para o sshd (em sistemas Debian geralmente em /etc/pam.d/sshd ) O valor de atraso de 250000 é de 0,25 segundos.

    
por 10.12.2013 / 08:52
2
As regras do

IPtables podem ser ajustadas para alcançar o que você está tentando alcançar.

Suposição: Seu linux embutido tem o módulo netfilter compilado e desde que você conheça o conceito de firewall e você usou o iptables antes. acesso root é assumido. Se você é capaz de sudo, adicione sudo em frente dos comandos.

iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource

A sintaxe não tem vebosidade desejada, mas a linha instrui o iptables da polícia de firewall que você deseja anexar uma regra na cadeia INPUT existente. O argumento -p tcp indica que esta regra será aplicada somente aos pacotes TCP. A maior parte do restante dos argumentos se baseia na opção -m, que significa correspondência e informa ao iptables que a regra se aplica a pacotes que correspondem aos atributos específicos que estamos procurando. Aqui, a regra será aplicada aos pacotes que sinalizam o início de novas conexões para a porta TCP 22. Se um pacote corresponder a esses atributos, o iptables anotará o endereço do host remoto em uma lista temporária.

iptables -N LOG_AND_DROP

A regra acima executará uma ação usando uma cadeia diferente e, para anexá-la, primeiro criaremos a cadeia que fizemos (por exemplo, LOG_AND_DROP)

iptables -A INPUT  -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 20 --hitcount 4 --name DEFAULT --rsource -j LOG_AND_DROP

Esta regra diz ao iptables para procurar por pacotes que correspondam aos parâmetros da regra anterior, e que também vêm de hosts já adicionados à lista de observação. Se o iptables vir um pacote proveniente de tal host, ele atualizará o timestamp “last seen” para aquele host. Os argumentos --seconds 20 e --hitcount 4 são usados para restringir ainda mais os hosts que queremos bloquear - se um host tentar se conectar quatro ou mais vezes em sessenta segundos, ele corresponderá a essa parte da regra e nós saltaremos (-j ) para a cadeia LOG_AND_DROP.

iptables -A INPUT  -p tcp -m tcp --dport 22 -j ACCEPT

Tecnicamente falando, essa regra não é necessária com a cadeia INPUT, pois o padrão é definido como política ACCEPT para todos os pacotes não correspondidos. À prova de falhas se você criar um firewall restritivo, por exemplo rejeição padrão.

Anexar depois de obter feedback de @singh. Eu não percebi estado foi expulso em favor de mais techie conntrack (connectiontracking) módulo

Em vez de, por exemplo:

-m state --state RELATED

-m conntrack --ctstate RELATED
    
por 10.12.2013 / 09:04