sexta-feira, 6 de dezembro de 2013

Instalando Fail2ban no Debian


Evitando ataques bruteforce de SSH utilizando o Fail2ban
Atualmente ataques bruteforce (força bruta, aquele em que o atacante tenta n possibilidades de usuário/senha por segundo até conseguir quebrar a senha e entrar no sistema) estão muito mais frequentes do que nós imaginamos, basta uma leitura rápida (like debian) no arquivo auth.log para visualizarmos a quantidade de tentativas com milhares de usuários e senhas por dia.
O que cabe a um administrador de redes é prevenir o sistema contra estas ações maliciosas que muitos robôs e máquinas zumbis são programadas para fazer. Para evitar ataques deste tipo, eu utilizo algumas acl’s na borda e o Fail2Ban no firewall que analisa o tráfego e dependendo da análise ele bloqueia o IP ou range de ip por tempo determinado inserindo regras no firewall. O bom é que não é apenas no protocolo SSH, você pode configurar para conexões SMTP, TELNET, FTP e etc…
O Fail2Ban na verdade é uma estrutura de prevenção de intrusão, escrito na linguagem de programação Python que filtra os logs de entrada de logins no sistema e a partir desta análise insere regras no firewall para bloqueio destes acessos.
Em distribuições Linux Debian e like Debian você pode instalar via apt-get com o comando:
# apt-get install fail2ban
Ele irá instalar automaticamente. Após instalar você deve configurar o fail2ban editando o arquivo:
# vim /etc/fail2ban/jail.conf
Algumas variáveis importantes deste arquivo são estas:
  • “ignoreip” se encontram os endereços de IPs que não vão ser bloqueados pelo programa.
  • “bantime” se encontra o tempo em que o IP ficará banido/bloqueado pelo programa (o tempo é contado em segundos).
  • “maxretry” temos o número máximo em que o IP pode tentar logar-se no seu servidor até ser bloqueado (recomendo que ponha no máximo 3).
  • “logpath” refere-se ao arquivo de log onde são checadas as tentativas frustradas de login.
Recomendo que antes de editar o mesmo, você faça um backup do arquivo evitando que seja feita qualquer equívoco no fileconf do fail2ban:
# cp -ar /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.ori
Feito o backup, vamos implementar algumas configurações básicas editando o arquivo
# vim /etc/fail2ban/jail.conf
Importante inserir alguns hosts ou range de hosts que não serão bloqueados, afinal ninguém bloqueia a si mesmo. Então na linha ignoreip coloque o ip de localhost e o range da sua rede a qual você não gostaria de bloquear, deixe separados por um espaço:
ignoreip = 127.0.0.1/8 192.168.0.0/16
Após isso, sete a variável bantime para o tempo que você deseja que o ip fique bloqueado no firewall. Este tempo é em segundo, eu geralmente configuro um ban para 10 minutos. Se você quiser banir o IP ou range permanentemente, basta atribuir a esta variável um valor negativo.
bantime  = 600
Configure o tempo de varredura em segundos passados em que o Fail2Ban procura por IP’s abusivos ao sistema.
findtime = 600
E por final configure o número máximo de entradas frustradas que o atacante tentou acessar seu sistema errando login e senha.
maxretry = 3
Pronto, salve o arquivo e reinicie o Fail2ban:
# /etc/init.d/fail2ban restart
O programa está configurado e poderá ver ver os IPs bloqueados em /var/log/fail2ban.log.
Quando um atacante for bloqueado, ao tentar acessar seu servidor ele irá exibir a mensagem de conexão recusada para o atacante, algo similar a mensagem abaixo:
ssh: connect to host 10.10.58.5 port 22: Connection refused
No iptables, você visualiza as regras inseridas através da sintaxe:
iptables -nL fail2ban-ssh
Que deverá listar algo assim:
root@takakaos:/etc/fail2ban# iptables -nL fail2ban-ssh

Chain fail2ban-ssh (1 references)
target     prot opt source               destination
REJECT     all  --  10.10.58.5        0.0.0.0/0            reject-with icmp-port-unreachable
RETURN     all  --  0.0.0.0/0            0.0.0.0/0
Para remover basta inserir o comando abaixo com o numero da regra (chain number) que você deseja remover. No meu caso seria remover o bloqueio para a primeira regra, que contém o IP 10.10.58.5
iptables -D fail2ban-ssh 1
Ou através da remoção do ip bloqueado (notar se na exibição do bloqueio através do iptables, a chain está dropando -j DROP ou está rejeitando -j REJECT)
iptables -D fail2ban-ssh -s 10.10.58.5 -j REJECT
Qualquer dúvida você pode acessar o manual (in english) na url abaixo.

Nenhum comentário:

Postar um comentário