iptables para soltar por um tempo IPs com conexões recentemente com falha

3

Eu quero diminuir a probabilidade de um ataque ssh bem-sucedido em um sistema Linux. A única porta que está aberta é 22 (eu uso o redirecionamento de porta para todo o resto), e é claro que eu me certifiquei de que o ssh aceita apenas logins baseados em pares de chaves (sem senhas).

O volume de tentativas de login do ssh com falha (saída de last -f /var/log/btmp ) foi razoavelmente grande (como qualquer pessoa que esteja abrindo a porta 22 deve esperar), então nos últimos 2+ anos eu estive contando com uma variação do iptables- soluções baseadas frequentemente mencionadas para bloquear ataques ssh, por exemplo Centenas de logins ssh com falha .

Uma desvantagem irritante de tal esquema é que ele limita o número de novas conexões de um endereço IP por período de tempo, não importando se as conexões anteriores daquele ip foram bem-sucedidas ou não e se elas estavam tentando efetuar login como mesmo usuário ou não. Imagine um script contendo meia dúzia de comandos rsync usados no exterior para atualizar várias áreas nesse servidor: ele geralmente atinge o "novo limite de conexão" e falha em algum lugar no meio. O mesmo acontece se vários usuários por trás de um roteador (aparecendo como o mesmo endereço IP) se conectarem no meu servidor mais ou menos ao mesmo tempo.

Então, estou querendo saber se, sem recorrer à análise dos /var/log files , é possível implementar a seguinte estratégia com iptables :

  1. aceita conexões estabelecidas
  2. permite novas conexões a partir de conexões anteriormente bem-sucedidas
  3. coloque IPs com conexões com falha na cadeia por algum tempo

Pontos de bônus:

  1. O mesmo que acima, mas permitindo / prendendo o user@ip específico em vez de todo mundo @ip .

E para tentar reduzir os ataques de botnets:

  1. Coloque temporariamente na cadeia um usuário (não importa de qual IP (s) ele se conecte) depois de uma tentativa de falha ssh.
por Pierre D 23.11.2012 / 21:04

2 respostas

5

Sem analisar os arquivos de log, você não pode saber se uma tentativa de login do ssh foi bem-sucedida. Felizmente, você não precisa analisar esses arquivos de log. fail2ban pode fazer isso por você. Eu geralmente prendo um IP por uma semana depois de três tentativas de login.

    
por 23.11.2012 / 21:06
0

Antes de mais nada, não tem ssh em port 22 para reduzir a chance de sua porta ser encontrada por scanners automáticos.

Use também psad para bloquear automaticamente os hosts que verificam seu computador por um período de tempo configurável (1 hora por padrão).

Uma solução muito simples é apenas alugar um 64 or 128 meg openvz container & configure openvpn para que você tenha um fixed ip address & em seguida, limite sua regra iptables para --source vpn.ip.address no host que você deseja proteger.

Uma solução melhor é proteger totalmente sua ssh port com fwknop . Não há necessidade de executar fail2ban quando sua ssh porta estiver fechada até você enviar um gpg signed & pacote criptografado do fwknop-client que abrirá seu firewall por um período de tempo configurável (30 segundos por padrão). Você também pode configurar fwknop para aceitar apenas determinados endereços IP (como seu vpn ).

Eu tenho algumas notas extensas aqui para fwknop .

Se você é sério sobre ssh security, você também deve estar usando ed25519 keys. Mais notas aqui para usar cifras seguras com openssh . Outra boa escolha é tinyssh que tem não dependência em openssl & é seguro por padrão .

Todo o software mencionado aqui existe em Alpine Linux , que também se beneficia de randomização do layout do espaço de endereço via PaX em seu kernel Grsecurity .

    
por 26.08.2015 / 02:27