Instale o fail2ban seguindo as instruções da sua distribuição – não irei detalhar esse procedimento nem configuração básica do fail2ban.

ATENÇÃO!!! CRIE SUAS PRÓPRIAS REGRAS! ESTE ARTIGO EXEMPLIFICA COMO UTILIZAR O FAIL2BAN E CRIAR SUAS REGRAS. VERIFIQUE SEMPRE A REGEX E O ARQUIVO QUE DEVERÁ SER PROCESSADO (LOGPATH)!

Este documento foi realizado utilizando o fail2ban 0.9.x – SE VOCÊ UTILIZA A VERSÃO 0.8.x Atualize o fail2ban ou deixe nos comentário a vontade de que a gente traduza esse documento para a versão 0.8.x (Não recomendo!!! – mas a gente faz o que a maioria pede! quando der).

crie o arquivo /etc/fail2ban/filter.d/zimbra-imap.conf

[Definition]
failregex = .*;oip=<HOST>;.* protocol=imap; error=authentication failed for .*

Seguindo um trecho do arquivo /opt/zimbra/log/audit.log, vamos analisar.

Separei a linha para caber direitinho na página
2018-10-09 20:56:08,791 WARN [ImapSSLServer-3] [ip=10.1.171.29;oip=177.27.216.244;via=10.1.171.29(nginx/1.7.1);
ua=Zimbra/8.8.9_GA_3019;cid=16;] security – cmd=Auth; account=ananias@dominio.com.br;
protocol=imap; error=authentication failed for [ananias@domino.com.br], invalid password;

Nossa regex irá testar se:

.*; >> qualquer coisa até o item a seguir
oip=<HOST>; >> se existe ‘oip=<HOST>’ onde ele irá transformar o <HOST> em uma variável que conterá o IP da conexão
.* >> qualquer coisa entre o item anterior e o próximo item
protocol=imap; error=authentication failed for >> procura por essa expressão inteira
.* >> qualquer coisa após a expressão anterior

Analisando nosso filtro, presumimos que a linha acima contem o que queremos. Ou seja, um oip com endereço público/origem da conexão oip=177.27.216.244

e em seguida, ele encontra a nossa próxima expressão: protocol=imap; error=authentication failed for [ananias@dominio.com.br]

Feito isso, podemos testar com o fail2ban-regex e verificar se é verdade!


fail2ban-regex /opt/zimbra/log/audit.log /etc/fail2ban/filter.d/zimbra-imap.conf

e o resultado será algo como:

root@zimbra:/etc/fail2ban# fail2ban-regex /opt/zimbra/log/audit.log /etc/fail2ban/filter.d/zimbra-imap.conf

Running tests
=============

Use failregex filter file : zimbra-imap, basedir: /etc/fail2ban
Use log file : /opt/zimbra/log/audit.log
Use encoding : UTF-8

Results
=======

Failregex: 14 total
|- #) [# of hits] regular expression
| 1) [14] .*;oip=<HOST>;.* protocol=imap; error=authentication failed for .*
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
| [470] Year(?P<_sep>[-/.])Month(?P=_sep)Day 24hour:Minute:Second(?:,Microseconds)?
`-

Lines: 470 lines, 0 ignored, 14 matched, 456 missed [processed in 0.18 sec]
Missed line(s): too many to print. Use –print-all-missed to print all 456 lines

Agora, você pode adicionar o filtro ao seu fail2ban no arquivo /etc/fail2ban/jail.conf


[zimbra-imap]
enabled = true
filter = zimbra-imap
action = iptables[name=imap, port=imap, protocol=tcp]
sendmail-whois[name=imap, dest=kram3r@gmail.com]
logpath = /opt/zimbra/log/audit.log

reinicie o fail2ban (cada um que saiba como reiniciar na sua distro! systemctl service initd rc.d etc)

verifique o status do fail2ban


root@zimbra:/etc/fail2ban# fail2ban-client status zimbra-imap
Status for the jail: zimbra-imap
|- Filter
| |- Currently failed: 0
| |- Total failed: 5
| `- File list: /opt/zimbra/log/audit.log
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 177.27.216.244