Fail2Ban

De Biblioteca Unix

Conteúdo

Programa

Sobre

O Fail2Ban é uma ferramenta que analisa as tentativas em portas, como por exemplo o SSH, quando um certo IP tenta realizar muitas conexões em uma porta sem sucesso, como se estivesse testando em um intervalo de tempo muito pequeno, existem grandes chances de um invasor esteja executando um software de força bruta contra os o serviço, é neste contexto que o Fail2Ban entra, ele vai detectar isso e banir este IP por um período de tempo usando o Iptables.

Debian Squeeze 8.0

Instalando os Pacotes necessários

Para instalar o fail2ban no Debian Jessie, basta instalar o pacote correspondente:

# apt-get install fail2ban

por padrão ele só vem ativo para olhar a porta 22.

Configurações

Podemos escrever expressões regulares e filtrar quaisquer tipos de portas que sejam necessárias, contudo, dependendo do serviço desejado já existem configurações que podem vir a nos atender, veja os serviços que são oferecidos por padrão (/etc/fail2ban/fail2ban.d).

Banimento Incremental

Uma solução interessante feita pelo [Walter Heitman Jr http://blog.shanock.com/fail2ban-increased-ban-times-for-repeat-offenders/] em seu blog, foi usar o próprio Fail2bBan para criar novas regras de bloqueio com mais tempo para aqueles endereços IP mais 'ofensivos'. Primeiro precisamos criar o regex para lidar com isso:

# vim /etc/fail2ban/filter.d/f2b-loop.conf
# Fail2Ban configuration file for subsequent bans
#
[INCLUDES]
before = common.conf

[Definition]
failregex = \]\s+Ban\s+<HOST>
ignoreregex = \[f2b-loop.*\]\s+Ban\s+<HOST>
#
# Author: Walter Heitman Jr.

depois disso, vamos criar o arquivo jail.local com as nossas configurações adicionais:

# vim /etc/fail2ban/jail.local
[f2b-loop2]
enabled = true
filter = f2b-loop
action = %(banaction)s[name=%(__name__)s, protocol="%(protocol)s", chain="%(chain)s"]
bantime = 86400 ;1 day
findtime = 604800 ;1 week
logpath = /var/log/fail2ban.log
maxretry = 2 

[f2b-loop3]
enabled = true
filter = f2b-loop
action = %(banaction)s[name=%(__name__)s, protocol="%(protocol)s", chain="%(chain)s"]
bantime	= 604800 ;1 week
findtime = 2592000 ;1 month
logpath = /var/log/fail2ban.log
maxretry = 3

[f2b-loop4]
enabled = true
filter = f2b-loop
action = %(banaction)s[name=%(__name__)s, protocol="%(protocol)s", chain="%(chain)s"]
bantime = 2592000 ;1 month
findtime = 15552000 ;6 months
logpath = /var/log/fail2ban.log
maxretry = 6

[f2b-loop5]
enabled = true
filter = f2b-loop
action = %(banaction)s[name=%(__name__)s, protocol="%(protocol)s", chain="%(chain)s"]
bantime = 15552000 ;6 months
findtime = 31536000 ;1 year
logpath = /var/log/fail2ban.log
maxretry = 9 

aqui eu fiz uma mudança pois no Debian faltava uma entrada para action=. Feito isso, basta reiniciar o serviço:

# /etc/init.d/failt2ban restart

e pronto.

Debian Squeeze 6.0/Ubuntu Server 10.04 LTS

Instalando os Pacotes necessários

Para instalar o fail2ban no Debian Lenny e Ubuntu Server, basta instalar o pacote correspondente:

# apt-get install fail2ban

por padrão ele só vem ativo para olhar a porta 22.

Configurações

Podemos escrever expressões regulares e filtrar quaisquer tipos de portas que sejam necessárias, contudo, dependendo do serviço desejado já existem configurações que podem vir a nos atender, veja os serviços que são oferecidos por padrão (/etc/fail2ban/fail2ban.conf):

[ssh-ddos]
enabled = true

[apache]
enabled = true

[apache-overflows]
enabled = true

[vsftpd]
enabled  = true

[postfix]
enabled  = true

[named-refused-udp]
enabled  = true

[named-refused-tcp]
enabled  = true

a entrada enable pode ser true ou false, o ideal é deixar true somente os serviços que o servidor estiver efetivamente executando.

Adicionando o Dovecot no fail2ban

Crie o arquivo com a expressão regular que vai buscar as tentativas e com isso gerar as regras de bloqueio, com o seguinte conteúdo:

# vim /etc/fail2ban/filter.d/dovecot-pop3imap.conf
[Definition]
failregex = (?: pop3-login|imap-login): (?:Authentication failure|Aborted login \(auth failed|Aborted login \
\(tried to use disabled|Disconnected \(auth failed).*rip=(?P<host>\S*),.*
ignoreregex =

e depois adicione a entrada que vai ativar nossa expressão regular ao arquivo de configuração:

# vim /etc/fail2ban/jail.conf
[dovecot-pop3imap]
enabled = true
filter = dovecot-pop3imap
action = iptables-multiport[name=dovecot-pop3imap, port="pop3,imap,pop3s,imaps", protocol=tcp]
logpath = /var/log/mail.log
maxretry = 20
findtime = 1200
bantime = 1200

reinicialize o serviço do fail2ban para ativar as novas configurações:

# /etc/init.d/fail2ban restart

pronto, nosso POP3 e IMAP estão mais seguros.

Tornando o Fail2Ban capaz de tratar logs do Snort

Edite o arquivo de interpretação de datas do fail2bain para que ele compreenda a saída de timestamp do Snort:

# vim /usr/share/fail2ban/server/datedetector.py

e adicione o seguinte:

# snort 08/23-20:03:12.062498
template = DateStrptime()
template.setName("Month/Day-Hour:Minute:Second[.Millisecond]")
template.setRegex("\d{2}/\d{2}-\d{2}:\d{2}:\d{2}")
template.setPattern("%m/%d-%H:%M:%S")
self.__templates.append(template)

isso vai casar com o padrão do alert_csv que definimos no Snort. Vamos agora criar a regra dentro do fail2ban:

# vim /etc/fail2ban/filter.d/p2p.conf
[Definition]
failregex = ,<HOST>
ignoreregex = 

e a regra no jail.conf:

# vim /etc/fail2ban/jail.conf
[p2p]
enabled  = enable
protocol = tcp
port = 1:65535
filter   = p2p
logpath  = /var/log/snort/p2p
maxretry = 5

reinicialize o fail2ban para garantir que nosso ambiente vai estar de fato filtrando as entradas:

# /etc/init.d/fail2ban restart

pronto, nosso filtro em tempo real de P2P está configurado.

FreeBSD 8.0

Instalando os Pacotes necessários

Podemos, como já sabemos, instalar tanto compilando pelo Ports, como pelos pacotes pré-compilados, vamos usar os pacotes pré-compilados por comodidade:

# pkg_add -r py26-fail2ban

se você não tiver todas as dependências, o pkg_add vai buscá-las, a principal dependência no caso é o Python. Vamos supor que você está com um sistema limpo e vai precisar instalar todos os pacotes necessários, então:

#  pkg_add -r py26-sqlite3 py26-bsddb  py26-gdbm

Configurações

Uma vez instalado os pacotes, precisamos ativar o fail2ban que foi instalado por padrão em /usr/local como os outros ports externos aos programas oficiais. Vamos ativá-lo então:

# /usr/local/etc/rc.d/fail2ban rcvar >> /etc/rc.conf

edite o /etc/rc.conf e altere a entrada do fail2ban para:

# fail2ban
fail2ban_enable="YES"

note que os arquivos de configuração no FreeBSD são um pouco diferentes no sentido de qual firewall utilizar. No nosso caso, como o FreeBSD não tem iptables e sim o ipfw, ative a linha relativa a ele em /usr/local/etc/fail2ban/jail.conf:

[ssh-ipfw]
enabled  = true

agora vamos testar inicializando o fail2ban:

# /usr/local/etc/rc.d/fail2ban start

pronto, nosso ambiente agora também tem o fail2ban executando.

CentOS/RedHat 5.5

Instalando os Pacotes necessários

Será necessário instalar o repositório do DAG, pois no padrão não existe o pacote fail2ban, depois de configurar este repositório, vamos instalar o seu pacote:

# yum install fail2ban

Configurações

Podemos escrever expressões regulares e filtrar quaisquer tipos de portas que sejam necessárias, contudo, dependendo do serviço desejado já existem configurações que podem vir a nos atender, veja os serviços que são oferecidos por padrão (/etc/fail2ban.conf):

[Apache]
enabled = false

[SSH]
enabled = true

sugerimos apenas ativar os módulos que interessam, diferente do Debian/Ubuntu, só temos 2 módulos por padrão, mas é mais simples editar uma mensagem para o usuário que for bloqueado, veja a entrada [MAIL], se você tiver um servidor de e-mail local, pode-se deixar ativado pois um e-mail será enviado para o administrador toda vez que um novo IP for bloqueado, em servidores com alto tráfego contudo, pode não ser interessante, já que o número de IPs bloqueados por dia pode ser grande.


--Brivaldo 08h59min de 23 de maio de 2011 (AMT)

Ferramentas pessoais