Gerenciamento e limpeza de fila no Exim (MTA) com abordagem forense e segura
Voltar para blog

Gerenciamento e limpeza de fila no Exim (MTA) com abordagem forense e segura

07/06/2026 · 6 min · E-mail

Fila alta no Exim não é só problema de volume. Pode ser indício de conta comprometida, script malicioso, destino recusando autenticação ou degradação de reputação do IP.

Neste runbook, o foco é: investigar primeiro, remover depois. Isso evita apagar mensagem legítima no pânico e preserva evidência para correção definitiva.


0) Erro conceitual que derruba troubleshooting#

Muita gente tenta operar a fila por endereço e tropeça logo no início.

Exemplo clássico (incorreto):

exim -Mvh [email protected]

Os comandos -Mvh, -Mvb e -Mrm não aceitam endereço. Eles exigem Message-ID (ex.: 1tXyZ-0004p-2A).

Por isso o exiqgrep é a ponte certa entre e-mail e ID:

Sem o -i, a saída vem com metadados extras e quebra automação por pipe.


1) Triagem inicial da fila e auditoria de logs#

A triagem inicial permite obter uma visão sistêmica sobre o estado de congestionamento do servidor.


1.1 volume e estado geral#

Para inspecionar o estado geral da fila em tempo real:

exim -bp
exim -bp | exiqsumm

1.2 quantidade total de mensagens#

Para contar rapidamente as mensagens spooled:

exim -bpc

1.3 separar mensagens congeladas#

Mensagens que falharam seguidamente nas tentativas de retransmissão entram em estado frozen:

exiqgrep -z -i

Se a fila tem muito frozen , geralmente há bounce loop, destino inexistente ou envio abusivo bloqueado repetidamente.


1.4 verificação e análise detalhada de logs#

Para realizar um diagnóstico aprofundado do fluxo de e-mails em exim_mainlog:

  1. Mensagens por status: Listar quantidade de mensagens em cada status da fila:
   exim -bp | awk '{print $1}' | sort | uniq -c | sort -rn
  1. Mensagens congeladas (frozen) totais:
   exiqgrep -z -i | wc -l
  1. Mensagens muito antigas na fila: Identificar mensagens retidas há mais de 7 dias (604800 segundos):
   exiqgrep -i -o 604800 | wc -l
  1. Mensagens por domínio de destino: Classificar os domínios acumulados na fila:
   exim -bp | grep -oP '(?<=for )\S+' | sort | uniq -c | sort -rn | head -10

2) Inspeção forense por ID antes de remover#

Com o Message-ID da mensagem em mãos, é possível inspecionar seu conteúdo detalhadamente:

exim -Mvh ID_DA_MENSAGEM   # headers
exim -Mvb ID_DA_MENSAGEM   # body
exim -Mvl ID_DA_MENSAGEM   # log detalhado da mensagem

Pontos que eu sempre valido:

  1. remetente real (Return-Path e From);
  2. rota (Received) e host de origem;
  3. motivo da retenção (timeout, auth fail, SPF, RBL, quota, destino inválido);
  4. padrão repetitivo em múltiplas mensagens.

2.1) Varredura de DNS e reputação#

Mensagens presas na fila por falhas de entrega de rede exigem uma auditoria no DNS dos domínios destino para descartar bloqueios ou configurações incompletas:

  1. Resolução de Registros MX:
   dig MX dominio.com +short
  1. Verificação de Registros SPF:
   dig TXT dominio.com | grep -i "v=spf1"
  1. Verificação de Registros DMARC:
   dig TXT _dmarc.dominio.com

2.2) Auditoria de RBL (listas de bloqueio)#

Verifique se o endereço IP do seu servidor foi inserido em listas de reputação públicas de spam (RBLs):

  1. Checar RBLs via comando dig:
   for rbl in zen.spamhaus.org bl.spamcop.net; do
       result=$(dig +short 4.3.2.1.$rbl) # Substitua 4.3.2.1 pelo IP invertido do seu host
       if [ -n "$result" ]; then
           echo "LISTADO na RBL $rbl: $result"
       fi
   done
  1. Checagem de Reputação Online (API MXToolbox):
   curl -s "https://mxtoolbox.com/api/v1/lookup/blacklists/1.2.3.4" | jq .

3) Limpeza seletiva (cirúrgica) com backup prévio#


3.1) Backups preventivos da fila e dados específicos#

Antes de executar qualquer comando de limpeza ou expurgo, é de extrema importância exportar os estados da fila atual em exim-queue-backup.txt e criar um backup estruturado dos e-mails suspeitos em emails-from-spammer.txt:

  1. Backup Geral da Fila:
   exim -bp > /root/exim-queue-backup-$(date +%Y%m%d).txt
  1. Backup de Mensagens de um Remetente Específico:
   exiqgrep -i -f '[email protected]' > /root/emails-from-spammer.txt
  1. Verificar Volume da Fila antes de Limpar:
   exim -bp | exiqsumm

3.2 remover por remetente#

exiqgrep -i -f '[email protected]' | xargs -r exim -Mrm

3.3 remover por destinatário#

exiqgrep -i -r '[email protected]' | xargs -r exim -Mrm

3.4 remover apenas congeladas#

exiqgrep -z -i | xargs -r exim -Mrm

3.5 limpeza por idade (bounce eterno / retry antigo)#

Remover mensagens mais antigas que 7 dias (604800 segundos):

exiqgrep -i -o 604800 | xargs -r exim -Mrm

Esse filtro é útil quando há cauda antiga travando a operação, sem tocar em mensagens recentes ainda válidas.


3.6 emergência total (somente quando validado)#

Se fila estiver comprometida ao ponto de risco operacional:

exiqgrep -i | xargs -r exim -Mrm

Rode sempre exim -bp | exiqsumm antes para confirmar volume por domínio e evitar apagar tráfego legítimo por impulso.


3.7 reprocessar fila sem remover#

exim -qff

4) Pós-limpeza e validação do ambiente#

Com a fila reprocessada e limpa, valide as condições do ecossistema do Exim.


4.1) Confirmação da limpeza e monitoramento imediato#

Confirme que os comandos de expurgo surtiram efeito e a fila retornou a níveis aceitáveis:

  1. Quantidade Pós-Limpeza:
   exim -bpc
  1. Contar Mensagens Congeladas Restantes:
   exiqgrep -z -i | wc -l
  1. Filtrar Logs em exim_mainlog por Erros Recentes:
   tail -50 /var/log/exim_mainlog | grep -iE "error|fail"
  1. Monitorar Fila Ativamente:
   watch -n 60 "exim -bpc"

4.2) Verificação de autenticação SMTP e abusos#

Investigue se há indícios de contas de e-mail vazadas que estejam enviando spam autenticado:

  1. Tentativas Falhas de Autenticação:
   grep -iE "auth|login|failed" /var/log/exim_mainlog | tail -n 20
  1. Volume de Falhas de Autenticação (Ataques Força Bruta):
   grep -c "auth fail" /var/log/exim_mainlog
  1. Contas SMTP mais Ativas:
   grep "A=dovecot_login" /var/log/exim_mainlog | awk '{print $6}' | sort | uniq -c | sort -rn | head -n 20

4.3) Verificação de rate limiting#

Confirme a aplicação e as configurações das regras de limitação de envio ativas no MTA:

  1. Verificar Limites Globais de Recipients configurados no Exim:
   exim -bP max_rcpt
   exim -bP max_held_timeout
  1. Mensagens Acumuladas por Remetente:
   exim -bp | grep -oP '(?<=<= )\S+' | sort | uniq -c | sort -rn | head -10

5) Prevenção de recorrência no WHM/cPanel e políticas de rate limit#


5.1) Configuração de limites no painel#

Para evitar recorrência de filas cheias por spammers, defina limites rígidos nos painéis administrativos do WHM ou injete regras diretamente no arquivo de configuração do Exim em exim.conf:

  acl_smtp_rcpt:
    accept
      condition = ${if >{${extract{1}{:}{${readfile{/etc/virtual/domain.com_max}}}}{0}}
      # Código adicional de validação de limite

5.2) Implementação de monitoramento contínuo#

Crie o script de alerta automático em check-exim-queue.sh:

cat > /usr/local/bin/check-exim-queue.sh << 'EOF'
#!/bin/bash
QUEUE_SIZE=$(exim -bpc)
THRESHOLD=100

if [ "$QUEUE_SIZE" -gt "$THRESHOLD" ]; then
    echo "ALERTA: Fila Exim com $QUEUE_SIZE mensagens detectadas no servidor." | \
      mail -s "Exim Queue Alert" [email protected]
fi
EOF

chmod +x /usr/local/bin/check-exim-queue.sh

Agende no cron do root para executar a cada 5 minutos:

echo "*/5 * * * * /usr/local/bin/check-exim-queue.sh" | crontab -

5.3) Verificação de segurança de scripts e credenciais#

Para neutralizar abusos originados de scripts PHP locais que ignoram SMTP e enviam e-mails com a função mail():

  1. Achar Remetentes mais Comuns via Fila:
   exim -bp | grep -oP '(?<=<= )\S+' | sort | uniq -c | sort -rn | head -10
  1. Localizar Scripts PHP Modificados recentemente que chamam mail():
   find /home -name "*.php" -newer /var/log/exim_mainlog -exec grep -l "mail\|smtp" {} \;

6) Checklist de limpeza e matriz de riscos#

Checklist operacional de limpeza de fila#

Matriz de riscos operacionais de fila#

Incidente / RiscoSeveridadeImpactoAção de Mitigação Implementada
Limpeza de LegítimosCríticaExpurgo indesejado de e-mails comerciais.Backup integral da fila com redirecionamento de logs e `exim -bpexiqsumm` antes da limpeza.
Vazamento de SMTPAltaUso de contas autenticadas para spam global.Auditoria de login no log, rotação de senhas SMTP e bloqueio de usuários.
Spam por Script PHPAltaBloqueio de IP por chamadas direct mail.Rastrear scripts modificados usando find acoplado com varredura de strings mail.
Bloqueio em RBLAltaFalha de entrega geral dos e-mails legítimos.Configuração e testes de queries RBL usando DNS locais (Spamhaus/Spamcop).
Bounce LoopMédiaRetenções excessivas de bounces congelados.Limpeza direcionada das mensagens congeladas da fila com exiqgrep -z.

Gerenciar fila Exim em produção não é comando único de limpeza. É processo de triagem, evidência, ação seletiva e prevenção. Esse método reduz reincidência e preserva entregabilidade dos e-mails legítimos.

Este artigo foi útil?

Deixe uma reação rápida para apoiar o conteúdo:

CC BY-NC

Este post está licenciado sob CC BY-NC.

Comentários

Participe da discussão abaixo.

0 comentários