Tabela de Conteúdos
7.1.1 Fail2Ban
O Fail2Ban é uma aplicação que analisa continuamente os ficheiros log e bloqueia os endereços Internet de onde originaram várias tentativas falhadas de acesso com senha inválida.
O Fail2Ban é extremamente eficaz na prevenção de ataques de força bruta e de negação de serviço (DoS).
Instalação
root@server:~# apt install fail2ban whois
Configuração
A configuração criada durante a instalação ativa o fail2ban para a porta ssh. No entanto outras portas podem ser monitorizadas e protegidas.
A documentação do Fail2Ban aconselha a que toda a configuração seja feita em ficheiros com a extensão .local. Estes podem ser criados copiando o ficheiro de configuração original, com a extensão .conf:
root@server:~# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Toda a configuração é a partir de agora efetuada apenas no ficheiro /etc/fail2ban/jail.local.
Numa primeira fase, definimos os endereços que não estão sujeitos a restrições (endereço local e rede local), durante quanto tempo os endereços atacantes serão banidos (1800 segundos (30 minutos)) e após quantas tentativas (3 tentativas permitidas). Essa configuração deve ser efetuada no ficheiro /etc/fail2ban/jail.local:
# [...] [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/8 192.168.1.0/24 # "bantime" is the number of seconds that a host is banned. bantime = 1800 # [...] # A host is banned if it has generated "maxretry" during the last "findtime" # seconds. findtime = 1800 maxretry = 3 # [...]
Também é definido o endereço email para o qual serão enviados os alertas:
# [...] # # Destination email address used solely for the interpolations in # jail.{conf,local} configuration files. destemail = root@localhost # [...]
Em seguida, é configurada a ação a realizar quando é detetado um possível ataque. Neste caso, o endereço IP do atacante é banido e um email é enviado ao administrador do sistema.
# [...] # # ACTIONS # # [...] # Choose default action. To change, just override value of 'action' with the # interpolation to the chosen action shortcut (e.g. action_mw, action_mwl, etc) in jail.local # globally (section [DEFAULT]) or per specific section action = %(action_mwl)s # [...]
Por último, são definidos os parâmetros do serviço que se pretende proteger, editando a secção JAILS do ficheiro /etc/fail2ban/jail.local. Atenção que caso não sejam usadas as portas standard (por exemplo o serviço “ssh” activo na porta “2222” em vez da habitual porta “22”), os parâmetros deverão ser devidamente ajustados com os valores correctos.
# [...] # # JAILS # # [...] [ssh] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3 # [...]
Finalmente, reiniciar o serviço fail2ban:
root@server:~# systemctl restart fail2ban
Verificação
O comando fail2ban-client status
permite obter mais informações acerca o estado do serviço fail2ban:
root@server:~# fail2ban-client status Status |- Number of jail: 5 `- Jail list: proftpd, postfix, ssh, apache, dovecot
O resultado mostra que estão a ser monitorizados 5 serviços…
root@server:~# fail2ban-client status ssh Status for the jail: ssh |- filter | |- File list: /var/log/auth.log | |- Currently failed: 0 | `- Total failed: 9 `- action |- Currently banned: 2 | `- IP list: 103.41.124.33 211.154.20.44 `- Total banned: 2
… e que estão atualmente banidos 2 endereços IP após 9 tentativas de acesso ilegal ao serviço “ssh”.
Notificações via e-mail
A cada (re)início do serviço fail2ban um email de notificação será enviado ao administrador do sistema:
Subject: [Fail2Ban] ssh: started on server Date: Mon, 27 Apr 2015 22:08:16 +0000 From: Fail2Ban <fail2ban@home.lan> To: root@localhost Hi, The jail ssh has been started successfully. Regards, Fail2Ban
E a cada ataque que despolete uma ação defensiva, o administrador será também notificado:
Subject: [Fail2Ban] ssh: banned 219.148.120.238 Date: Mon, 27 Apr 2015 22:15:59 +0000 From: Fail2Ban <fail2ban@home.lan> To: root@localhost Hi, The IP 219.148.120.238 has just been banned by Fail2Ban after 3 attempts against ssh. Here are more information about 219.148.120.238: % [whois.apnic.net node-7] % Whois data copyright terms http://www.apnic.net/db/dbcopyright.html inetnum: 219.148.0.0 - 219.148.159.255 netname: CHINANET-HE descr: CHINANET hebei province network descr: China Telecom descr: No.31,jingrong street descr: Beijing 100032 country: CN admin-c: CH93-AP tech-c: BR3-AP status: ALLOCATED NON-PORTABLE changed: ipadmin@north.cn.net 20060526 mnt-by: MAINT-CHINANET mnt-lower: MAINT-CHINANET-HE mnt-routes: MAINT-CHINANET-HE source: APNIC # [...] Lines containing IP:219.148.120.238 in /var/log/auth.log Apr 27 22:07:25 server sshd[27043]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=219.148.120.238 user=root Apr 27 22:07:26 server sshd[27043]: Failed password for root from 219.148.120.238 port 59879 ssh2 Apr 27 22:07:29 server sshd[27046]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=219.148.120.238 user=root Apr 27 22:07:31 server sshd[27046]: Failed password for root from 219.148.120.238 port 60898 ssh2 Apr 27 22:07:34 server sshd[27048]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=219.148.120.238 user=root Apr 27 22:07:36 server sshd[27048]: Failed password for root from 219.148.120.238 port 33737 ssh2 Regards, Fail2Ban
O pacote Fail2Ban pode ser utilizado para proteger servidores de e-mail, ftp, web, ou mesmo criar outro tipo de filtros, bastando para tal editar o ficheiro /etc/fail2ban/jail.local para configurar os vários serviços que se pretendem proteger.