Como altero o primary_hostname do Exim4 em uma caixa Debian?

24

Em algum servidor SMTP remoto, estou tentando enviar correio para recusar aceitar o HELO do meu servidor:

504 5.5.2 <localhost>: Helo command rejected: need fully-qualified hostname

Aparentemente, meu servidor Exim4 envia localhostcomo seu FQDN. Pesquisando na net e em vários arquivos de configuração, aprendi que o valor enviado como FQDN durante o HELO é extraído da primary_hostnamevariável de configuração.

Minha pergunta é: qual é a maneira correta de mudar essa variável em um sistema Debian? Eu acho que posso simplesmente codificar um valor dos arquivos de configuração do Exim4, mas IMHO parece fazer mais sentido se o valor corresponder automaticamente/etc/mailname ou a algum outro nome de configuração centralizado.

Sinto que a resposta para minha pergunta pode ser encontrada neste texto no wiki do Debian :

O nome usado pelo Exim no EHLO / HELO é extraído da opção de configuração primary_hostname. A configuração padrão exim4 do Debian não está definida primary_hostname. O Exim usa como padrão uname () para encontrar o nome do host. Se essa chamada retornar apenas um componente, gethostbyname () ou getipnodebyname () será usado para obter o nome completo do host.

Se o seu Exim HELOs for localhost.localdomain, você provavelmente terá um / etc / hosts mal configurado, criado por algumas versões do instalador da Debian. Nesse caso, corrija seus / etc / hosts.

Infelizmente, não estou familiarizado o suficiente com a administração de servidores Linux para saber exatamente o que tudo isso significa :(

Jørn Schou-Rode
fonte

Respostas:

21

Seu arquivo / etc / hosts deve ter pelo menos dois registros. O primeiro registro deve ter o formato:

<IP_ADDRESS> <HOST_FQDN> <HOSTNAME>

o segundo deve ter a forma:

127.0.0.1 localhost

Você também precisa garantir que o arquivo / etc / hostname contenha o FQDN do servidor e que a execução hostname -fretorne o FQDN dos servidores. Se você garantir que tudo isso esteja correto e reiniciar o Exim, comece a vê-lo corretamente.

Paul Lathrop
fonte
Alterei / etc / hostname de um nome de máquina local para o FQDN. hostname -fainda relata "localhost". A parte sobre / etc / hosts na sua resposta parece com erros - como deve ser o primeiro registro?
Jørn Schou-Rode
1
Enquanto hostname -fainda relata "localhost", parece que a alteração em / etc / hostname fez o truque - agora posso entregar minhas mensagens. Eu ainda gostaria de ver a parte que falta do seu post embora :)
Jørn Schou-Rode
Opa! Formatação flub. Corrigido :-)
Paul Lathrop
1
/etc/hostnamenormalmente não contém o FQDN nos sistemas Debian, apenas o nome abreviado do host.
Josip Rodin
Bem, a primeira linha /etc/hostspode ser 127.0.0.2 mydomain.com myhostname( 127.0.0.2funciona tão bem quanto 127.0.0.1, uma vez que o loopback é uma rede de classe A). Você provavelmente pode combinar as duas linhas em uma 127.0.0.1 mydomain.com myhostname localhost, mas localhosté um nome de host canônico para 127.0.0.1, não é? Tudo isso considerando que você tem o nome do host, não o FQDN como nome do host. Além disso, a mudança /etc/hostnamenão entra em vigor imediatamente, você precisa hostname myhostname. Ou reinicie o servidor.
x-yuri
8

Se você usar um único arquivo de configuração, defina a variável PRIMARY_HOST_NAME para o nome desejado:

Por exemplo, em /etc/exim4/exim4.conf:

PRIMARY_HOST_NAME = mybox.mydomain.com

ou defina MAIN_HARDCODE_PRIMARY_HOSTNAMEem update-exim4.conf.conf se você estiver usando uma configuração de arquivo dividido.

Para estar seguro, reinicie o exim.


fonte
Apenas uma observação de que o host listado não pode estar entre aspas; caso contrário, o exim envia HELO 'mybox.mydomain.com'quebras de envio de emails para o Google, talvez outros.
Mkomarinski 27/07/16
1
Não consigo encontrar nenhuma menção a esse nome de variável "PRIMARY_HOST_NAME" na documentação. Onde você achou isso?
Josip Rodin
No Debian, você precisa executar update-exim4.confapós alterar a configuração. E geralmente não é necessário reiniciar depois disso.
x-yuri
... Bem, eximgeralmente parece notar as alterações na configuração sem recarregar. Mas é sem dúvida mais seguro recarregar, pois suponho que o daemon em si não releia a configuração até recarregar. Então, você faz parecer que /etc/exim4/exim4.confpode conter apenas a linha acima , mas no momento em que cria o arquivo /var/lib/exim4/config.autogeneratedé ignorado ...
x-yuri
... "Os processos bifurcados que o Exim inicia para recebimento ou fila SMTP em execução usariam o novo arquivo de configuração, enquanto o exim-daemon principal original ainda usaria o antigo arquivo de configuração." Portanto, para um arquivo de configuração único, é melhor usar /etc/exim4/exim4.conf.localmacrospara dividir /etc/exim4/conf.d/main/000_localmacros(os arquivos no maindiretório são processados ​​primeiro). E execute update-exim4.conf+ systemctl reload exim4depois de fazer alterações.
x-yuri
4

O nome do host principal é solicitado durante a instalação do exim4. Você pode executar o comando

sudo dpkg-reconfigure exim4-config

para seguir as instruções novamente.

Até onde eu sei, se você já estiver usando a 'configuração dividida' (muitos pequenos arquivos em /etc/exim4/conf.d) e optar por continuar com isso quando solicitado, o dpkg-reconfigure não deve sobrescrever nenhum dos suas alterações de configuração existentes, exceto as configurações solicitadas, mas, como sempre, faça um backup primeiro para garantir a segurança.

David North
fonte
2
Parece apenas solicitar um "nome de email [que] deve ser o nome de domínio único e totalmente qualificado (FQDN)". No entanto, essa configuração já está correta e o HELO ainda parece dizer "localhost".
Jørn Schou-Rode
O que você está falando é um nome de correio que vai, surpresa, surpresa /etc/mailname,. Por padrão , é usado para qualificar endereços não qualificados . Os que consistem apenas no nome de usuário. Adicionando nome de domínio de /etc/mailname. O endereço resultante é usado no Fromcabeçalho.
x-yuri
2

A primary_hostnamevariável é preenchida de acordo com o nome de domínio totalmente qualificado (FQDN) do sistema. No Debian e sistemas relacionados, isso geralmente é formado usando o conteúdo dos arquivos /etc/hostnamee /etc/hosts. O ficheiro de nome da máquina deve conter o nome de host curto (por exemplo foo), e o ficheiro de hospedeiros deve conter uma entrada resolver fooem foo.bar.baz, ou seja, com o seu nome de host sufixo domínio (normalmente combinando uma entrada de DNS).

A saída do comando hostname(sem nenhum parâmetro) retornará o primeiro e a hostname -fsaída retornará o último.

O arquivo hostname normalmente é preenchido na instalação e o arquivo hosts pode ser editado para ter um outro registro ao lado dos registros localhost padrão - ele deve estar no formato:

<IP address> <hostname FQDN> <hostname>

As três colunas devem ser separadas por espaços ou tabulações, não importa. O endereço IP pode ser 127.0.0.1, assim como o host local, mas a parte do nome do host corresponde ao nome do host do sistema e a parte do meio deve ser o FQDN, ou seja, o nome do host com um sufixo de domínio.

Para verificar se a linha está funcionando, basta executar hostname -fe verificar se ela retorna o FQDN do seu servidor.

Por fim, reinicie o Exim, por exemplo, com:

sudo service exim4 restart

Depois você deve começar a vê-lo corretamente. Sua variável pode ser verificada executando:

/usr/sbin/exim4 -bP primary_hostname

(NB: Eu fiz isso originalmente como uma edição da resposta de 2009, mas ela foi rejeitada. O que eu estava consertando originalmente é: não havia necessidade de repetir o registro localhost padrão, apenas explique qual deveria ser a adição; explique quais O endereço IP pode ser usado; explique o que é FQDN; explique como verificar o próprio exim.)

Josip Rodin
fonte
/usr/sbin/exim4 -bP primary_hostnamenão funciona Você pode verificar o nome do host HELO enviando um email de teste ao verificador de autenticação do port25 ou a qualquer outra caixa de correio na qual possa ver o original. Mais sobre isso aqui . Considere atualizar sua resposta.
x-yuri
Funciona muito bem na minha máquina estável Debian (stretch). Você pode explicar exatamente que isso não funciona para você? Observe que a documentação em exim.org/exim-html-current/doc/html/spec_html/… diz claramente que o padrão helo_dataé $primary_hostname. Nos sistemas Debian, você pode substituí-lo usando a REMOTE_SMTP_HELO_DATAvariável, mas se você acabou de definir seu nome de host principal corretamente, isso não é necessário.
Josip Rodin
Acredito que tentei e queixou-se de não ter discutido. Mas não posso reproduzi-lo agora, então não importa, meu mal. Em relação a "se você acabou de definir seu nome de host principal corretamente", geralmente não é aceito que o nome do host deva resolver qualquer coisa. Então, digamos "se você definir o nome do host da maneira que o exim espera que você ..." e deixe assim :)
x-yuri
Sinto muito, mas não creio que seja sensato tirar qualquer conclusão ad hoc de uma longa discussão debian-devel de mais de uma década atrás pelo valor de face. Seria mais útil se você apontasse para algum documento de política referente a isso.
Josip Rodin
Foi o melhor que pude encontrar. Se você encontrar algo melhor ou uma prova de suas palavras, ficaria feliz se você me dissesse. Por enquanto, tudo o que posso dizer é que mesmo hoje em dia existem pessoas que não colocam nome de host /etc/hosts. E tudo o que peço é não considerar apropriado o que geralmente não é aceito.
x-yuri
1

depois de adicionar a mesma string em / etc / hosts, o nome do host -f retornará seu FQDN

myrocode
fonte
Em outras palavras, myhostnamevai para /etc/hostname(seguido de hostname myhostname). E 127.0.0.1 mydomain.com myhostname.com localhostvai para /etc/hosts. Além disso, recarregue eximapenas por precaução.
x-yuri
0

Eu tenho o mesmo problema. Preciso alterar o nome do host do email, porque alguns emails falham quando foram enviados. Com este erro:

host receiver.server.com [200.200.200.200]: 550 <[email protected]>: Sender address rejected: Domain not found

Então eu mudo para /etc/exim.configo parâmetro primary_hostname

Algum código deste arquivo:

smtp_connect_backlog = 50
smtp_accept_max = 100

#primary_hostname = myhostname.com 
deliver_queue_load_max = 3
Diego Gallardo
fonte
Hah, este post me ajuda com "primary_hostname" e agora o meu exim funciona melhor do que nunca :)
0

no WHM para o Exim Configuration Manager -> Editor Avançado

role para baixo até encontrar "Adicionar definições de configuração adicionais" (um grande botão azul) e clique nele.

na nova linha, adicione [primary_hostname] = [meudominio.com]

role para baixo e clique em Salvar.

Satalink
fonte