tentativas de login SSH por minuto por IP

1

Como posso limitar as tentativas de login SSH por minuto por IP?

Desejo desativar as tentativas de login durante 5 segundos após uma falha. Isso é possível?

Não estou falando de proibir um usuário após analisar logs como o Fail2ban.

    
por Edgar 04.06.2013 / 15:21

5 respostas

7

Pergunta 1

Isso pode ser feito com o módulo hashlimit .

iptables -A INPUT -p tcp --dport 22 -m hashlimit \
  --hashlimit-mode srcip --hashlimit-above 3/minute -j DROP

Pergunta 2

O Netfilter não vê conexões somente com falhas de login. Você precisa de uma ferramenta (como Fail2ban) que esteja ativa em ambos os níveis. Você poderia criar uma cadeia com IPs bloqueados e executar um script após cada falha de login que faria algo como

iptables -A blocked_ips -s $evil_ip -j DROP
sleep 5
iptables -D blocked_ips -s $evil_ip -j DROP
    
por 04.06.2013 / 15:37
5

Veja o iptables

iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 5 --hitcount 2 -j DROP

Ele permitirá apenas uma nova conexão por IP por 5 segundos.

    
por 04.06.2013 / 15:27
3

O componente responsável pela autenticação em um sistema GNU / Linux é o PAM (Pluggable Authentication System).

Você pode configurá-lo adicionando módulos. Um módulo interessante no seu caso pode ser pam_tally . É usado para limitar o número de tentativas de login e banir usuários.

Se você adicionar esta linha em um dos arquivos de configuração /etc/pam.d/ :

auth     required       pam_tally.so deny=1 unlock_time=5 per_user

você evita que um usuário que não conseguiu fazer login tente novamente nos próximos cinco segundos. Então, você limita o número de tentativas de conexão por minuto a 12.

Referências:

por 04.06.2013 / 15:36
1

Negar 5 segundos após uma falha na tentativa de login

pam_tally.so:

This module maintains a count of attempted accesses, can reset count on success, can deny access if too many attempts fail. pam_tally comes in two parts: pam_tally.so and pam_tally. The former is the PAM module and the latter, a stand-alone program. pam_tally is an (optional) application which can be used to interrogate and manipulate the counter file. It can display users’ counts, set individual counts, or clear all counts. Setting artificially high counts may be useful for blocking users without changing their passwords. For example, one might find it useful to clear all counts every midnight from a cron job. The faillog(8) command can be used instead of pam_tally to to maintain the counter file.

Normalmente, as tentativas fracassadas de acesso ao root não farão com que a conta root seja bloqueada, para evitar negação de serviço: se seus usuários não tiverem contas de shell e o root só puder efetuar login via su ou no console da máquina ( não telnet / rsh, etc), isso é seguro

Etapa 1 # edite " /etc/pam.d/system-auth " e anexe a linha abaixo em " pam_env.so "

auth required pam_tally.so deny=1 lock_time=5
account required pam_tally.so reset

depois de configurar o arquivo acima tente logar com senha errada de qualquer usuário aqui está a saída de amostra do meu arquivo de log

logs:

tail -f /var/log/secure
Jun 04 15:59:13 station01 su: pam_tally(su-l:auth): user test (502) has time limit [167s left] since last failure
Jun 26 16:01:35 station01 sshd[13890]: pam_tally(sshd:auth): user test1 (503) has time limit [174s left] since last failure.
Jun 26 16:01:37 station01 sshd[13890]: Failed password for test1 from 192.168.0.13 port 54398 ssh2 
    
por 04.06.2013 / 15:38
0

Dentro do seu arquivo / etc / ssh / sshd_config existe uma diretiva que acredito que irá ajudá-lo.

MaxAuthTries 6

Aqui está a definição MaxAuthTries das man pages:

MaxAuthTries - Specifies the maximum number of authentication attempts permitted per connection. Once the number of failures reaches half this value, additional failures are logged. The default is 6.

    
por 04.06.2013 / 15:28