Falha ao bloquear a força bruta ssh com o iptables


9

Estou tentando bloquear (desacelerar) ataques de força bruta no meu servidor sshd. Estou seguindo este guia http://www.rackaid.com/resources/how-to-block-ssh-brute-force-attacks/, que basicamente diz que preciso apenas digitar os 2 comandos abaixo.

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

Minha porta sshd é 6622, então mudei as entradas de "22" para "6622" e coloquei esses comandos. Em seguida, tentei simplesmente testar as novas tabelas de ip. Eu fui para outro pc e propositalmente coloquei a senha de login errada várias vezes. Infelizmente, as novas regras não parecem me impedir de tentar o quanto eu quero. Listadas abaixo estão minhas regras atuais. O que estou fazendo errado?

# iptables --list

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  anywhere             anywhere             tcp dpt:6622 state NEW recent: UPDATE seconds: 60 hit_count: 4 name: DEFAULT side: source
           tcp  --  anywhere             anywhere             tcp dpt:6622 state NEW recent: SET name: DEFAULT side: source

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain LOGDROP (0 references)
target     prot opt source               destination         
LOG        all  --  anywhere             anywhere             LOG level warning
DROP       all  --  anywhere             anywhere            

4
Eu recomendo o fail2ban para lidar com IPs de bloqueio que estão mostrando tentativas de força bruta. É fácil de instalar e configurar. Sei que não responde diretamente à sua pergunta, mas pode economizar alguns buracos no drywall.
Banjer

1
Concorde com o @Banjer - esqueça o link de rack, configure o fail2ban.
Shadur

Alguma chance de ajustes MaxStartupspodem ajudar do lado daemon?
Peterph

2
@peterph Somente se você quiser transformar uma tentativa de quebra de força bruta em uma negação de serviço.
Shadur

Por que expor um servidor ssh à Internet e tentar minimizar as consequências? No trabalho ou em casa, eu uso VPNs ipsec, sem ssh aberto para a Internet.
Rui F Ribeiro

Respostas:


5

Como @banjer apontou em seu comentário, você está tentando a solução errada para o seu problema real.

O que você precisa fazer é configurar o fail2ban . Ele usa iptables em segundo plano para bloquear automaticamente tentativas de conexão de hosts que geram tentativas de acesso com falha de várias fontes. É incrivelmente versátil e permite adicionar e modificar diferentes limites, padrões para procurar e banir métodos; você precisará ajustar um pouco a cadeia ssh padrão para dar conta da porta fora do padrão que você está usando, mas isso não deve ser difícil.


1

Eu uso regras como essa para desacelerar as coisas:

iptables -A DDoS -m limit --limit 12/s --limit-burst 24 -j RETURN
iptables -A DDoS -j LOG --log-prefix "[DDos Attack?] "
iptables -A DDoS -j DROP

Em outros lugares, limito coisas como esta:

LOGLIMIT="50/h"
LOGLIMITBURST="10"
iptables -A IANA -p tcp -m limit --limit $LOGLIMIT --limit-burst \
     $LOGLIMITBURST -j DROP

0

Você leu a página de manual?

man sshd_config:

 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.
 MaxSessions
         Specifies the maximum number of open sessions permitted 
         per network connection.  The default is 10.
 MaxStartups
         Specifies the maximum number of concurrent unauthenticated
         connections to the SSH daemon.  Additional connections
         will be dropped until authentication succeeds or 
         the LoginGraceTime expires for a connection. The default is 10:30:100.

         Alternatively, random early drop can be enabled by specifying
         the three colon separated values “start:rate:full” (e.g.
         "10:30:60").  sshd(8) will refuse connection attempts with a
         probability of “rate/100” (30%) if there are currently “start”
         (10) unauthenticated connections.  The probability increases
         linearly and all connection attempts are refused if the 
         number of unauthenticated connections reaches “full” (60).

3
Não ajuda Atualmente, os ataques de força bruta do SSH costumam ser usados ​​por redes de bot distribuídos, de modo que cada conexão faria apenas três ou quatro tentativas, mas você teria centenas de conexões de hosts diferentes.
Shadur

0

Eu apenas tentei a solução de duas regras e tive o mesmo problema quando o verifiquei. Então, observo que as regras publicadas têm -i eth0opção! Mudei para a boa interface de rede e ela finalmente começou a funcionar.


0

A maioria dos tutoriais usa -Apara anexar ao final do conjunto de regras. OP usado -Ipara inserir, mas sem um índice, portanto, as regras acabaram na ordem errada.

Uma ferramenta valiosa para depurar regras do iptables é a iptables -vLlista de regras com contagem de quantas vezes cada regra foi aplicada. Quando você obtém uma contagem inesperada de 0, pode ajudá-lo a ver o que está errado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.