Come posso cambiare il nome_host primario di Exim4 su un box Debian?


24

Alcuni server SMTP remoti sto cercando di recapitare la posta per rifiutare di accettare l'HELO dal mio server:

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

Apparentemente, il mio server Exim4 invia localhostcome FQDN. Cercando in rete e un mucchio di file di configurazione, ho appreso che il valore inviato come FQDN durante HELO è tratto dalla primary_hostnamevariabile di configurazione.

La mia domanda è: qual è il modo corretto di cambiare questa variabile in un sistema Debian? Immagino di poter semplicemente codificare un valore nei file di configurazione di Exim4, ma IMHO sembrerebbe avere più senso se il valore corrispondesse automagicamente/etc/mailname o qualche altra configurazione di nomi centralizzata.

Ho la sensazione che la risposta alla mia domanda possa essere trovata in questo testo dal wiki di Debian :

Il nome utilizzato da Exim in EHLO / HELO viene estratto dall'opzione di configurazione primary_hostname. La configurazione predefinita di Debian exim4 non è impostata primary_hostname. Exim quindi imposta uname () per trovare il nome host. Se quella chiamata restituisce solo un componente, gethostbyname () o getipnodebyname () viene utilizzato per ottenere il nome host completo.

Se il tuo Exim HELO è localhost.localdomain, allora molto probabilmente hai un / etc / hosts configurato erroneamente creato da alcune versioni del programma di installazione Debian. In questo caso, correggi i tuoi / etc / hosts.

Sfortunatamente, non ho abbastanza familiarità con l'amministrazione del server Linux per sapere esattamente cosa significhi tutto ciò :(

Risposte:


21

Il tuo file / etc / hosts dovrebbe contenere almeno due record. Il primo record dovrebbe essere nella forma:

<IP_ADDRESS> <HOST_FQDN> <HOSTNAME>

il secondo dovrebbe essere nella forma:

127.0.0.1 localhost

Devi anche assicurarti che il tuo file / etc / hostname contenga l'FQDN del server e che l'esecuzione hostname -frestituisca l'FQDN dei tuoi server. Se ti assicuri che tutto ciò sia corretto e riavvii Exim, dovresti iniziare a vederlo HELO correttamente.


Ho cambiato / etc / hostname da un nome di macchina locale al nome di dominio completo. hostname -friporta ancora "localhost". La parte su / etc / hosts nella tua risposta sembra buggy - come dovrebbe essere il primo disco?
Jørn Schou-Rode,

1
Mentre hostname -friporta ancora "localhost", sembra che la modifica a / etc / hostname abbia funzionato: ora sono in grado di consegnare la mia posta. Mi piacerebbe comunque vedere la parte mancante del tuo post :)
Jørn Schou-Rode,

Oops! Flub di formattazione. Risolto :-)
Paul Lathrop il

1
/etc/hostnamein genere non contiene il nome di dominio completo nei sistemi Debian, ma solo il nome host breve.
Josip Rodin,

Bene, la prima riga /etc/hostspotrebbe essere 127.0.0.2 mydomain.com myhostname( 127.0.0.2funziona così come 127.0.0.1, poiché il loopback è una rete di classe A). Probabilmente puoi combinare le due linee in una 127.0.0.1 mydomain.com myhostname localhost, ma localhostè un nome host canonico 127.0.0.1, no? Tutto ciò dato che hai il nome host, non FQDN come nome host. Inoltre, il cambiamento /etc/hostnamenon ha effetto immediato, devi farlo hostname myhostname. O riavvia il server.
x-yuri,

8

Se si utilizza un singolo file di configurazione, impostare la variabile PRIMARY_HOST_NAME sul nome desiderato:

Ad esempio in /etc/exim4/exim4.conf:

PRIMARY_HOST_NAME = mybox.mydomain.com

oppure impostare MAIN_HARDCODE_PRIMARY_HOSTNAMEin update-exim4.conf.conf se si utilizza la configurazione del file diviso.

Per sicurezza, riavvia exim.


Solo una nota che l'host elencato non può essere tra virgolette, altrimenti exim invia HELO 'mybox.mydomain.com'che interrompe l'invio di posta a Google, forse altri.
mkomarinski,

1
Non riesco a trovare alcun riferimento a questo nome di variabile "PRIMARY_HOST_NAME" nella documentazione. dove lo hai trovato?
Josip Rodin,

Su Debian devi correre update-exim4.confdopo aver cambiato config. E il riavvio non è generalmente necessario dopo.
x-yuri,

... Beh, in eximgenere sembra notare le modifiche alla configurazione senza ricaricare. Ma è probabilmente più sicuro ricaricare, poiché suppongo che il demone stesso non rileggi la configurazione fino a quando non viene ricaricato. Quindi, fai sembrare che /etc/exim4/exim4.confpossa contenere solo la riga sopra , ma nel momento in cui crei il file, /var/lib/exim4/config.autogeneratedviene ignorato ...
x-yuri

... "I processi biforcuti avviati da Exim per la ricezione SMTP o l'esecuzione della coda utilizzerebbero il nuovo file di configurazione, mentre il demone exim principale originale continuerebbe a utilizzare il vecchio file di configurazione." Quindi, per il singolo file di configurazione è meglio usare /etc/exim4/exim4.conf.localmacros, per la divisione /etc/exim4/conf.d/main/000_localmacros(i file in maindir vengono elaborati per primi). Ed esegui update-exim4.conf+ systemctl reload exim4dopo aver apportato modifiche.
x-yuri,

4

Il nome host primario viene richiesto durante l'installazione di exim4. Puoi eseguire il comando

sudo dpkg-reconfigure exim4-config

per ripetere le istruzioni.

Per quanto ne so, se stai già utilizzando la 'configurazione divisa' (molti piccoli file in /etc/exim4/conf.d) e scegli di attenersi a ciò quando richiesto, dpkg-reconfigure non dovrebbe sovrascrivere nessuno dei le tue modifiche di configurazione esistenti diverse dalle impostazioni richieste, ma, come sempre, dovresti prima fare un backup per sicurezza.


2
Sembra solo chiedere un "nome di posta [che] dovrebbe essere il singolo nome di dominio completo (FQDN)". Tuttavia, questa impostazione è già corretta e HELO sembra ancora dire "localhost".
Jørn Schou-Rode,

Quello di cui stai parlando è un nome di posta che indica sorpresa, sorpresa /etc/mailname. Per impostazione predefinita, viene utilizzato per qualificare gli indirizzi non qualificati . Quelli che consistono solo dal nome utente. Aggiungendo il nome di dominio da /etc/mailname. L'indirizzo risultante viene utilizzato Fromnell'intestazione.
x-yuri,

2

La primary_hostnamevariabile viene riempita in base al nome di dominio completo (FQDN) del sistema. Su Debian e sui sistemi correlati questo è in genere formato usando il contenuto dei file /etc/hostnamee /etc/hosts. Il file hostname deve contenere il nome host breve (ad es. foo) E il file hosts deve contenere una voce fooin cui si sta risolvendo foo.bar.baz, ovvero nome host con il suo suffisso di dominio (normalmente corrispondente a una voce DNS).

L'output del comando hostname(senza parametri) restituirà il primo e l' hostname -foutput restituirà il secondo.

Il file hostname viene in genere compilato al momento dell'installazione e il file hosts può essere modificato per contenere un altro record accanto ai record localhost predefiniti - dovrebbe essere nel formato:

<IP address> <hostname FQDN> <hostname>

Le tre colonne dovrebbero essere separate da spazi o tabulazioni, non importa. L'indirizzo IP può essere 127.0.0.1 proprio come localhost, ma la parte hostname deve corrispondere al nome host di sistema e la parte centrale dovrebbe essere il nome di dominio completo, ovvero il nome host con un suffisso di dominio.

Per verificare che la linea funzioni, è sufficiente eseguire hostname -fe verificare che restituisca il nome FQDN del server.

Infine, riavvia Exim, ad esempio con:

sudo service exim4 restart

Successivamente dovresti iniziare a vederlo HELO correttamente. La sua variabile può essere verificata eseguendo:

/usr/sbin/exim4 -bP primary_hostname

(NB: Inizialmente l'ho fatto come una modifica alla risposta del 2009, ma è stato respinto. Le cose che stavo inizialmente risolvendo sono: non c'era bisogno di ripetere il record localhost predefinito, basta spiegare quale dovrebbe essere l'aggiunta; spiegare quale È possibile utilizzare l'indirizzo IP; spiegare cos'è l'FQDN; spiegare come verificare exim stesso.)


/usr/sbin/exim4 -bP primary_hostnamenon funziona È possibile verificare il nome host HELO inviando un'e-mail di prova al controllo autenticazione di port25 o a qualsiasi altra cassetta postale in cui è possibile visualizzare l'originale. Maggiori informazioni qui . Valuta di aggiornare la tua risposta.
x-yuri,

Funziona benissimo sulla mia macchina stabile Debian (tratto). Puoi per favore spiegare esattamente che non funziona per te? Nota la documentazione su exim.org/exim-html-current/doc/html/spec_html/… dice chiaramente che l'impostazione predefinita helo_dataè $primary_hostname. Sui sistemi Debian, puoi sovrascriverlo usando la REMOTE_SMTP_HELO_DATAvariabile, ma se hai appena impostato correttamente il tuo nome host primario, non è necessario.
Josip Rodin,

Credo di aver provato e si è lamentato di non aver litigato. Ma non riesco a riprodurlo ora, quindi non importa, mia cattiva. Per quanto riguarda "se hai appena impostato correttamente il tuo nome host principale", non è generalmente accettato che il nome host debba risolversi in qualsiasi cosa. Quindi diciamo "se imposti il ​​nome host nel modo in cui exim ti aspetta ..." e lascialo così :)
x-yuri

Mi dispiace, ma non credo sia saggio trarre una conclusione ad hoc di una lunga discussione di sviluppo debian di oltre un decennio fa al valore nominale. Sarebbe più utile se indicassi un documento politico relativo a una cosa del genere.
Josip Rodin

Questo è il migliore che ho trovato. Se riesci a trovare qualcosa di meglio o una prova delle tue parole, sarei felice se me lo dicessi. Per ora tutto ciò che posso dire è che anche in questi giorni ci sono persone a cui non viene assegnato il nome host /etc/hosts. E tutto ciò che chiedo è di non chiamare ciò che non è generalmente accettato.
x-yuri,

1

dopo aver aggiunto la stessa stringa in / etc / hosts, hostname -f restituirà il tuo FQDN


In altre parole, myhostnameva a /etc/hostname(seguito da hostname myhostname). E 127.0.0.1 mydomain.com myhostname.com localhostva a /etc/hosts. Inoltre ricaricare eximper ogni evenienza.
x-yuri,

0

Ho lo stesso problema. Devo cambiare il nome host della posta, perché alcune e-mail non riescono, quando sono state inviate. Con questo errore:

host receiver.server.com [200.200.200.200]: 550 <info@sender.server.com>: Sender address rejected: Domain not found

Quindi lo cambio nel /etc/exim.configparametro primary_hostname

Qualche codice di questo file:

smtp_connect_backlog = 50
smtp_accept_max = 100

#primary_hostname = myhostname.com 
deliver_queue_load_max = 3

Ah, questo post mi aiuta con "primary_hostname" e ora il mio exim funziona meglio che mai :)

0

in WHM vai a Exim Configuration Manager -> Editor avanzato

scorrere verso il basso fino a trovare "Aggiungi impostazioni di configurazione aggiuntive" (un grande pulsante blu) e fare clic su di esso.

nella nuova riga, aggiungi [primary_hostname] = [mydomain.com]

scorrere fino in fondo e fare clic su Salva.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.