O aplicativo fail2ban, é um agente que monitora os logs, e verifica a quantidade de tentativas de conexão sem sucesso, bloqueando o IP suspeito, após determinado número de insucessos.
O fail2ban pode monitorar a tentativa de login nos serviços ssh, pam, xinetd, apache, vsftpd, proftpd, wuftpd, postfix, couriersmtp, courierauth, sasl e named, e em uma ação pro-átiva bloquear o possível ataque, adicionando uma regra no firewall.
Fail2ban é eficaz em parar ataques de força bruta (brute force), que são comum a hosts conectados à Internet, de maneira elegante, confiável e funcional, sem causar prejuízos aos usuários autênticos dos sistemas e serviços oferecidos.
Este aplicativo pode ser encontrado em sua página oficial http://www.fail2ban.org; é desenvolvido na linguagem python, que o torna portável para praticamente todo sistema operacional.
Em seu site oficial, na seção de downloads (http://www.fail2ban.org/wiki/index.php/Downloads), encontra-se a lista de distribuições que já possuem pacotes para seus fontes. No momento em que este artigo foi escrito, as distribuições eram: Gentoo, Debian, Ubuntu, Fedora, Red Hat/CentOS, Gral Linux, Ipcop, Mandriva, SUSE, openSUSE, ArchLinux, Slackware, FreeBSD e Mac OS X.
Instalação do fail2ban
Requisitos:
python-2.3 ou superior; (http://www.python.org)
Requisitos Opcionais:
gamin-0.0.21 ou superior; (http://www.gnome.org/~veillard/gamin)
Instalação pelos fontes:
wget http://sourceforge.net/projects/fail2ban/files/fail2ban-stable/fail2ban-0.8.4/fail2ban-0.8.4.tar.bz2
tar xvfj fail2ban-0.8.4.tar.bz2 -C /tmp
cd /tmp/fail2ban-0.8.4
python setup.py install
Instalação Debian-like:
aptitude install fail2ban;
Instalação RedHat-like:
1º baixe o rpm adequando para versão Enterprise Linux (EL)utilizada:
EL6:
wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm; ou
EL5:
wget http://mirrors.ucr.ac.cr/epel/5/i386/epel-release-5-3.noarch.rpm; ou
EL4:
wget http://download.fedoraproject.org/pub/epel/4/i386/epel-release-4-10.noarch.rpm;
2º Considerando Centos 5.5, proceda com o comando abaixo para configurar o repositório EPEL:
wget http://mirrors.ucr.ac.cr/epel/5/i386/epel-release-5-3.noarch.rpm
rpm -ivh epel-release-5-3.noarch.rpm
3º e ultimo passo, instalar o fail2ban.
yum install fail2ban;
Configuração
Após a instalação o fail2ban disponibilizará o diretório de configuração '/etc/fail2ban'.
ls /etc/fail2ban/
action.d fail2ban.conf filter.d jail.conf
Os arquivos interessantes para configuração são os destacados de amarelo, vejamos primeiro o fail2ban.conf.
8 [Definition]
9
10 # Option: loglevel
11 # Notes.: Set the log level output.
12 # 1 = ERROR
13 # 2 = WARN
14 # 3 = INFO
15 # 4 = DEBUG
16 # Values: NUM Default: 3
17 #
18 loglevel = 3
19
20 # Option: logtarget
21 # Notes.: Set the log target. This could be a file, SYSLOG, STDERR or STDOUT.
22 # Only one log target can be specified.
23 # Values: STDOUT STDERR SYSLOG file Default: /var/log/fail2ban.log
24 #
25 logtarget = /var/log/fail2ban.log
As linhas importantes deste arquivo são a 18 e a 25, que definem o nível de informação no log e o arquivo de log do fail2ban, para acompanhamento e possíveis correções.
Já no arquivo '/etc/jail.conf', é onde tem-se a maior parte da configuração.
..
18 [DEFAULT]
19
20 # "ignoreip" can be an IP address, a CIDR mask or a DNS host
21 ignoreip = 127.0.0.1
22 bantime = 600
23 maxretry = 3
..
Nas diretivas:
- ignoreip: é listado os endereços de IP (ex: 127.0.0.1), ou Mascara CIDR-Classless Inter Domain Routing (ex: 192.168.12.0/23, onde 192.168.12.0/23 = 192.168.12.0/24 + 192.168.13.0/24), ou DNS host (ex: perfumes.incolume.com.br ou brito.blog.incolume.com.br), que deverão ser ignorados pelo fail2ban;
- bantime: é definido o tempo em segundos, que o IP ofensor ficará banido e/ou bloqueado para o serviço;
- maxretry: é definido a quantidade máxima de tentativas de acesso.
..
32 # Destination email address used solely for the interpolations in
33 # jail.{conf,local} configuration files.
34 destemail = root@localhost
35
36 #
..
..
40 # Default banning action (e.g. iptables, iptables-new,
41 # iptables-multiport, shorewall, etc) It is used to define
42 # action_* variables. Can be overriden globally or per
43 # section within jail.local file
44 banaction = iptables-multiport
..
..
90 [ssh]
91
92 enabled = true
93 port = ssh
94 filter = sshd
95 logpath = /var/log/auth.log
96 maxretry = 6
97 sendmail-whois[name=SSH, dest=brito@incolume.com.br, sender=perfumes@incolume.com.br]
..
Finalmente a definição de segurança para os serviços, os quais estão destacados entre colchetes como no fragmento acima, [ssh], [pam-generic], e assim sucessivamente. Estre trecho conterá as mesmas diretivas, para qualquer serviço configurado.
Exemplo de monitoração ao PAM e xinetd:
..
[pam-generic]
enabled = false
# pam-generic filter can be customized to monitor specific subset of 'tty's
filter = pam-generic
# port actually must be irrelevant but lets leave it all for some possible uses
port = all
banaction = iptables-allports
port = anyport
logpath = /var/log/auth.log
maxretry = 6
[xinetd-fail]
enabled = false
filter = xinetd-fail
port = all
banaction = iptables-multiport-log
logpath = /var/log/daemon.log
maxretry = 2
..
Exemplo de monitoração ao apache:
..
#
# HTTP servers
#
[apache]
enabled = false
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6
# default action is now multiport, so apache-multiport jail was left
# for compatibility with previous (<0.7.6-2) releases
[apache-multiport]
enabled = false
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6
[apache-noscript]
enabled = false
port = http,https
filter = apache-noscript
logpath = /var/log/apache*/*error.log
maxretry = 6
[apache-overflows]
enabled = false
port = http,https
filter = apache-overflows
logpath = /var/log/apache*/*error.log
maxretry = 2
..
Exemplo de monitoração ao FTP:
..
#
# FTP servers
#
[vsftpd]
enabled = false
port = ftp,ftp-data,ftps,ftps-data
filter = vsftpd
logpath = /var/log/vsftpd.log
# or overwrite it in jails.local to be
# logpath = /var/log/auth.log
# if you want to rely on PAM failed login attempts
# vsftpd's failregex should match both of those formats
maxretry = 6
[proftpd]
enabled = false
port = ftp,ftp-data,ftps,ftps-data
filter = proftpd
logpath = /var/log/proftpd/proftpd.log
maxretry = 6
[wuftpd]
enabled = false
port = ftp,ftp-data,ftps,ftps-data
filter = wuftpd
logpath = /var/log/auth.log
maxretry = 6
..
Exemplo de monitoração ao DNS:
..
# DNS Servers
# These jails block attacks against named (bind9). By default, logging is off
# with bind9 installation. You will need something like this:
#
# logging {
# channel security_file {
# file "/var/log/named/security.log" versions 3 size 30m;
# severity dynamic;
# print-time yes;
# };
# category security {
# security_file;
# };
# };
#
# in your named.conf to provide proper logging
# Word of Caution:
# Given filter can lead to DoS attack against your DNS server
# since there is no way to assure that UDP packets come from the
# real source IP
[named-refused-udp]
enabled = false
port = domain,953
protocol = udp
filter = named-refused
logpath = /var/log/named/security.log
[named-refused-tcp]
enabled = false
port = domain,953
protocol = tcp
filter = named-refused
logpath = /var/log/named/security.log
..
Versão PDF
Referências:
http://sourceforge.net/projects/fail2ban/files/fail2ban-stable/fail2ban-0.8.4/
http://fedoraproject.org/wiki/EPEL
https://fedoraproject.org/keys
http://en.wikipedia.org/wiki/CIDR_notation
http://compnetworking.about.com/od/workingwithipaddresses/a/cidr_notation.htm
http://www.petri.co.il/whats_cidr.htm
Comentários