O primeiro e-mail é devolvido; o segundo e os emails subsequentes passam

6
550 relay not permitted

Essa é a mensagem de erro quando os e-mails enviados pelo Exim4 do meu laptop Debian são devolvidos.

O que é estranho é que apenas o primeiro e-mail é devolvido. Os e-mails subsequentes e subsequentes passam pelo relé e seguem para seus destinos bem. Se eu reiniciar meu laptop, o primeiro e-mail após a reinicialização voltará novamente.

O relé é protegido por senha em texto não criptografado após STARTTLS na porta 587. O certificado X.509 é um verdadeiro, não um snakeoil. Eu administro o servidor de retransmissão e o laptop. O servidor de retransmissão também executa o Exim4 no Debian, se isso for importante. O postfix não está envolvido.

Suponho que se poderia contornar o problema configurando o laptop para enviar um email falso (ou talvez apenas um SMTP EHLO?) cada vez que ele inicializa, mas o comportamento contornado parece estranho. Estou perplexo. Se você sabe o que eu devo investigar para resolver isso, você me aconselha?

    
por thb 06.09.2016 / 22:49

2 respostas

6

O tempo limite do seu e-mail pode ser devido ao seu daemon experimentando o IPv6 primeiro.

A implementação da pilha IPv6 por padrão tem prioridade sobre a pilha IPv4; assim, quando programas / daemons tentam se comunicar, tentarão usar o endereço IPv6 quando o destino tiver endereços IPv4 e IPv6 públicos .

Mesmo que você não tenha IPv6 público, você tem um host local IPv6 e vincula endereços locais.

Não seria a primeira vez, e provavelmente não o último tempo, que eu detectaria os daemons da Internet tentando primeiro o endereço local do link como endereço IP de origem para se comunicar com outro endereço, e somente após o tempo limite, se eles ainda tiverem tempo / tentativas alocados, pode voltar a enviar os dados para o destino IPv4. (No passado, eu já tinha problemas de DNS e email devido a isso em um ISP que eu costumava executar.)

Portanto, para o exim, é possível desabilitar o IPv6 no nível do aplicativo / daemon, usando a diretiva disable_ipv6=true em /etc/exim4/exim4.conf.template ou /etc/exim4/update-exim4.conf.conf dependendo se você está usando o esquema de configuração não dividido ou dividido.

De Exim Internet Mailer-Capítulo 14 - Configuração principal

disable_ipv6 Use: main Type: boolean Default: false
If this option is set true, even if the Exim binary has IPv6 support, no IPv6 activities take place. AAAA records are never looked up, and any IPv6 addresses that are listed in local_interfaces, data for the manualroute router, etc. are ignored. If IP literals are enabled, the ipliteral router declines to handle IPv6 literal addresses.

Uma abordagem alternativa também pode vinculá-lo apenas a endereços IPv4, mas a desvantagem é ter que codificar os endereços IPv4 na configuração:

local_interfaces = <; 127.0.0.1 ; \
                  192.168.23.65

Quanto ao próprio sistema, como você não está usando ativamente o IPv6:

adicione como a última linha para dar prioridade por padrão ao IPv4, ao arquivo /etc/gai.conf

precedence ::ffff:0:0/96  100 

Adicione a /etc/sysctl.conf para desabilitar por padrão a pilha IPv6 (configuração suportada do kernel 3 em diante):

net.ipv6.conf.all.disable_ipv6=1

O sysctl será aplicado no momento da inicialização. Para ativá-lo antes de inicializar, faça:

sudo sysctl -p

Enquanto eles chamam de desativação IPv6, o módulo ainda está carregado e, embora as interfaces não tenham mais endereços IPv6, você ainda pode ver os aplicativos conectados aos soquetes IPv6. Você também pode passar para o kernel uma opção para desabilitar o IPv6, e o módulo do kernel IPv6 não será carregado. Editando /etc/default/grub :

GRUB_CMDLINE_LINUX="ipv6.disable=1"

E, em seguida, para aplicá-lo, se você tiver o grub (sua partição do grub pode variar ou você pode não tê-lo; não tenho em meus servidores ARM e tenho que editar outro arquivo para as opções do kernel):

sudo update-grub
sudo grub-install /dev/sda

Você pode ter que configurar um ou outro daemon para desabilitar o IPv6 no nível do aplicativo (na parte superior da minha cabeça, xinetd , se você o instalou).

    
por 11.09.2016 / 21:34
2

A resposta do @RuiFRibeiro é a resposta importante. Leia aquele primeiro. No entanto, depois de entender essa resposta, aqui estão algumas informações adicionais que podem ajudar.

Se o seu host de retransmissão exigir que o seu laptop autentique-se antes de retransmitir o e-mail (o que seu host de retransmissão provavelmente deveria fazer), configure o Exim4 no seu laptop para autenticar-se no servidor de retransmissão.

O servidor de retransmissão também é conhecido como "smarthost". Seja qual for o nome que você chama, aqui está o problema. O comportamento padrão do Exim4 do seu laptop é [i] para tentar se autenticar antes de transmitir e-mails, mas, se isso falhar, [ii] para enviar o e-mail não autenticado.

Se ele cair para [ii] na sua configuração, seu e-mail será devolvido permanentemente. Claro, você pensaria que nunca cairia para [ii], mas aparentemente no seu caso, às vezes acontece.

A correção está na seção transport / 30_exim4-config_remote_smtp_smarthost da sua configuração do Exim4 (que no meu sistema está no arquivo /etc/exim4/exim4.conf.template ). Nesta seção, procure uma estrofe que comece:

remote_smtp_smarthost:

Nesta estrofe, você pode descobrir uma linha que começa:

  hosts_try_auth =

Algumas coisas seguem o sinal = , mas é o símbolo hosts_try_auth que interessa a você. Altere isso para ler:

  hosts_require_auth =

Não altere nada após o sinal = .

O efeito é fazer com que a transferência de correspondência de saída falhe sempre que [i] falhar, garantindo que [ii] nunca seja atingido. Como isso ajuda? Isso ajuda porque, diferentemente de uma falha de [ii], uma falha de [i] é temporária, não permanente. Se você tiver feito a alteração indicada, seu sistema responderá à falha tentando novamente com autenticação, nunca abandonando sem autenticação. Esse é o comportamento que você quer.

COMO COMPROMETIR A MUDANÇA DE CONFIGURAÇÃO

Apenas fazer a alteração no arquivo de configuração não corrigirá o problema. Você tem que cometer a mudança usando o exim4-config, por exemplo, emitindo o comando Debian obscuro, mas realmente importante dpkg-reconfigure -phigh exim4-config . Eu não sei se é realmente necessário reiniciar o servidor depois de confirmar a alteração de configuração, mas eu sempre reiniciá-lo. Para reiniciar, use o comando invoke-rc.d exim4 restart . [Incidentalmente, se você é um iniciante, então você pode se sentir mais confiante reiniciando o sistema para apenas reiniciar tudo. Eu fiz isso também quando eu era iniciante, então eu não culpo você, mas reiniciando reiniciar um único serviço realmente não é o caminho do Debian. Você é um pouco como um alpinista com boas cordas e equipamentos: eventualmente, você aprende quando é apropriado confiar apenas em seu equipamento. Algum dia, em vez de sempre reinicializar, você deve aprender a se sentir confortável com o uso do comando significativo invoke-rc.d (8).]

Se você deseja saber mais sobre o símbolo hosts_require_auth , consulte o manual de especificação detalhado que vem com o seu software Exim4.

(Para informação, eu sou o OP. Quando eu postei a pergunta, eu não tinha a resposta, mas depois que o @RuiFRibeiro me orientou, eu descobri a informação que esta resposta dá.)

    
por 14.09.2016 / 01:16