Protegendo o Zimbra OSE contra ataques de força bruta e DoS

Zimbra Collaboration Suite Open-Source Edition possui várias ferramentas poderosas de segurança da informação em seu arsenal. Entre eles Postcreen - uma solução para proteger o servidor de e-mail contra ataques de botnets, ClamAV - um antivírus que pode verificar arquivos e cartas recebidos em busca de infecção por malware, bem como SpamAssassin um dos melhores filtros de spam da atualidade. No entanto, essas ferramentas não são capazes de proteger o Zimbra OSE desse tipo de ataque, como o de força bruta. Não é a força bruta de senha mais elegante, mas ainda assim bastante eficaz, usando um dicionário especial, que está repleta não apenas da probabilidade de um hack bem-sucedido com todas as consequências resultantes, mas também da criação de uma carga significativa no servidor que processa todas as tentativas malsucedidas hackear o servidor com Zimbra OSE.

Protegendo o Zimbra OSE contra ataques de força bruta e DoS

Em princípio, você pode se proteger da força bruta usando ferramentas padrão do Zimbra OSE. As configurações da política de segurança de senha permitem definir o número de tentativas malsucedidas de entrada de senha, após as quais a conta potencialmente atacada é bloqueada. O principal problema desta abordagem é que existem situações em que as contas de um ou mais funcionários podem ser bloqueadas devido a um ataque de força bruta ao qual eles não têm nada a ver, e o tempo de inatividade resultante no trabalho dos funcionários pode trazer grandes perdas para a empresa. É por isso que é melhor não usar esta opção de proteção contra força bruta.

Protegendo o Zimbra OSE contra ataques de força bruta e DoS

Para proteção contra força bruta, uma ferramenta especial chamada DoSFilter é muito mais adequada, que é integrada ao Zimbra OSE e pode encerrar automaticamente a conexão com o Zimbra OSE via HTTP. Em outras palavras, o princípio do DoSFilter é semelhante ao princípio do PostScreen, só que é usado para um protocolo diferente. Originalmente projetado para limitar o número de ações que um único usuário pode realizar, o DoSFilter também pode fornecer proteção contra força bruta. Sua principal diferença em relação à ferramenta integrada ao 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 são feitas várias tentativas de login em uma ou outra conta. Graças a isso, o administrador do sistema pode não apenas se proteger da força bruta, mas também evitar o bloqueio de funcionários da empresa, simplesmente adicionando a rede interna de sua empresa à lista de endereços IP e sub-redes confiáveis.

A grande vantagem do DoSFilter é que além das inúmeras tentativas de login em uma ou outra conta, usando esta ferramenta, você pode bloquear automaticamente os invasores que se apoderaram dos dados de autenticação do funcionário, e então efetuaram login com sucesso em sua conta e começaram a enviar centenas de solicitações ao servidor.

Você pode configurar DoSFilter usando os seguintes comandos do console:

  • zimbraHttpDosFilterMaxRequestsPerSec - Com este comando você pode definir o número máximo de conexões permitidas por usuário. Por padrão, esse valor é 30 conexões.
  • zimbraHttpDosFilterDelayMillis - Com este comando você pode definir um atraso em milissegundos para conexões que excederão o limite especificado pelo comando anterior. Além dos valores inteiros, o administrador pode especificar 0 para não ter nenhum atraso, bem como -1 para simplesmente encerrar todas as conexões que excedam o limite especificado. Por padrão, esse valor é -1.
  • zimbraHttpThrottleSafeIPs - Usando este comando, o administrador pode especificar endereços IP e sub-redes confiáveis ​​que não serão afetados pelas restrições listadas acima. Observe que a sintaxe deste comando pode variar dependendo do resultado desejado. Então, por exemplo, digitando o comando zmprov mcf zimbraHttpThrottleSafeIPs 127.0.0.1, você substituirá completamente a lista inteira e deixará apenas um endereço IP nela. Se você digitar o comando zmprov mcf +zimbraHttpThrottleSafeIPs 127.0.0.1, o endereço IP inserido será adicionado à lista branca. Da mesma forma, usando o sinal de subtração, você pode remover qualquer IP da lista permitida.

Observe que DoSFilter pode criar vários problemas ao usar extensões Zextras Suite Pro. Para evitá-los, recomendamos aumentar o número de conexões simultâneas de 30 para 100 usando o comando zmprov mcf zimbraHttpDosFilterMaxRequestsPerSec 100. Além disso, recomendamos adicionar a rede interna da empresa à lista de permitidas. Você pode fazer isso com o comando zmprov mcf +zimbraHttpThrottleSafeIPs 192.168.0.0/24. Depois de fazer qualquer alteração no DoSFilter, reinicie o servidor de e-mail com o comando reinicialização do zmmailboxdctl.

A principal desvantagem do DoSFilter é que ele funciona no nível do aplicativo e, portanto, só pode limitar a capacidade dos invasores de realizar diversas ações no servidor, sem limitar a capacidade de conexão ao servidor. Por causa disso, as solicitações enviadas ao servidor para autenticação ou envio de cartas, embora obviamente falhem, ainda serão um bom e velho ataque DoS, que não pode ser interrompido em um nível tão alto.

Para proteger completamente o seu servidor corporativo com Zimbra OSE, você pode usar uma solução como o Fail2ban, que é uma estrutura que pode monitorar constantemente os logs do sistema de informação em busca de ações repetitivas e bloquear o intruso alterando as configurações do firewall. O bloqueio em um nível tão baixo permite desabilitar invasores logo no estágio da conexão IP ao servidor. Assim, Fail2Ban pode complementar perfeitamente a proteção construída com DoSFilter. Vamos descobrir como você pode fazer amizade com o Fail2Ban Zimbra OSE e, assim, 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 registros detalhados de seu trabalho. A maioria deles está armazenada na pasta /opt/zimbra/log/ na forma de arquivos. Aqui estão apenas alguns deles:

  • mailbox.log - Logs do serviço de correio Jetty
  • audit.log - logs de autenticação
  • clamd.log - logs de operação de antivírus
  • Freshclam.log - registros de atualização de antivírus
  • convertd.log - logs do conversor de anexos
  • zimbrastats.csv - logs de desempenho do servidor

Também os logs do Zimbra podem ser encontrados no arquivo /var/log/zimbra.log, onde são mantidos os logs do Postfix e do próprio Zimbra.

Para proteger nosso sistema da força bruta, monitoraremos caixa de correio.log, auditoria.log и zimbra.log.

Para que tudo funcione, você precisa ter o Fail2Ban e o iptables instalados no seu servidor Zimbra OSE. Caso você esteja usando Ubuntu, você pode fazer isso usando os comandos dpkg -s fail2ban, se você estiver usando CentOS, poderá verificar isso usando os comandos lista yum instalada fail2ban. Caso você não tenha o Fail2Ban instalado, instalá-lo não será um problema, pois este pacote está em quase todos os repositórios padrão.

Depois que todo o software necessário estiver instalado, você poderá começar a configurar o Fail2Ban. Para fazer isso, você precisa criar um arquivo de configuração /etc/fail2ban/filter.d/zimbra.conf, no qual escrevemos expressões regulares para os logs do Zimbra OSE, que corresponderão a tentativas de login inválidas e acionarão os mecanismos Fail2Ban. Aqui está um exemplo do conteúdo do zimbra.conf com um conjunto de expressões regulares correspondentes a vários erros emitidos no Zimbra OSE quando uma tentativa de autenticação falha:

# 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 =

Após a compilação das expressões regulares do Zimbra OSE, é hora de começar a editar a configuração do próprio Fail2ban. As configurações deste utilitário estão localizadas no arquivo /etc/fail2ban/jail.conf. Por precaução, faremos uma cópia de backup dele usando o comando cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.bak. Depois disso, traremos este arquivo para o seguinte formato:

# 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, [email protected], [email protected]]
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, [email protected]]
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, [email protected] ]
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, [email protected]]
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, [email protected]]
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, [email protected]]
logpath = /var/log/zimbra.log
bantime = -1
maxretry = 5

Embora este exemplo seja bastante genérico, vale a pena explicar algumas das configurações que você pode querer alterar ao configurar o Fail2Ban:

  • Ignorar - usando este parâmetro, você pode especificar um IP ou sub-rede específico, endereços dos quais o Fail2Ban não deve verificar. Via de regra, a rede interna da empresa e outros endereços confiáveis ​​​​são adicionados à lista dos ignorados.
  • Bantime - O tempo durante o qual o infrator ficará banido. Medido em segundos. Um valor de -1 significa um banimento indefinido.
  • tentativa máxima - O número máximo de vezes que um endereço IP pode tentar acessar o servidor.
  • Enviar correio - Uma configuração que permite enviar automaticamente notificações por e-mail sobre o funcionamento do Fail2Ban.
  • Encontre tempo - Uma configuração que permite definir o intervalo de tempo após o qual o endereço IP pode tentar novamente acessar o servidor após o número máximo de tentativas malsucedidas ter sido esgotado (parâmetro maxretry)

Após salvar o arquivo com as configurações Fail2Ban, resta apenas reiniciar este utilitário usando o comando reinicialização do serviço fail2ban. Após a reinicialização, os principais logs do Zimbra serão constantemente monitorados em busca de expressões regulares. Graças a isso, o administrador poderá praticamente excluir qualquer possibilidade de um invasor penetrar não apenas nas caixas de correio do Zimbra Collaboration Suite Open-Source Edition, mas também proteger todos os serviços em execução no Zimbra OSE e estar ciente de qualquer tentativa de obter acesso não autorizado. .

Para todas as perguntas relacionadas ao Zextras Suite, você pode entrar em contato com o representante da Zextras Ekaterina Triandafilidi por e-mail [email protegido]

Fonte: habr.com

Adicionar um comentário