Bloqueando IP usando o Fail2ban e IPTables

Tecnologia infraestrutura e desenvolvimento

Bloqueando IP usando o Fail2ban e IPTables

O Fail2ban é uma ferramenta que protege as conexões feitas atraves dos serviços SSH, FTP, SMTP entre outros, o que o fail2ban faz é simplesmente monitorar todas as conexões feitas para esses serviços os quais você deixou configurado, por padrão são 3 tentativas e caso não consiga sera bloqueado por 600 segundos ou seja 10 minutos.

O Fail2ban é uma estrutura de prevenção de intrusão, escrito na linguagem de programação Python, seu principal objetivo é para evitar ataques de força bruta através do uso de login e senha.

Eai pessoal, hoje vou falar sobre um programinha que tem integração com o IPTables que é o Fail2Ban. A função desse cara é bloquear um determinado IP que está tentando fazer acesso a um serviço de nosso servidor, como por exemplo o SSH.

O Fail2Ban é um programa escrito na linguagem Python, que quando ativo o mesmo fica monitorando o logs de alguns serviços do sistema, como o SSH, Apache, FTP e etc.

O funcionamento é assim, quando erramos várias vezes uma determinada senha, do FTP por exemplo, o Fail2Ban se encarrega de criar uma regra no IPTables, bloqueando o nosso IP, dropando todos os pacotes provenientes desse IP, assim, ficamos impedidos de tentar fazer o login.

O tempo de bloqueio é configurável pode ser apenas 5 minutos até 72 Horas de bloqueio, mas se bloquearmos por apenas 5 minutos já é o suficiente para interrompermos um ataque brute force.

Agora vamos ver como instalar e configurar o Fail2Ban. Para instalarmos podemos fazer isso via apt-get(Para Ubuntu e Debian) e YUM (Fedora, CentOS e etc): – See more at: http://howtolinux.com.br/bloqueando-ips-com-fail2ban/#sthash.n4t44KIq.dpuf

Eai pessoal, hoje vou falar sobre um programinha que tem integração com o IPTables que é o Fail2Ban. A função desse cara é bloquear um determinado IP que está tentando fazer acesso a um serviço de nosso servidor, como por exemplo o SSH.

O Fail2Ban é um programa escrito na linguagem Python, que quando ativo o mesmo fica monitorando o logs de alguns serviços do sistema, como o SSH, Apache, FTP e etc.

O funcionamento é assim, quando erramos várias vezes uma determinada senha, do FTP por exemplo, o Fail2Ban se encarrega de criar uma regra no IPTables, bloqueando o nosso IP, dropando todos os pacotes provenientes desse IP, assim, ficamos impedidos de tentar fazer o login.

O tempo de bloqueio é configurável pode ser apenas 5 minutos até 72 Horas de bloqueio, mas se bloquearmos por apenas 5 minutos já é o suficiente para interrompermos um ataque brute force.

Agora vamos ver como instalar e configurar o Fail2Ban. Para instalarmos podemos fazer isso via apt-get(Para Ubuntu e Debian) e YUM (Fedora, CentOS e etc): – See more at: http://howtolinux.com.br/bloqueando-ips-com-fail2ban/#sthash.n4t44KIq.dpuf

Instalando fail2ban no RHEL, CentOS e Fedora

Por padrão fail2ban não está disponível nas distribuições de sistemas Linux, então você terá que adicionar ou habilitar repositório de terceiros ou o repositório da EPEL que acho bem melhor e mais confiavel.

Para isso execute o comando abaixo:

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Após atualizar o repositório da EPEL vamos seguir com a instalação de fail2ban:

# yum install fail2ban

# chkconfig –level 23 fail2ban on

Configurando Fail2Ban:

O arquivo de configuração principal do fail2ban está localizado em /etc/fail2ban/jail.conf. 

O objetivo principal deste arquivo é a configuração dos serviços que queremos monitorar e para onde devemos destinar os logs do fail2ban.

Abaixo uma pequena parte do arquivo:

[DEFAULT] # "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not # ban a host which matches an address in this list. Several addresses can be # defined using space separator. ignoreip = 127.0.0.1 # "bantime" is the number of seconds that a host is banned. bantime = 600 # A host is banned if it has generated "maxretry" during the last "findtime" # seconds. findtime = 600 # "maxretry" is the number of failures before a host get banned. maxretry = 3

jail.conf é o arquivo que contém a declaração das configurações do serviço. Este arquivo de configuração é dividido em diferentes partes/contextos. Ele aplicar as configurações padrão para todas as seções.

A seção seguinte padrão de jail.conf diz que, após tres tentativas fracassadas de acesso a partir de um único endereço IP dentro de 600 segundos ou 10 minutos (findtime), esse endereço será automaticamente bloqueado para 600 segundos (bantime).

ignoreip: Esta é uma lista separada por espaço de endereços IP que não pode ser bloqueada pelo fail2ban.
maxretry: Número máximo de tentativas de login antes de um host para que seja bloqueado pelo fail2ban.
bantime: Tempo em segundos que o host é bloqueado se for capturado pelo fail2ban (600 segundos = 10 minutos).

Configuração de Serviços:

Por padrão, alguns serviços são inseridos como modelos. A seguir é um exemplo de seção de serviços ssh.

[ssh-iptables]

enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
          sendmail-whois[name=SSH, dest=root, sender=dejano@dejano.com.br, sendername="Fail2Ban"]
logpath  = /var/log/secure
maxretry = 5

enable: Habilitar a verificação fail2ban para o serviço ssh.
port: porta de serviço (denominado no arquivo /etc/services)
filter: Nome do filtro que será utilizado pelo serviço. Esse nome corresponde a um nome de arquivo em ‘/etc/fail2ban/filter.d; sem a extensão .conf. Por exemplo: filter = sshd se refere a /etc/fail2ban/filter.d/sshd.conf
logpath: O arquivo de log que verifica fail2ban as tentativas de login.
action: Esta opção diz fail2ban qual ação a ser tomada uma vez por correspondências de filtro. Esse nome corresponde a um nome de arquivo em /etc/fail2ban/action.d/ sem o .conf a extensão. Por exemplo: “action = iptables refere-se a /etc/fail2ban/action.d/iptables.conf.

Fail2ban irá monitorar o arquivo /var/log/secure nas ​​tentativas de acesso, e se encontrar uma ação repetida no ssh através do login o endereço IP ou host será banido com as regas habilitadas o será host nas regra de firewall do iptables.

O diretório /etc/fail2ban/action.d contém diversos scripts definição de ações. Apenas um filtro é permitido por serviço, mas é possível especificar várias ações, em linhas separadas.

Subir o  Serviço Fail2ban:

# /etc/init.d/fail2ban start

Verificando as regras do iptables fail2ban

Vamos verificar se o fil2ban criou as regras OK para isso execute o comando abaixo:

# iptables -nvL


Chain INPUT (policy ACCEPT 502 packets, 48532 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  452 39114 fail2ban-SSH  tcp  —  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 180 packets, 32448 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain fail2ban-SSH (1 references)
 pkts bytes target     prot opt in     out     source               destination         
  433 36590 RETURN     all  —  *      *       0.0.0.0/0            0.0.0.0/0

Vejam acima que o Fail2Ban já etá monitorando

Agora vamos testar se realmente isso funciona OK!!

Va na sua maquina mesmo e execute um ssh com destino a maquina que esta o Fail2Ban

Vejamo com esse comando abaixo que errei varias vezes a senha

# cat /var/log/secure | grep ‘Failed password’ |  sort | uniq -c
  

      2 Jan  2 09:55:15 mail sshd[1661]: Failed password for root from 192.168.0.247 port 46344 ssh2
      1 Jan  2 09:55:31 mail sshd[1664]: Failed password for root from 192.168.0.247 port 46347 ssh2
      1 Jan  2 10:11:35 mail sshd[1766]: Failed password for root from 192.168.0.247 port 46491 ssh2
      2 Jan  2 10:11:43 mail sshd[1766]: Failed password for root from 192.168.0.247 port 46491 ssh2
      1 Jan  2 10:12:07 mail sshd[1770]: Failed password for root from 192.168.0.247 port 46495 ssh2
      1 Jan  2 10:12:09 mail sshd[1770]: Failed password for root from 192.168.0.247 port 46495 ssh2
      1 Jan  2 10:40:22 mail sshd[1842]: Failed password for root from 192.168.0.247 port 46709 ssh2
      1 Jan  2 10:40:26 mail sshd[1842]: Failed password for root from 192.168.0.247 port 46709 ssh2
      1 Jan  2 10:40:30 mail sshd[1842]: Failed password for root from 192.168.0.247 port 46709 ssh2
      1 Jan  2 10:40:34 mail sshd[1844]: Failed password for root from 192.168.0.247 port 46711 ssh2
      1 Jan  2 10:40:38 mail sshd[1844]: Failed password for root from 192.168.0.247 port 46711 ssh2

Agora vejam aqui que após eu errar varias vezes a senha ele criou uma entrada para o IP que eu estava tendando fazer um brute-Force.

# iptables -nvL
Chain INPUT (policy ACCEPT 92 packets, 9238 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  611 54572 fail2ban-SSH  tcp  —  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 53 packets, 9936 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain fail2ban-SSH (1 references)
 pkts bytes target     prot opt in     out     source               destination         
   16  2332 REJECT     all  —  *      *       192.168.0.117        0.0.0.0/0           reject-with icmp-port-unreachable
  576 49716 RETURN     all  —  *      *       0.0.0.0/0            0.0.0.0/0        

Durante 10 Minutos minha maquina não vai mais poder tentar fazer acesso via SSH, isso ja inibi bastante tentativa de Brute-Force

Remova o endereço IP a partir de fail2ban

Para remover o endereço IP banido das regras Iptable fail2ban caso seja você mesmo e acidentalmente você tenha errado a senha e precisa com urgencia acessar remotamente. Execute o seguinte comando no servidor:

# iptables -D fail2ban-SSH 1

Bom galera espero que seja util essa dica!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *