Para criar o sistema de proteção contra bruteforce no Zimbra vamos utilizar o Fail2ban

1 – Em seu servidor Zimbra (estamos utilizando o Centos7), digite o seguinte comando para instalar o fail2ban:

                       # yum install fail2ban -y
Email Corporativo
Baixando o Fail2ban no centos

.

.


2 –
Em seguida, crie o arquivo /etc/fail2ban/jail.local ,

Email Corporativo
Criando o arquivo jail.local

.

3- Dentro dele adicione o seguinte conteúdo (dentro da linha ignoreip = 127.0.0.1/8 seuip/32… substitua seuip pelo número de ip dos servidores que deseja excluir da verificação do fail2ban):

[DEFAULT] 
# "ignoreip" can be a list of IP addresses, CIDR masks or DNS hosts. Fail2ban will not ban a host which matches an address in this list.

# Several addresses can be defined using space (and/or comma) separator.

# ignoreip = 127.0.0.1/8 ::1 10.137.26.29/32

ignoreip = 127.0.0.1/8 seuip/32 seuip2/24
banaction = route

# A host is banned if it has generated "maxretry" during the last "findtime" seconds.
# 10 minute (in seconds)
# findtime  = 600
# "bantime" is the number of seconds that a host is banned.
# 10 hour (in seconds)
# bantime  = 3600
# "maxretry" is the number of failures before a host get banned.
# maxretry = 5

.

.


4 –
Em seguida, crie o arquivo /etc/fail2ban/jail.d/zimbra.local e dentro dele coloque (a linha maxretry refere-se ao número máximo de tentativas de acesso antes de banir o ip):

[zimbra-smtp]
enabled = true
filter = zimbra-smtp
port = 25,465,587
logpath = /var/log/zimbra.log
maxretry = 3
findtime = 600
bantime = 3600

[zimbra-webmail]
enabled = true
filter = zimbra-webmail
port = 80,443
logpath = /opt/zimbra/log/mailbox.log
maxretry = 3
findtime = 600
bantime = 3600

[zimbra-admin]
enabled = true
filter = zimbra-admin
port = 7071,9071
logpath = /opt/zimbra/log/mailbox.log
maxretry = 3
findtime = 600
bantime = 3600
Email Corporativo
Criando o arquivo zimbra.local



Criando os filtros para os serviços do zimbra:

.

Webmail: Para a configuração do fail2ban no webmail, crie o arquivo /etc/fail2ban/filter.d/zimbra-webmail.conf e dentro dele coloque:

[Definition]
#
failregex = \[oip=<HOST>;.*SoapEngine - handler exception: authentication failed for .*, account not found$
            INFO .*;oip=<HOST>;.* SoapEngine - handler exception: authentication failed for .*, invalid password$
ignoreregex =
Email Corporativo
Criando o arquivo zimbra-webmail.conf

.

.

SMTP: Para a configuração do fail2ban no smtp, crie o arquivo /etc/fail2ban/filter.d/zimbra-smtp.conf e dentro dele coloque:

[Definition]
#
failregex = postfix\/submission\/smtpd\[\d+\]: warning .*\[<HOST>\]: SASL \w+ authentication failed: authentication failure$
            postfix\/smtps\/smtpd\[\d+\]: warning: .*\[<HOST>\]: SASL \w+ authentication failed: authentication failure$
ignoreregex =
Email Corporativo
Aquivo zimbra-smtp.conf

.

.

Painel admin Zimbra: Para a configuração do fail2ban painel de administração do zimbra, crie o arquivo /etc/fail2ban/filter.d/zimbra-admin.conf e dentro dele coloque:

[Definition]
#
failregex = INFO .*;ip=<HOST>;.* SoapEngine - handler exception: authentication failed for .*, invalid passsword$
            INFO .*ip=<HOST>;.* SoapEngine - handler exception: authentication failed for .*, account not found$

ignoreregex =
Email Corporativo
Criando o arquivo zimbra-admin.conf

.

.

Vamos Restartar o serviço e habilitá-lo com os comandos:

# systemctl restart fail2ban 
# systemctl status fail2ban 
# systemctl enable fail2ban 
Email Corporativo
Serviço do fail2ban rodando

.

Trabalhando com o fail2ban

Com as configurações feitas, o fail2ban já está trabalhando sozinho, analisando os logs e bloqueando ips que estão tentando acessar os serviços com ataques de dicionário/bruteforce, porém, é possível trabalhar manualmente com ele:

Para validar as jails(conjunto de regras criadas):

# fail2ban-client status
Email Corporativo
fail2ban-client status, em jail list podemos ver as regras de cada bloqueio

.

.

Verificando as regras e bloqueios de cada Jail:

# fail2ban-client status nomedajail
Email Corporativo
Criamos 3 Jails: zimbra-admin, zimbra-smtp, zimbra-admin.

.

.

Bloquear ip manualmente:

# fail2ban-client set nomedajail banip ip.para.bloquear.x
Email Corporativo
bloqueando ip manualmente

Desbanir um ip manualmente:

# fail2ban-client set nomedajail unbanip ip.para.desbloquear
Email Corporativo