Incidentes de e-mail em produção frequentemente vêm em cascata: você corrige um erro de sintaxe e logo aparece um erro de fluxo. Neste caso, foi exatamente isso: primeiro o Exim não subia por configuração duplicada; depois, com Exim no ar, o anti-spam passou a falhar por mismatch IPv4/IPv6.
1) Falha inicial: Exim abortando no start
Erro observado:
Exim configuration error in line 3 of /etc/exim.variables.conf:
"av_scanner" option set for the second time
1.1 Diagnóstico de configuração
grep -n "^av_scanner" /etc/exim.variables.conf
exim -bV | head -n 20
exim -bP av_scanner 2>/dev/null
Se existirem duas declarações da mesma diretiva, o parser aborta.
1.2 Correção aplicada
- editar
/etc/exim.variables.conf; - manter apenas uma ocorrência de
av_scanner; - validar sintaxe e reiniciar serviço.
exim -bV >/dev/null
systemctl restart exim
systemctl status exim --no-pager
2) Segunda falha: anti-spam recusando conexão local
Após Exim voltar, apareceram eventos na fila e log:
spamc[...] connect to spamd on ::1 failed: Connection refused
Isso aponta para mismatch de pilha de rede:
spamctentando IPv6 (::1);spamdouvindo só em IPv4 (127.0.0.1).
2.1 Prova técnica da causa raiz
ss -lntp | grep 783
# ou
netstat -lnpt | grep 783
Saída típica do problema:
tcp LISTEN 0 128 127.0.0.1:783 0.0.0.0:* users:(("spamd",pid=...))
Sem bind em ::1, toda chamada IPv6 local falha.
3) Correção funcional no Exim (forçando spamc em IPv4)
No exim.conf, ajuste do filtro de transporte:
transport_filter = /usr/bin/spamc -d 127.0.0.1 -u ${lookup{$domain}lsearch*{/etc/virtual/domainowners}{$value}}
Valide a linha após edição:
grep -n "transport_filter.*spamc" /etc/exim.conf
Recarregue Exim e teste fila:
systemctl restart exim
exim -qff
4) Persistência da correção em DirectAdmin
Editar /etc/exim.conf direto não é suficiente em ambientes com CustomBuild. Atualização/rebuild pode sobrescrever.
4.1 Aplicação correta via template custom
mkdir -p /usr/local/directadmin/custombuild/custom/exim/conf
cp /etc/exim.conf /usr/local/directadmin/custombuild/custom/exim/conf/exim.conf
Se usar CustomBuild para regenerar:
cd /usr/local/directadmin/custombuild
./build exim_conf
./build exim
systemctl restart exim
5) Validação pós-correção (aceite operacional)
- Exim sobe sem erro de parser.
spamcnão apresentaConnection refusedem::1.- fila processa normalmente sem retenção por antispam local.
- ajuste persiste após ciclo de build/update do DirectAdmin.
Comandos de checagem:
tail -f /var/log/exim/mainlog | egrep -i "spamc|spamd|refused|error"
exim -bp | head -n 40
6) Lições operacionais
- Sempre resolver erro de parser primeiro, sem “pular etapa”.
- Em fluxo Exim + SpamAssassin, valide loopback (IPv4/IPv6) explicitamente.
- Em DirectAdmin, toda correção crítica precisa entrar no template custom.
Esse incidente só fechou quando tratei sintaxe, rede local e persistência ao mesmo tempo. Corrigir um ponto isolado não estabiliza MTA em produção.
Este post está licenciado sob CC BY-NC.
Comentários
Participe da discussão abaixo.
Comentários ainda não configurados. Adicione as opções do Cusdis em /assets/json/config/blog-comments-config.json.