«

»

maio 12

Imprimir Post

Fail2Ban

0 Flares Twitter 0 Facebook 0 Filament.io 0 Flares ×

Fail2Ban!

Fail2ban é uma poderosa ferramenta contra força bruta (BruteForce), você conhece?

A ferramenta alem de simples, é muito eficaz contra tentativas indesejáveis de autenticação.

Com ela você consegue monitorar logs, buscando por falhas de logon em diversos tipos de serviços.

Os principais: Apache, Lighttpd, sshd, vsftpd, qmail, Postfix, Courier Mail Server.

É possível também tratar logs através de expressões regulares, mais conhecidas como Regex; (Não sabe o que são regex? Trataremos disso em outro tópico ).

 

Instalação em Debian, CentOS e derivados.

Através de gerenciadores de pacotes:

# Debian’s like (estão nos repositórios oficiais e também nos mais conhecidos, como backports)

apt-get install fail2ban

# RedHat Like

yum install fail2ban

# A partir do fonte,  Instale as dependências

# Debian like

apt-get install build-essential

#RedHat Likes

yum groupinstall ‘Development Tools’

 

Agora, vamos compilar.

cd /usr/src

wget http://sourceforge.net/projects/fail2ban/files/fail2ban-stable/fail2ban-0.8.11/fail2ban-0.8.11.tar.gz

tar zxvf fail2ban-0.8.11.tar.gz

cd fail2ban-0.8.11/

python setup.py install

 

Após a instalação do pacote, a seguinte estrutura de diretórios será criada:

/etc/fail2ban

|– action.d

|– filter.d

 

O diretório “fail2ban” contém os dois principais arquivos de configuração: 
fail2ban.conf – configurações do serviço;
jail.conf – especificações dos serviços monitorados;

Dentro dois diretórios dentro de “fail2ban” contém especificações dos serviços monitorados:

action.d – padrões de “ações” que podem ser executadas;

filter.d – filtros usados para detectar problemas, usando RegEx.

 

Primeiro de tudo, vamos adicionar a sua rede local na whitelist:

vim /etc/fail2ban/jail.conf

No parametro ignoreip: (ex:)

ignoreip = 172.16.0.0/16 10.10.10.0/24

 

Vamos criar uma regra inicial para testar:

→ Uma para o webmail (Zimbra) (porta 80 e 443)

Zimbra:

# vim /etc/fail2ban/jail.conf

[ZMB-WEB]

enabled = true

filter = ZMB-WEB

action = iptables-multiport[name=zimbra, port=”http,https”, protocol=tcp]

sendmail-whois[name=BannedAddress_ZMB, dest=suaconta@seudominio.com.br]

logpath = /opt/zimbra/log/audit.log

maxretry = 4

bantime = 604800

 

Explicação:

1 – Regra ativa

2 – Cria uma nova Chain do iptables, utilizando o parâmetro multiport, com nome ZMB-WEB.

3 – Caso bloquei algo, envia o e-mail com o assunto “BannedAddress_ZMB” para a conta dest=”suaconta@seudominio.com.br”.

4 – Path do log a monitorar.

5 – Tentativas máximas para bloquear.

6 – Banir por 604800 segundos. (Perto de uma semana)

 

Estrutura geral:

A base do arquivo é regra [DEFAULT] .

Por padrão os seguintes atributos são atribuídos globalmente:

 

EX:

ignoreip = 127.0.0.1

bantime = 600

findtime = 600

maxretry = 3

backend = auto

 

Ou então, deixa-las separadas para cada regra, com fizemos acima.

 

Criando a regex:

O campo filter indica um arquivo que deve existir dentro de ”/etc/fail2ban/filter.d”.

O arquivo criado em filter.d precisa ter o nome terminado em ”.conf” para ser utilizado, mas não pode ser usado no campo “filter”.

 

# vim /etc/fail2ban/filter.d/ZMB-WEB.conf

[Definition]

failregex = ;oip=<HOST>;.* security – cmd=Auth; .* protocol=soap; error=authentication failed for .* invalid password;$

WARN .* \[ip=<HOST>;ua=ZimbraWebClient

ignoreregex =

 

É necessário existir o campo [DEFINITION] para a regra ser válida.
O campo mais importante é o “failregex”, onde o filtro é definido.

A regra acima pode ser validade da seguinte forma:
# fail2ban-regex /opt/zimbra/log/audit.log /etc/fail2ban/filter.d/ZMB-WEB.conf
Running tests

=============

Use regex file : /etc/fail2ban/filter.d/ZMB-WEB.conf

Use log file : /opt/zimbra/log/audit.log

Results

=======

Failregex

|- Regular expressions:

| [1] ;oip=<HOST>;.* security – cmd=Auth; .* protocol=soap; error=authentication failed for .* invalid password;$

| [2] WARN .* \[ip=<HOST>;ua=ZimbraWebClient

|

`- Number of matches:

[1] 3 match(es)

[2] 0 match(es)

Ignoreregex

|- Regular expressions:

`- Number of matches:

Summary

======

Addresses found:

[1]

192.168.1.X (Tue Aug 21 13:14:41 2012)

192.168.1.Y (Tue Aug 21 13:30:22 2012)

192.168.1.Z (Tue Aug 21 13:31:08 2012)

(Tue Aug 21 13:31:16 2012)

[2]

Date template hits:

Success, the total number of match is 32

However, look at the above section ‘Running tests’ which could contain important

information.

 

Para liberar um IP bloqueado é preciso verificar a chain e a linha para ser removida.

iptables -nvL –line-numbers

 

Chain INPUT (policy ACCEPT 384M packets, 70G bytes)

num pkts bytes target prot opt in out source destination

1 74953 21M fail2ban-zimbra tcp — * * 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443

2 1145 68988 fail2ban-SSH tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

num pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 215M packets, 1664G bytes)

num pkts bytes target prot opt in out source destination

Chain fail2ban-SSH (1 references)

num pkts bytes target prot opt in out source destination

1 1145 68988 RETURN all — * * 0.0.0.0/0 0.0.0.0/0

Chain ZMB-WEB (1 references)

num pkts bytes target prot opt in out source destination

1 87 19296 DROP all — * * 201.83.182.111 0.0.0.0/0

2 74866 21M RETURN all — * * 0.0.0.0/0 0.0.0.0/0

 

O fail2ban cria uma CHAIN para cada regra, no caso existe as CHAIN “ZMB-WEB.

A sintaxe é “iptables -D <nome da chain> <número da regra>

Para remover a regra 1 da CHAIN ZMB-WEB

iptables -D ZMB-WEB 1

 

O iptables adiciona as regras a partir do topo, então o número da regra é dinâmico.

Qualquer dúvida ou sugestão o espaço para comentários esta ai para isso. =D

 

Rubem De Lima Savordelli (5 Posts)


0 Flares Twitter 0 Facebook 0 Filament.io 0 Flares ×

Sobre o autor

Rubem De Lima Savordelli

Link permanente para este artigo: http://comunidade.aw2net.com.br/fail2ban/

2 comentários

  1. Leandro

    Legal! Valeu!

  2. Jardel Fernandes Fernandes da Costa

    Muito bacana esse POST e sabe do que mais ??? Funciona mesmo :-). Parabéns Rubem …

Deixe uma resposta

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

0 Flares Twitter 0 Facebook 0 Filament.io 0 Flares ×