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!