Comment puis-je changer le nom d'hôte primaire d'Exim4 sur une boîte Debian?

24

Un serveur SMTP distant auquel j'essaie de livrer du courrier refuse d'accepter le HELO de mon serveur:

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

Apparemment, mon serveur Exim4 envoie localhostcomme son nom de domaine complet. En cherchant sur le net et un tas de fichiers de configuration, j'ai appris que la valeur envoyée en tant que FQDN pendant HELO est tirée de la primary_hostnamevariable de configuration.

Ma question est: quelle est la bonne façon de changer cette variable dans un système Debian? Je suppose que je peux simplement coder en dur une valeur dans l'un des fichiers de configuration Exim4, mais à mon humble avis, il semblerait plus logique que la valeur corresponde automatiquement/etc/mailname ou à une autre configuration de nom centralisée.

J'ai l'impression que la réponse à ma question se trouve dans ce texte du wiki Debian :

Le nom utilisé par Exim dans EHLO / HELO est tiré de l'option de configuration primary_hostname. La configuration par défaut exim4 de Debian n'est pas définie primary_hostname. Exim utilise par défaut uname () pour trouver le nom d'hôte. Si cet appel ne renvoie qu'un seul composant, gethostbyname () ou getipnodebyname () est utilisé pour obtenir le nom d'hôte complet.

Si vos Exim HELO en tant que localhost.localdomain, alors vous avez très probablement un / etc / hosts mal configuré configuré par certaines versions du programme d'installation Debian. Dans ce cas, veuillez corriger votre / etc / hosts.

Malheureusement, je ne connais pas assez bien l'administration des serveurs Linux pour savoir exactement ce que cela signifie :(

Jørn Schou-Rode
la source

Réponses:

21

Votre fichier / etc / hosts doit contenir au moins deux enregistrements. Le premier enregistrement doit être de la forme:

<IP_ADDRESS> <HOST_FQDN> <HOSTNAME>

le second devrait être de la forme:

127.0.0.1 localhost

Vous devez également vous assurer que votre fichier / etc / hostname contient le nom de domaine complet du serveur et que l'exécution hostname -frenvoie le nom de domaine complet de vos serveurs. Si vous vous assurez que tout cela est correct et redémarrez Exim, vous devriez commencer à le voir correctement HELO.

Paul Lathrop
la source
J'ai changé / etc / hostname d'un nom de machine locale en FQDN. hostname -frapporte toujours "localhost". La partie sur / etc / hosts dans votre réponse semble boguée - à quoi le premier enregistrement devrait-il ressembler?
Jørn Schou-Rode
1
Bien hostname -fqu'il signale toujours "localhost", il semble que le changement de / etc / hostname ait fait l'affaire - je suis en mesure de livrer mon courrier maintenant. J'aimerais quand même voir la partie manquante de votre message :)
Jørn Schou-Rode
Oops! Formatage du flub. Corrigé :-)
Paul Lathrop
1
/etc/hostnamene contient généralement pas le FQDN sur les systèmes Debian, seulement le nom d'hôte court.
Josip Rodin
Eh bien, la première ligne /etc/hostspeut être 127.0.0.2 mydomain.com myhostname( 127.0.0.2fonctionne aussi bien 127.0.0.1, car le bouclage est un réseau de classe A). Vous pouvez probablement combiner les deux lignes en une seule 127.0.0.1 mydomain.com myhostname localhost, mais localhostc'est un nom d'hôte canonique pour 127.0.0.1, n'est-ce pas? Tout cela étant donné que vous avez le nom d'hôte, pas le FQDN comme nom d'hôte. De plus, le changement /etc/hostnamene prend pas effet immédiatement, vous devez hostname myhostname. Ou redémarrez le serveur.
x-yuri
8

Si vous utilisez un seul fichier de configuration, définissez la variable PRIMARY_HOST_NAME sur le nom souhaité:

Par exemple dans /etc/exim4/exim4.conf:

PRIMARY_HOST_NAME = mybox.mydomain.com

ou définissez-le MAIN_HARDCODE_PRIMARY_HOSTNAMEdans update-exim4.conf.conf si vous utilisez une configuration de fichier fractionné.

Pour être sûr, redémarrez exim.


la source
Juste une note que l'hôte répertorié ne peut pas être entre guillemets, sinon exim envoie HELO 'mybox.mydomain.com'ce qui interrompt l'envoi de courrier à Google, peut-être à d'autres.
mkomarinski
1
Je ne trouve aucune mention de ce nom de variable "PRIMARY_HOST_NAME" dans la documentation. Où as tu trouvé ça?
Josip Rodin
Sur Debian, vous devez exécuter update-exim4.confaprès avoir changé la configuration. Et le redémarrage n'est généralement pas nécessaire après cela.
x-yuri
... Eh bien, eximsemble généralement remarquer les modifications apportées à la configuration sans rechargement. Mais il est sans doute plus sûr de recharger, car je suppose que le démon lui-même ne relit pas la configuration avant le rechargement. Ensuite, vous donnez l'impression qu'il /etc/exim4/exim4.confpeut contenir uniquement la ligne ci - dessus , mais au moment où vous créez le fichier, il /var/lib/exim4/config.autogeneratedest ignoré ...
x-yuri
... "Les processus bifurqués qu'Exim démarre pour la réception SMTP ou l'exécution de la file d'attente utiliseraient le nouveau fichier de configuration, tandis que le démon principal exim original utiliserait toujours l'ancien fichier de configuration." Donc, pour un fichier de configuration unique, il est préférable d'utiliser /etc/exim4/exim4.conf.localmacros, pour le fractionnement /etc/exim4/conf.d/main/000_localmacros(les fichiers dans maindir sont traités en premier). Et exécutez update-exim4.conf+ systemctl reload exim4après avoir apporté des modifications.
x-yuri
4

Le nom d'hôte principal est demandé lors de l'installation d'exim4. Vous pouvez exécuter la commande

sudo dpkg-reconfigure exim4-config

pour parcourir à nouveau les invites.

Pour autant que je sache, si vous utilisez déjà la 'configuration partagée' (beaucoup de petits fichiers sous /etc/exim4/conf.d) et que vous choisissez de vous en tenir à l'invite, dpkg-reconfigure ne devrait pas écraser vos modifications de configuration existantes autres que les paramètres qu'il vous demande, mais, comme toujours, vous devez d'abord effectuer une sauvegarde pour être sûr.

David North
la source
2
Il semble seulement demander un "nom de messagerie [qui] devrait être le seul nom de domaine complet (FQDN)". Cependant, ce paramètre est déjà correct et le HELO semble toujours dire "localhost".
Jørn Schou-Rode
Ce dont vous parlez est d'un nom de messagerie qui va, surprise, surprise, /etc/mailname. Par défaut, il est utilisé pour qualifier les adresses non qualifiées . Ceux qui consistent uniquement en nom d'utilisateur. En ajoutant un nom de domaine à partir de /etc/mailname. L'adresse résultante est utilisée dans l'en- Fromtête.
x-yuri
2

La primary_hostnamevariable est remplie en fonction du nom de domaine complet (FQDN) du système. Sur Debian et les systèmes associés, cela se forme généralement en utilisant le contenu des fichiers /etc/hostnameet /etc/hosts. Le fichier de nom d'hôte doit contenir le nom d'hôte court (par exemple foo) et le fichier d'hôtes doit contenir une entrée se résolvant fooen foo.bar.baz, c'est-à-dire le nom d'hôte avec son suffixe de domaine (correspondant normalement à une entrée DNS).

La sortie de la commande hostname(sans aucun paramètre) renverra la première et la hostname -fsortie renverra la seconde.

Le fichier de nom d'hôte est généralement rempli lors de l'installation, et le fichier d'hôtes peut être modifié pour avoir un autre enregistrement à côté des enregistrements d'hôte local par défaut - il doit être de la forme:

<IP address> <hostname FQDN> <hostname>

Les trois colonnes doivent être séparées par des espaces ou des tabulations, cela n'a pas d'importance. L'adresse IP peut être 127.0.0.1 tout comme localhost, mais la partie du nom d'hôte correspond au nom d'hôte du système et la partie centrale doit être le FQDN, c'est-à-dire le nom d'hôte avec un suffixe de domaine.

Pour vérifier que la ligne fonctionne, exécutez simplement hostname -fet vérifiez qu'elle renvoie le nom de domaine complet de votre serveur.

Enfin, redémarrez Exim, par exemple avec:

sudo service exim4 restart

Ensuite, vous devriez commencer à le voir correctement HELO. Sa variable peut être vérifiée en exécutant:

/usr/sbin/exim4 -bP primary_hostname

(NB: j'ai initialement fait cela comme une modification de la réponse de 2009, mais elle a été rejetée. Les choses que je corrigeais à l'origine sont: il n'était pas nécessaire de répéter l'enregistrement localhost par défaut, expliquez simplement ce que l'addition devrait être; expliquez laquelle L'adresse IP peut être utilisée; expliquer ce qu'est le nom de domaine complet; expliquer comment vérifier l'exim lui-même.)

Josip Rodin
la source
/usr/sbin/exim4 -bP primary_hostnamene fonctionne pas. Vous pouvez vérifier le nom d'hôte HELO en envoyant un e-mail de test au vérificateur d' authentification de port25 ou à toute autre boîte aux lettres où vous pouvez voir l'original. Plus d'informations ici . Pensez à mettre à jour votre réponse.
x-yuri
Cela fonctionne très bien sur ma machine stable Debian (stretch). Pouvez-vous s'il vous plaît expliquer exactement que cela ne fonctionne pas pour vous? Notez que la documentation sur exim.org/exim-html-current/doc/html/spec_html/… indique clairement que la valeur par défaut helo_dataest $primary_hostname. Sur les systèmes Debian, vous pouvez le remplacer en utilisant la REMOTE_SMTP_HELO_DATAvariable, mais si vous définissez simplement votre nom d'hôte principal correctement, ce n'est pas nécessaire.
Josip Rodin
Je crois que j'ai essayé et il s'est plaint de ne pas prendre d'argument. Mais je ne peux pas le reproduire maintenant, alors tant pis, ma mauvaise. En ce qui concerne "si vous venez de définir correctement votre nom d'hôte principal", il n'est généralement pas admis que le nom d'hôte doit résoudre quoi que ce soit. Alors disons "si vous définissez le nom d'hôte comme l'exim vous attend ..." et laissez-le à ça :)
x-yuri
Je suis désolé, mais je ne pense pas qu'il soit sage de tirer une conclusion ad hoc d'une longue discussion debian-devel d'il y a plus de dix ans au pied de la lettre. Il serait plus utile de signaler un document de politique concernant une telle chose.
Josip Rodin
C'est le mieux que j'ai pu trouver. Si vous pouvez trouver quelque chose de mieux ou une preuve de vos mots, je serais heureux si vous me le disiez. Pour l'instant, tout ce que je peux dire, c'est que même de nos jours, il y a des gens qui ne mettent pas de nom d'hôte /etc/hosts. Et tout ce que je demande, c'est de ne pas appeler convenable ce qui n'est pas généralement accepté.
x-yuri
1

après avoir ajouté la même chaîne dans / etc / hosts, hostname -f renverra votre nom de domaine complet

myrocode
la source
En d'autres termes, myhostnameva à /etc/hostname(suivi de hostname myhostname). Et 127.0.0.1 mydomain.com myhostname.com localhostva à /etc/hosts. De plus, rechargez eximjuste au cas où.
x-yuri
0

J'ai le même problème. Je dois changer le nom d'hôte de la messagerie, car certains e-mails échouent lorsqu'ils ont été envoyés. Avec cette erreur:

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

Je le change donc en paramètre/etc/exim.config param primary_hostname

Un code de ce fichier:

smtp_connect_backlog = 50
smtp_accept_max = 100

#primary_hostname = myhostname.com 
deliver_queue_load_max = 3
Diego Gallardo
la source
Hah, ce message m'aide avec "primary_hostname" et maintenant mon exim fonctionne mieux que jamais :)
0

dans WHM goto Exim Configuration Manager -> Advanced Editor

faites défiler vers le bas jusqu'à ce que vous trouviez «Ajouter des paramètres de configuration supplémentaires» (un gros bouton bleu) et cliquez dessus.

dans la nouvelle ligne, ajoutez [primary_hostname] = [mondomaine.com]

faites défiler vers le bas et cliquez sur Enregistrer.

Satalink
la source