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#
Para isolar e analisar o parâmetro duplicado:
grep -n "^av_scanner" /etc/exim.variables.conf
exim -bV -C /etc/exim.conf
exim -bP av_scanner 2>/dev/null
grep -c "^av_scanner" /etc/exim.conf
Se existirem duas declarações da mesma diretiva, o parser aborta.
1.2 correção aplicada#
- editar
exim.variables.conf; - manter apenas uma ocorrência de
av_scanner; - validar sintaxe e reiniciar serviço.
# Validar sintaxe completa com o arquivo de configuração
exim -bV -C /etc/exim.conf && echo "Config OK" || echo "Config FAIL"
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 para incluir a diretiva de conexão IPv4 explicita (-d 127.0.0.1) e também o tempo limite de conexão (-t 30 para timeout de 30 segundos), evitando travamentos se o spamd estiver sobrecarregado:
transport_filter = /usr/bin/spamc -d 127.0.0.1 -t 30 -u ${lookup{$domain}lsearch*{/etc/virtual/domainowners}{$value}}
Valide a linha após edição (ancorando no início da linha para evitar falsos positivos com comentários):
grep -n "^transport_filter.*spamc" /etc/exim.conf
Recarregue Exim e monitore a fila:
systemctl restart exim
exim -bp
3.1 alternativa de correção: forçar ipv6/ipv4 no spamd#
Em vez de alterar a chamada no Exim, você pode configurar o daemon do SpamAssassin (spamd) para aceitar conexões tanto em IPv4 quanto em IPv6 locais.
Edite o arquivo de configuração de inicialização spamassassin ou os argumentos do serviço do systemd para incluir a escuta nos dois endereços:
ExecStart=/usr/bin/spamd -d --listen-addr=127.0.0.1 --listen-addr=::1
Depois, reinicie o serviço:
systemctl restart spamassassin
4) Persistência da correção em DirectAdmin#
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"
# ou no cPanel:
# tail -f /var/log/exim_mainlog | egrep -i "spamc|spamd|refused|error"
exim -bp | head -n 40
5.1 fluxo de diagnóstico#
O fluxo abaixo descreve graficamente os passos para identificar e mitigar o problema:
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.
- Defina timeouts nos filtros de transporte do Exim para evitar travamentos em cascata.
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 artigo foi útil?
Deixe uma reação rápida para apoiar o conteúdo:
Este post está licenciado sob CC BY-NC.



Comentários
Participe da discussão abaixo.
0 comentários