Wie ändere ich den primären_Hostnamen von Exim4 auf einer Debian-Box?


24

Ein entfernter SMTP-Server, den ich versuche, E-Mails zuzustellen, um die Annahme des HELO von meinem Server zu verweigern:

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

Anscheinend sendet mein Exim4-Server localhostals FQDN. Beim Durchsuchen des Netzes und einiger primary_hostnameKonfigurationsdateien habe ich erfahren, dass der während HELO als FQDN gesendete Wert aus der Konfigurationsvariablen stammt.

Meine Frage ist: Wie kann ich diese Variable in einem Debian-System richtig ändern? Ich schätze, ich kann einfach einen Wert in einer der Exim4-Konfigurationsdateien fest codieren, aber meiner Meinung nach ist es sinnvoller, wenn der Wert automatisch einer /etc/mailnameoder einer anderen zentralisierten Namenskonfiguration entspricht.

Ich habe das Gefühl, dass die Antwort auf meine Frage in diesem Text aus dem Debian-Wiki zu finden ist :

Der von Exim in EHLO / HELO verwendete Name wird aus der Konfigurationsoption übernommen primary_hostname. Debians exim4-Standardkonfiguration wird nicht festgelegt primary_hostname. Exim ist dann standardmäßig uname (), um den Hostnamen zu finden. Wenn dieser Aufruf nur eine Komponente zurückgibt, wird gethostbyname () oder getipnodebyname () verwendet, um den vollständig qualifizierten Hostnamen abzurufen.

Wenn Ihr Exim-HELO localhost.localdomain lautet, haben Sie höchstwahrscheinlich eine falsch konfigurierte / etc / hosts, die von einigen Versionen des Debian-Installationsprogramms erstellt wurde. In diesem Fall reparieren Sie bitte Ihre / etc / hosts.

Leider bin ich mit der Administration von Linux-Servern nicht vertraut genug, um genau zu wissen, was das alles bedeutet :(

Antworten:


21

Ihre Datei / etc / hosts sollte mindestens zwei Datensätze enthalten. Der erste Datensatz sollte folgende Form haben:

<IP_ADDRESS> <HOST_FQDN> <HOSTNAME>

der zweite sollte von der Form sein:

127.0.0.1 localhost

Sie müssen auch sicherstellen, dass Ihre Datei / etc / hostname den vollqualifizierten Domänennamen des Servers enthält und dass die Ausführung hostname -fden vollqualifizierten Domänennamen Ihres Servers zurückgibt. Wenn Sie sicherstellen, dass dies alles korrekt ist, und Exim neu starten, sollten Sie damit beginnen, es HELO richtig anzuzeigen.


Ich habe / etc / hostname von einem lokalen Computernamen in den vollqualifizierten Domänennamen geändert. hostname -fmeldet immer noch "localhost". Der Teil über / etc / hosts in Ihrer Antwort scheint fehlerhaft - wie soll die erste Aufzeichnung aussehen?
Jørn Schou-Rode

1
Obwohl hostname -fimmer noch "localhost" gemeldet wird, hat die Änderung in / etc / hostname den Trick getan - ich kann meine E-Mails jetzt zustellen. Ich würde trotzdem gerne den fehlenden Teil Ihres Beitrags sehen :)
Jørn Schou-Rode

Hoppla! Formatierungs-Flub. Behoben :-)
Paul Lathrop

1
/etc/hostnameenthält normalerweise nicht den FQDN auf Debian-Systemen, sondern nur den kurzen Hostnamen.
Josip Rodin

Nun, die erste Zeile /etc/hostskönnte lauten 127.0.0.2 mydomain.com myhostname( 127.0.0.2funktioniert genauso gut 127.0.0.1, da Loopback ein Klasse-A-Netzwerk ist). Sie können wahrscheinlich die beiden Zeilen zu einer kombinieren 127.0.0.1 mydomain.com myhostname localhost, aber localhostist ein kanonischer Hostname für 127.0.0.1, nicht wahr? Das alles unter der Voraussetzung, dass Sie einen Hostnamen haben, nicht einen FQDN als Hostnamen. Änderungen werden /etc/hostnamenicht sofort wirksam hostname myhostname. Oder starten Sie den Server neu.
X-Yuri

8

Wenn Sie eine einzelne Konfigurationsdatei verwenden, setzen Sie die Variable PRIMARY_HOST_NAME auf den gewünschten Namen:

Zum Beispiel in /etc/exim4/exim4.conf:

PRIMARY_HOST_NAME = mybox.mydomain.com

oder setzen Sie MAIN_HARDCODE_PRIMARY_HOSTNAMEin update-exim4.conf.conf, wenn Sie die geteilte Dateikonfiguration verwenden.

Starten Sie exim aus Sicherheitsgründen neu.


Nur ein Hinweis, dass der aufgeführte Host nicht in Anführungszeichen stehen darf, da ansonsten exim- HELO 'mybox.mydomain.com'Sendungen unterbrochen werden, wenn E-Mails an Google gesendet werden , möglicherweise an andere.
Mkomarinski

1
Ich kann diesen Variablennamen "PRIMARY_HOST_NAME" in der Dokumentation nicht finden. Wo hast du das gefunden?
Josip Rodin

Unter Debian müssen Sie update-exim4.confnach dem Ändern der Konfiguration ausgeführt werden. Danach ist in der Regel kein Neustart mehr erforderlich.
X-Yuri

... naja, eximallgemein scheinen die Änderungen an der Konfiguration ohne Nachladen zu bemerken. Das Neuladen ist jedoch sicherer, da der Dämon die Konfiguration vermutlich erst nach dem Neuladen erneut liest. Dann lässt du es so klingen, als ob /etc/exim4/exim4.confes nur die obige Zeile enthalten könnte , aber in dem Moment, in dem du die Datei /var/lib/exim4/config.autogenerated
erstellst

... "Die gegabelten Prozesse, die Exim für den SMTP-Empfang startet oder in der Warteschlange ausgeführt wird, würden die neue Konfigurationsdatei verwenden, während der ursprüngliche Haupt-Exim-Daemon weiterhin die alte Konfigurationsdatei verwenden würde." Für einzelne Konfigurationsdateien ist es daher am besten /etc/exim4/exim4.conf.localmacros, sie zu teilen /etc/exim4/conf.d/main/000_localmacros(Dateien im mainVerzeichnis werden zuerst verarbeitet). Und führen Sie update-exim4.conf+ aus, systemctl reload exim4nachdem Sie Änderungen vorgenommen haben.
x-yuri

4

Der primäre Hostname wird während der Installation von exim4 abgefragt. Sie können den Befehl ausführen

sudo dpkg-reconfigure exim4-config

um die Eingabeaufforderungen erneut durchzugehen.

Soweit ich weiß, sollte dpkg-reconfigure, wenn Sie bereits die geteilte Konfiguration (viele kleine Dateien unter /etc/exim4/conf.d) verwenden und sich daran halten, wenn Sie dazu aufgefordert werden, keines von beiden überschreiben Ihre vorhandenen Konfigurationsänderungen ändern sich nicht zu den Einstellungen, zu denen Sie aufgefordert werden. Sie sollten jedoch aus Sicherheitsgründen wie immer zuerst eine Sicherungskopie erstellen.


2
Es scheint nur nach einem "E-Mail-Namen [der] der einzelne, vollqualifizierte Domänenname (FQDN) sein sollte" zu fragen. Diese Einstellung ist jedoch bereits korrekt und der HELO scheint immer noch "localhost" zu sagen.
Jørn Schou-Rode

Was Sie sprechen ist über ein Mail - Name, der, Überraschung geht, Überraschung /etc/mailname. Standardmäßig werden damit nicht qualifizierte Adressen qualifiziert . Diejenigen, die nur aus Benutzernamen bestehen. Durch Hinzufügen eines Domainnamens von /etc/mailname. Die resultierende Adresse wird im FromHeader verwendet.
x-yuri

2

Die primary_hostnameVariable wird gemäß dem vollqualifizierten Domänennamen (FQDN) des Systems gefüllt. Auf Debian- und verwandten Systemen wird dies normalerweise unter Verwendung des Inhalts der /etc/hostnameund /etc/hosts-Dateien erstellt. Die Hostnamendatei sollte den kurzen Hostnamen enthalten (z. B. foo), und die Hostdatei sollte einen Eintrag enthalten, fooin den aufgelöst wird foo.bar.baz, dh den Hostnamen mit seinem Domänensuffix (normalerweise passend zu einem DNS-Eintrag).

Die Ausgabe des Befehls hostname(ohne Parameter) gibt die erstere und die hostname -fAusgabe die letztere zurück.

Die Hostnamendatei wird in der Regel bei der Installation ausgefüllt, und die Hostdatei kann so bearbeitet werden, dass sie neben den standardmäßigen localhost-Datensätzen einen weiteren Datensatz enthält. Dieser sollte die folgende Form haben:

<IP address> <hostname FQDN> <hostname>

Die drei Spalten sollten durch Leerzeichen oder Tabulatoren getrennt sein, es spielt keine Rolle. Die IP-Adresse kann wie localhost 127.0.0.1 lauten, der Hostname stimmt jedoch mit dem Systemhostnamen überein, und der mittlere Teil sollte der FQDN sein, dh der Hostname mit einem Domänensuffix.

Um zu überprüfen, ob die Leitung funktioniert, führen Sie sie einfach aus hostname -fund überprüfen Sie, ob der FQDN Ihres Servers zurückgegeben wird.

Starten Sie abschließend Exim neu, zB mit:

sudo service exim4 restart

Danach solltest du es HELO richtig sehen. Die Variable kann überprüft werden, indem Folgendes ausgeführt wird:

/usr/sbin/exim4 -bP primary_hostname

(NB: Ich habe dies ursprünglich als Änderung der Antwort aus dem Jahr 2009 getan, aber sie wurde abgelehnt. Die Dinge, die ich ursprünglich repariert habe, waren: Es war nicht erforderlich, den Standard-Localhost-Datensatz zu wiederholen, sondern nur zu erläutern, was der Zusatz sein sollte Die IP-Adresse kann verwendet werden. Erläutern Sie den vollqualifizierten Domänennamen (FQDN). Erläutern Sie, wie das Exim selbst überprüft werden kann.


/usr/sbin/exim4 -bP primary_hostnamefunktioniert nicht Sie können den HELO-Hostnamen überprüfen, indem Sie eine Test-E-Mail an den Authentifizierungsprüfer von port25 oder an eine beliebige andere Mailbox senden , in der Sie das Original sehen können. Mehr dazu hier . Erwägen Sie, Ihre Antwort zu aktualisieren.
X-Yuri

Es funktioniert einwandfrei auf meiner Debian-Stable-Maschine (Stretch). Kannst du bitte genau erklären, dass es bei dir nicht funktioniert? Beachten Sie die Dokumentation unter exim.org/exim-html-current/doc/html/spec_html/…. Die Standardeinstellung helo_datalautet eindeutig $primary_hostname. Auf Debian-Systemen können Sie es mit der REMOTE_SMTP_HELO_DATAVariablen überschreiben. Wenn Sie jedoch nur Ihren primären Hostnamen richtig einstellen, ist dies nicht erforderlich.
Josip Rodin

Ich glaube, ich habe es versucht und es hat sich darüber beschwert, dass ich nicht gestritten habe. Aber ich kann es jetzt nicht reproduzieren, also mach dir nichts draus, mein Schlimmes. In Bezug auf "Wenn Sie nur Ihren primären Hostnamen richtig festlegen" wird nicht allgemein akzeptiert, dass der Hostname in etwas aufgelöst werden muss. Sagen wir also "Wenn Sie den Hostnamen so setzen, wie es exim von Ihnen erwartet ..." und belassen Sie ihn dabei :)
x-yuri

Es tut mir leid, aber ich halte es nicht für sinnvoll, eine lange Debian-Entwickler-Diskussion von vor über einem Jahrzehnt ad hoc zum Nennwert abzuschließen. Es wäre hilfreicher, wenn Sie auf ein Richtliniendokument in Bezug auf so etwas verweisen würden.
Josip Rodin

Das ist das Beste, was ich finden konnte. Wenn Sie etwas Besseres oder einen Beweis für Ihre Worte finden, würde ich mich freuen, wenn Sie es mir sagen. Im Moment kann ich nur sagen, dass es auch heutzutage Leute gibt, die keinen Hostnamen angeben /etc/hosts. Und alles, was ich bitte, ist, nicht richtig zu nennen, was nicht allgemein akzeptiert wird.
x-yuri

1

Nach dem Hinzufügen der gleichen Zeichenfolge in / etc / hosts gibt hostname -f Ihren vollqualifizierten Domänennamen zurück


Mit anderen Worten, myhostnamegeht an /etc/hostname(gefolgt von hostname myhostname). Und 127.0.0.1 mydomain.com myhostname.com localhostgeht zu /etc/hosts. Plus eximfür alle Fälle neu laden .
x-yuri

0

Ich habe das gleiche Problem. Ich muss den E-Mail-Hostnamen ändern, da einige E-Mails beim Senden fehlschlagen. Mit diesem Fehler:

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

Also ändere ich es in /etc/exim.configden Parameter primary_hostname

Code dieser Datei:

smtp_connect_backlog = 50
smtp_accept_max = 100

#primary_hostname = myhostname.com 
deliver_queue_load_max = 3

Hah, dieser Beitrag hilft mir bei "primary_hostname" und jetzt funktioniert mein Exim besser als je zuvor :)

0

Gehen Sie in WHM zu Exim Configuration Manager -> Erweiterter Editor

Scrollen Sie nach unten, bis Sie "Zusätzliche Konfigurationseinstellungen hinzufügen" (eine große blaue Schaltfläche) finden, und klicken Sie darauf.

Fügen Sie in der neuen Zeile [primary_hostname] = [mydomain.com] hinzu.

Scrollen Sie nach unten und klicken Sie auf Speichern.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.