O Zimbra Collaboration Suite Open-Source Edition possui várias ferramentas poderosas para garantir a segurança da informação. Entre elas, — uma solução para proteger o servidor de e-mail contra ataques de botnets, ClamAV — um antivírus capaz de verificar arquivos e e-mails recebidos em busca de infecções por malware, além de — um dos melhores filtros de spam disponíveis hoje. No entanto, essas ferramentas não conseguem garantir proteção ao Zimbra OSE contra um tipo de ataque, como o de força bruta. Um método não tão elegante, mas ainda bastante eficaz, a tentativa de adivinhação de senhas usando um dicionário especial traz não só a probabilidade de um sucesso na invasão com todas as consequências resultantes, mas também cria uma carga significativa no servidor que processa todas as tentativas fracassadas de acesso ao servidor com Zimbra OSE.

Em princípio, é possível se proteger contra força bruta utilizando os recursos padrão do Zimbra OSE. As configurações da política de segurança de senhas permitem definir o número de tentativas de senha malsucedidas após as quais a conta potencialmente atacada é bloqueada. O principal problema desse tipo de abordagem é que surgem situações nas quais as contas de um ou mais funcionários podem ser bloqueadas devido a um ataque de força bruta com o qual não têm nenhuma relação, e a consequente inatividade para os funcionários pode causar grandes prejuízos à empresa. Portanto, essa opção de proteção contra força bruta é melhor não ser utilizada.

Para se proteger contra ataques de força bruta, uma ferramenta especialmente projetada chamada DoSFilter é muito mais adequada. Ela está integrada ao Zimbra OSE e pode automaticamente interromper a conexão com o Zimbra OSE via HTTP. Em outras palavras, o funcionamento do DoSFilter é semelhante ao princípio do PostScreen, mas é usado para um protocolo diferente. Originalmente destinado a limitar o número de ações que um único usuário pode realizar, o DoSFilter também pode garantir proteção contra ataques de força bruta. Sua principal diferença em relação à ferramenta incorporada no Zimbra é que, após um certo número de tentativas malsucedidas, ele bloqueia não o próprio usuário, mas o endereço IP a partir do qual estão sendo feitas múltiplas tentativas de acesso a uma determinada conta. Isso permite que o administrador do sistema não apenas se proteja de ataques de força bruta, mas também evite o bloqueio de funcionários da empresa, simplesmente adicionando a rede interna da empresa à lista de endereços e sub-redes confiáveis.
Uma grande vantagem do DoSFilter é que, além de lidar com numerosas tentativas de acesso a uma determinada conta, essa ferramenta pode automaticamente bloquear aqueles invasores que obtiveram os dados de autenticação de um funcionário e, em seguida, conseguiram acessar sua conta, enviando centenas de solicitações ao servidor.
O DoSFilter pode ser configurado usando os seguintes comandos de console:
- zimbraHttpDosFilterMaxRequestsPerSec — Com este comando, é possível definir o número máximo de conexões permitido para um único usuário. Por padrão, esse valor é de 30 conexões.
- zimbraHttpDosFilterDelayMillis — Com este comando, é possível definir um atraso em milissegundos para conexões que excederem o limite definido no comando anterior. Além de valores inteiros, o administrador pode especificar 0 para não haver atraso algum e -1 para que todas as conexões que ultrapassam o limite definido simplesmente sejam interrompidas. Por padrão, esse valor é -1.
- zimbraHttpThrottleSafeIPs — Com este comando, o administrador pode especificar endereços IP e sub-redes confiáveis, sobre os quais as restrições mencionadas acima não se aplicarão. Vale ressaltar que a sintaxe deste comando pode mudar dependendo do resultado desejado. Por exemplo, ao inserir o comando zmprov mcf zimbraHttpThrottleSafeIPs 127.0.0.1, você irá sobrescrever completamente a lista e deixar apenas um endereço IP. Se você inserir o comando zmprov mcf +zimbraHttpThrottleSafeIPs 127.0.0.1, o endereço IP que você forneceu será adicionado à lista branca. Da mesma forma, usando o sinal de subtração, você pode remover qualquer IP da lista de permitidos.
Vale ressaltar que o DoSFilter pode criar uma série de problemas ao utilizar extensões do Zextras Suite Pro. Para evitar isso, recomendamos aumentar o número de conexões simultâneas de 30 para 100 com o comando zmprov mcf zimbraHttpDosFilterMaxRequestsPerSec 100. Além disso, recomendamos adicionar a rede interna da empresa à lista de permitidos. Isso pode ser feito com o comando zmprov mcf +zimbraHttpThrottleSafeIPs 192.168.0.0/24. Após fazer quaisquer alterações no DoSFilter, é essencial reiniciar o servidor de e-mail usando o comando zmmailboxdctl restart.
O principal problema do DoSFilter é que ele opera no nível da aplicação e, portanto, só pode limitar as ações que os invasores tentam realizar no servidor, sem impedir a possibilidade de se conectar ao servidor. Como resultado, as solicitações de autenticação ou envio de e-mails feitas ao servidor, embora resultem em falha, continuarão a ser um clássico ataque DoS, que não pode ser interrompido em um nível tão alto.
Para garantir a segurança total do seu servidor corporativo com Zimbra OSE, é possível utilizar uma solução como o Fail2ban, que é um framework capaz de monitorar constantemente os logs dos sistemas de informação em busca de ações repetitivas e bloquear o invasor alterando as configurações do firewall. O bloqueio em um nível tão baixo permite desconectar invasores diretamente no momento da conexão IP com o servidor. Dessa forma, o Fail2Ban pode complementar perfeitamente a proteção estabelecida pelo DoSFilter. Vamos descobrir como integrar o Fail2Ban ao Zimbra OSE e, com isso, aumentar a segurança da infraestrutura de TI da sua empresa.
Como qualquer outro aplicativo de classe empresarial, o Zimbra Collaboration Suite Open-Source Edition mantém logs detalhados de suas operações. A maioria deles é armazenada na pasta /opt/zimbra/log/ em forma de arquivos. Aqui estão apenas alguns deles:
- mailbox.log — logs do serviço de e-mail Jetty
- audit.log — logs de autenticação
- clamd.log — logs de operação do antivírus
- freshclam.log — logs de atualizações do antivírus
- convertd.log — logs do conversor de anexos
- zimbrastats.csv — logs de desempenho do servidor
Os logs do Zimbra também podem ser encontrados no arquivo /var/log/zimbra.log, onde os logs de operação do Postfix e do próprio Zimbra são registrados.
Para proteger nosso sistema contra brute force, vamos monitorar mailbox.log, audit.log e zimbra.log.
Para que tudo funcione, é necessário que o seu servidor com Zimbra OSE tenha o Fail2Ban e iptables instalados. Se você estiver usando Ubuntu, você pode fazer isso com os comandos dpkg -s fail2ban, mas se você estiver usando CentOS, você pode verificar com os comandos yum list installed fail2ban. Caso o Fail2Ban não esteja instalado, sua instalação não será um problema, pois esse pacote está disponível em praticamente todos os repositórios padrão.
Depois que todo o software necessário estiver instalado, você pode começar a configurar o Fail2Ban. Para isso, é necessário criar um arquivo de configuração /etc/fail2ban/filter.d/zimbra.conf, no qual escreveremos expressões regulares para os logs do Zimbra OSE, que corresponderão a tentativas de login inválidas e ativarão os mecanismos do Fail2Ban. Aqui está um exemplo do conteúdo de zimbra.conf com um conjunto de expressões regulares correspondentes a diferentes erros apresentados no Zimbra OSE durante uma tentativa de autenticação malsucedida:
# Fail2Ban configuration file
[Definition]
failregex = [ip=<HOST>;] account - authentication failed for .* (no such account)$
[ip=<HOST>;] security - cmd=Auth; .* error=authentication failed for .*, invalid password;$
;oip=<HOST>;.* security - cmd=Auth; .* protocol=soap; error=authentication failed for .* invalid password;$
;oip=<HOST>;.* security - cmd=Auth; .* protocol=imap; error=authentication failed for .* invalid password;$
[oip=<HOST>;.* SoapEngine - handler exception: authentication failed for .*, account not found$
WARN .*;ip=<HOST>;ua=ZimbraWebClient .* security - cmd=AdminAuth; .* error=authentication failed for .*;$
ignoreregex =Depois que as expressões regulares para o Zimbra OSE forem criadas, é hora de editar a configuração do próprio Fail2ban. As configurações desta ferramenta estão localizadas no arquivo /etc/fail2ban/jail.conf. Para precaução, faremos uma cópia de segurança usando o comando cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.bak. Após isso, vamos ajustar este arquivo para um formato aproximadamente assim:
# Fail2Ban configuration file
[DEFAULT]
ignoreip = 192.168.0.1/24
bantime = 600
findtime = 600
maxretry = 5
backend = auto
[ssh-iptables]
enabled = false
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=admin@company.ru, sender=fail2ban@company.ru]
logpath = /var/log/messages
maxretry = 5
[sasl-iptables]
enabled = false
filter = sasl
backend = polling
action = iptables[name=sasl, port=smtp, protocol=tcp]
sendmail-whois[name=sasl, dest=support@company.ru]
logpath = /var/log/zimbra.log
[ssh-tcpwrapper]
enabled = false
filter = sshd
action = hostsdeny
sendmail-whois[name=SSH, dest=support@ company.ru]
ignoreregex = for myuser from
logpath = /var/log/messages
[zimbra-account]
enabled = true
filter = zimbra
action = iptables-allports[name=zimbra-account]
sendmail[name=zimbra-account, dest=support@company.ru ]
logpath = /opt/zimbra/log/mailbox.log
bantime = 600
maxretry = 5
[zimbra-audit]
enabled = true
filter = zimbra
action = iptables-allports[name=zimbra-audit]
sendmail[name=Zimbra-audit, dest=support@company.ru]
logpath = /opt/zimbra/log/audit.log
bantime = 600
maxretry = 5
[zimbra-recipient]
enabled = true
filter = zimbra
action = iptables-allports[name=zimbra-recipient]
sendmail[name=Zimbra-recipient, dest=support@company.ru]
logpath = /var/log/zimbra.log
bantime = 172800
maxretry = 5
[postfix]
enabled = true
filter = postfix
action = iptables-multiport[name=postfix, port=smtp, protocol=tcp]
sendmail-buffered[name=Postfix, dest=support@company.ru]
logpath = /var/log/zimbra.log
bantime = -1
maxretry = 5Este exemplo, embora seja bastante universal, vale a pena esclarecer alguns parâmetros que você pode querer mudar ao configurar o Fail2Ban por conta própria:
- Ignoreip — com este parâmetro, você pode especificar um IP ou sub-rede específicos, cujos endereços o Fail2Ban não deve verificar. Normalmente, a lista de ignorados inclui a rede interna da empresa e outros endereços confiáveis.
- Bantime — O tempo pelo qual o infrator será banido. Medido em segundos. Um valor de -1 significa banimento indefinido.
- Maxretry — O número máximo de vezes que um único endereço IP pode tentar acessar o servidor.
- Sendmail — Configuração que permite enviar automaticamente notificações por e-mail sobre a ativação do Fail2Ban.
- Findtime — Configuração que permite definir um intervalo de tempo após o qual o endereço IP pode tentar novamente acessar o servidor após esgotar o número máximo de tentativas falhadas (parâmetro maxretry)
Após salvar o arquivo de configurações do Fail2Ban, resta apenas reiniciar essa utilidade com o comando service fail2ban restart. Após a reinicialização, os principais logs do Zimbra começarão a ser monitorados continuamente em conformidade com expressões regulares. Graças a isso, o administrador poderá praticamente eliminar qualquer possibilidade de invasão, não apenas nas caixas de correio do Zimbra Collaboration Suite Open-Source Edition, mas também proteger todos os serviços operando dentro do Zimbra OSE e ficar ciente de quaisquer tentativas de acesso não autorizado.
Para qualquer questão relacionada ao Zextras Suite, você pode entrar em contato com a representante da empresa «Zextras», Ekaterina Triandafiliadi, pelo e-mail katerina@zextras.com
Fonte: habr.com
