Instalação e Configuração Fail2ban


Em todos os clientes que a máquina tenha IP externo devem ter Fail2ban instalados e configurados !
Nesse documento pressupõe-se, que vc já saiba trabalhar com o apt(gerenciador de pacotes do Debian). Se não o google, vai lhe ajudar. 


snep-certi:~# apt-get install fail2ban
Lendo listas de pacotes... Pronto
Construindo árvore de dependências
Lendo informação de estado... Pronto
Pacotes sugeridos:
python-gamin
Os NOVOS pacotes a seguir serão instalados:
fail2ban
0 pacotes atualizados, 1 pacotes novos instalados, 0 a serem removidos e 30 não atualizados.
É preciso baixar 96,2 kB de arquivos.
Depois desta operação, 598 kB adicionais de espaço em disco serão usados.
Obter:1 http://ftp.debian.org/debian/ squeeze/main fail2ban all 0.8.4-3+squeeze1 [96,2 kB]
Baixados 96,2 kB em 2s (34,6 kB/s)
Selecionando pacote previamente não selecionado fail2ban.
(Lendo banco de dados ... 47958 ficheiros e directórios actualmente instalados.)
Desempacotando fail2ban (de .../fail2ban_0.8.4-3+squeeze1_all.deb) ...
Processando gatilhos para man-db ...
Configurando fail2ban (0.8.4-3+squeeze1) ...
insserv: script op-panel: service asterisk already provided!
Processando gatilhos para python-central ...

OK, instalado fail2ban.

 

  • Edite o arquivo:  /etc/fail2ban/jail.conf  e Adicione a configuração abaixo para o Asterisk:

 

snep-certi:~# vim /etc/fail2ban/jail.conf

[asterisk]

enabled  = true
filter   = asterisk
action   = iptables-allports[name=asterisk, protocol=all]
          sendmail-whois[name=Asterisk, dest=suporte@opens.com.br, sender=fail2ban@DOMINIOCLIENTE]
logpath  = /var/log/asterisk/full
maxretry = 5
bantime  = 172800


Obs: Para Asterisk 13

:~# vim /etc/fail2ban/jail.conf

#[asterisk-tcp]

#enabled = false
#filter = asterisk
#port = 5060,5061
#protocol = tcp
#logpath = /var/log/asterisk/messages

#[asterisk-udp]

#enabled = false
#filter = asterisk
#port = 5060,5061
#protocol = udp
#logpath = /var/log/asterisk/messages

[asterisk-iptables]

enabled = true
filter = asterisk
action = iptables-allports[name=ASTERISK, protocol=all]
sendmail-whois[name=ASTERISK, dest=root, sender=fail2ban@example.org]
logpath = /var/log/asterisk/full
maxretry = 5
bantime = 259200

** Lembre-se de na linha ignoreIP, colocar os ips da opens. (piscar o olho)

ignoreip = 127.0.0.1 200.146.46.130 200.146.46.131 200.146.46.46 201.47.42.42

 

  • Agora entre na pasta: 

snep-certi:~# cd /etc/fail2ban/filter.d/

  • e crie o arquivo asterisk.conf com o conteúdo abaixo(o nome do arquivo deve ser igual ao criado no jail.conf  
 Como criamos filter = asterisk, o arquivo deve ser asterisk.conf

 

CONTEUDO: 

# Fail2Ban configuration file
#
#
# $Revision: 250 $
#
[INCLUDES]
[Definition]
#_daemon = asterisk
# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P\S+)
# Values: TEXT
#
# Asterisk 1.4 use the following failregex
failregex = NOTICE.* .*: Registration from '.*' failed for '' - Wrong password
NOTICE.* .*: Registration from '.*' failed for '' - No matching peer found
NOTICE.* .*: Registration from '.*' failed for '' - Username/auth name mismatch
NOTICE.* .*: Registration from '.*' failed for '' - Device does not match ACL
NOTICE.* .*: Registration from '.*' failed for '' - Peer is not supposed to register
NOTICE.* .*: Registration from '.*' failed for '' - ACL error (permit/deny)
NOTICE.* .*: Registration from '.*' failed for '' - Device does not match ACL
NOTICE.* failed to authenticate as '.*'$
NOTICE.* .*: No registration for peer '.*' \(from \)
NOTICE.* .*: Host failed MD5 authentication for '.*' (.*)
NOTICE.* .*: Failed to authenticate user .*@.*

NOTICE.* .*: Registration from '.*' failed for ':.*' - No matching peer found
NOTICE.* .*: Registration from '.*' failed for '' - Device does not match ACL
NOTICE.* .*: Registration from '.*' failed for '' - Peer is not supposed to register
NOTICE.* .*: Registration from '.*' failed for '' - ACL error (permit/deny)
NOTICE.* .*: Registration from '.*' failed for '' - Device does not match ACL
NOTICE.* failed to authenticate as '.*'$
NOTICE.* .*: No registration for peer '.*' \(from \)
NOTICE.* .*: Host failed MD5 authentication for '.*' (.*)
NOTICE.* .*: Failed to authenticate user .*@.*
NOTICE.* .*: Sending fake auth rejection for device .*\\>;tag=.*

 

# In Asterisk 1.8 use the same as above, but after add :.* before the single quote. This is because in Asterisk 1.8, the log file includes a port number which 1.4 did not.
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

  • Esse arquivo basicamente tem expressões regulares em que o fail2ban, irá verificar cada vez que a linha correr no asterisk. Se bater, ele poderá bloquear dependendo de como estiver a configuração; 

 

lembre de dar um restart no servc:

snep-certi:/etc/fail2ban/filter.d# /etc/init.d/fail2ban restart
Restarting authentication failure monitor: fail2ban

.

 

Veja um exemplo de Brute force, em que o fail2ban poderia ter resolvido o problema:

bruteff.png

Resultado é que o atacante conseguiu descobrir a senha do ramal. Que por sinal muito complexa: 35913591, e fez várias ligações internacionais; 

 

Mas com o fail2ban instalado esse problema é resolvido tranquilamente. 

 

Para maiores detalhes, de configuração por exemplo leia o manual abaixo:

Referencias: http://intranet.opens.com.br/mediawiki/index.php/Fail2ban  (Jean Carlos Coelho)