117471
Goto Top

CentOS 7 und postfix: War das klug?

Ich habe da gerade etwas gebastelt von dem ich mir im nachhinein die Frage stelle, ob das schlau war oder ob ich damit evtl. perspektivisch ein Eigentor schieße. Mir ist es wichtig, möglichst die distributionsabhängige "best practice" einzuhalten, damit meine Kollegen nachvollziehen können, was ich gebastelt habe und damit zukünftige Updates / Upgrades sauber durchlaufen.

Ich habe heute erstmalig seit langem ein CentOS aufgesetzt und beschäftige mich erstmalig mit Postfix; das sieht alles etwas anders aus als Debian mit exim4.

Darüber, dass Hostname, Domainname usw. grundsätzlich stimmen müssen, brauchen wir nicht zu diskutieren. "Irgendwie" habe ich weiterhin gelernt, dass es unklug ist, den Hostnamen an die 127.0.0.1 zu binden. Auch haben hostname und hostname -f beide den FQHN ausgegeben und domainname lediglich ein beherztes (none) zurückgeworfen.

Also habe ich:
  1. Den Hostnamen in /etc/hostname eingetragen
  2. Den Domainnamen in /etc/domainname eingetragen
  3. Die /etc/rc.d/rc.local um ein beherztes "domainname -F /etc/domainname" ergänzt
  4. In der /etc/hosts den Hostnamen und den FQHN für die IP-Adresse 127.0.1.1(!) gesetzt

Zwischenergebnis: hostname, hostname -f und domainname liefern stimmige Ergebnisse. Ich bin glücklich

Als nächstes viel mir auf, dass sich der Postfix im HELO mit meinserver.localdomain gemeldet hat. Das ist ein knapp 10 Jahre alter Bug, wegen dem sich postfix bei der Interpretation des Hostnames vertut.
Im offiziellen Repository ist Postfix 2.10.1 enthalten, der Bug ist erst in der 2.11 gefixt. Ich möchte auf der Kiste nichts selbstgebautes und schon gar keine inoffiziellen Repositories haben, und habe den Hostnamen in der /etc/postfix/main.cf forciert:
myhostname = meinserver.unsereoffizielledomain.de
mydomain = meinserver.unsereoffizielledomain.de

In dem Zusammenhang bzw. beim anschließenden Neustart vom postfix ist mir derselbige um die Ohren geflogen. Der fühlte sich augenscheinlich dadurch gestört, dass er seinen eigenen Hostnamen in der /etc/hosts auf einer IP-Adresse gefunden hat (...auf der 127.0.1.1...), zu der er jedoch kein Interface hat. Diverse Google-Ergebnisse raten, in dem Fall in der master.cf den Eintrag
inet_interfaces = any
zu setzen. Das gefällt mir irgendwie auch nicht so richtig, ich wollte da lieber
inet_interfaces = 127.0.0.1, 127.0.1.1
stehen haben face-smile Aus diesem Grund habe daraufhin auf dem Loopback-Device lo einen Alias (lo:0) erstellt, der die IP-Adresse 127.0.1.1 hat.

Ergebnis: Posfix startet und meldet sich im HELO brav mit dem richtigen Hostnamen. Ich bin immer noch glücklich


Den Relay-Host für externe Adressen zu konfigurieren war kein Hexenwerk.

Jetzt nehmen wir uns noch einmal die E-Mail-Adressen vor. Zum testen hat sich bei mir folger Befehl etabliert:
cat /etc/hosts | mail -S "Alle Enten fliegen hoch" testadresse@halt.irgendwo  

Die interne Zustellung an root@meinserver.unsereoffizielledomain.de funktioniert perfekt.

Ich habe es zwar nicht ausprobiert, aber ich behaupte mal, dass ich das mit einem "Sender domain must exist" quittiert bekomme wenn ich so einen Krempel auf den SmartHost schiebe...

Ergo habe ich kurzerhand eine /etc/postfix/generics etabliert und dort eine Ersetzung konfiguriert:
root@meinserver.unsereoffizielledomain.de meinserver@unsereoffizielledomain.de

Die Adresse meinserver@unsereoffizielledomain.de existiert natürlich und wird auch regelmäßig abgerufen - ich schwör 's! face-smile

Die externe Zustellung funktioniert somit auch perfekt. Alle Headerdaten sehen "hübsch" aus.

Wie findet Ihr die Lösung? Zuviel Frickelei? Habe ich da total ins Klo gegriffen und übersehe das in meiner Euphorie?

Letztendlich soll das "nur" ein LAMP-Server werden, der ab und zu mal eine E-Mail aus einem bash-Script verschickt (Backupmeldungen usw.). Aber da ich seit Version 4.5 kaum was mit CentOS gemacht habe, bin ich mir irgendwie unsicher, ob das alles wirklich so klug war oder ob ich nicht "zuviel umgebaut" habe.

Content-Key: 292358

Url: https://administrator.de/contentid/292358

Printed on: April 23, 2024 at 15:04 o'clock

Member: AndiEoh
AndiEoh Jan 07, 2016 at 20:23:42 (UTC)
Goto Top
Hallo,

IMHO solltest du sehr gute Gründe haben bevor du irgend etwas an der /etc/hosts änderst, bei meinen > 10 Postfix Installationen war das noch nie notwending. Die /etc/domainname kenn ich gar und die die /etc/hostname sollte von deiner CentOS Installation schon richtig befüllt sein?

Eleganter wäre sicher inet_interfaces = loopback-only und das mapping wird meist über die /etc/aliases erledigt was allerdings historisch bedingt ist. Das setzen von mydomain kannst du dir auch sparen wenn sowieso keine lokale Zustellung erfolgen soll.

Generell solltest du versuchen die Anpassungen auf möglichst wenige Dateien zu beschränken und dies auch dokumentieren.

Gruß

Andi
Mitglied: 117471
117471 Jan 12, 2016 updated at 16:36:19 (UTC)
Goto Top
Zitat von @AndiEoh:

IMHO solltest du sehr gute Gründe haben bevor du irgend etwas an der /etc/hosts änderst, bei meinen > 10 Postfix Installationen war das noch nie notwending.

Das ist nachvollziehbar. Ich vermute, dass der Hostname in dem Fall bei Dir an die IP von der "echten" IP-Adresse gebunden ist, also in etwa so etwas:
127.0.0.1 localhost localhost.localdomain
192.168.0.1 meinserver meinserver.unsereoffizielledomain.de 

Richtig? Ich wollte hier flexibel bleiben und möglichst wenig Abhängigkeiten zu externen Ressourcen (Netzwerkanbindung) haben. In meinem Beispiel ist die einzige Abhängigkeit die IP-Adresse, der DNS-Server und das Gateway. Wenn ich diese Angaben verändere, läuft der Server sofort und ohne weitere Veränderungen in dem neuen Netz. Alles Weitere (FQHN, E-Mail usw.) baut auf diese wenigen Werte auf.

Auch möchte ich eine Kultur etablieren, nach der alle LinuxVM - unabhängig vom OS - grundlegend zumindest erst einmal "weitestgehend ähnlich" konfiguriert sind. Weiterhin könnte ich die Maschine so z.B. auch als Vorlage für neue Hosts verwenden.

Aus diesem Grund möchte ich den FQHN an das "immer in unveränderter Form existierende" Loopback-Device binden, darf dies aber nicht über 127.0.0.1 machen (diverse Programme, u.A. Gnome, stolpern darüber).

Das Verfahren, den Hostnamen an die 127.0.1.1 zu binden, habe ich mir IMO bei Debian abgeschaut und fand es immer ganz praktikabel... face-smile

> Die /etc/domainname kenn ich gar

Mir fällt bei nahezu allen Distributionen auf, dass hostname, hostname -f und domainname falsche Werte ausgeben, was immer wieder zu Problemen führt.

Das Verfahren, eine /etc/domainmame zu etablieren deren Inhalt bei jedem Start als DNS-Domainname gesetzt wird, habe ich mir bei Gentoo abgeschaut und fand es immer ganz praktikabel... face-smile

und die die /etc/hostname sollte von deiner CentOS Installation schon richtig befüllt sein?

Ich kann mich nicht mehr genau erinnern. Aber ich meine, ich hätte den Inhalt von "meinserver.unsereoffizielledomain.de" auf "meinserver" reduziert.

Das setzen von mydomain kannst du dir auch sparen wenn sowieso keine lokale Zustellung erfolgen soll.

Wie gesagt - in meinem Fall funktioniert die interne und die externe Zustellung. Ob ich die interne Zustellung jemals benutze, bleibt natürlich abzuwarten^^

Generell solltest du versuchen die Anpassungen auf möglichst wenige Dateien zu beschränken und dies auch dokumentieren.

Fassen wir noch einmal zusammen:
  1. /etc/hosts auf "reinen Hostnamen" reduziert
  2. /etc/domainname etabliert, über die wird bei jedem Neustart der Domänenname gesetzt
  3. Alias 127.0.1.1 für 127.0.0.1 gebaut, Host- und Domainnamen an diese IP-Adresse gebunden
  4. Postfix antwortet nur über Loopback-Devices (127.0.0.1, 127.0.1.1)
  5. Korrekten Hostnamen in Postfix konfiguriert
  6. /etc/postfix/generics etabliert

Mit dem Ziel einer höchstmöglichen Wiederverwertbarkeit meiner Lösung

Dass ich gerade einen eigenen Artikel für unser internes Wiki schreibe, versteht sich von selber face-smile