1&1 cloud server unter Ubuntu 16.04.1 LTS, Teil 7, Apache- und Servermonitoring

Nachdem wir unseren Apache Webserver grundkonfiguriert haben, wäre es schön, wenn wir nun online sehen könnten was unser Apache macht und wie er konfiguriert ist. Dazu gibt es die beiden Apache Module status und info. Wenn wir in das Verzeichnis /etc/apache2/mods-enabled schauen, sehen wir, dass das status Modul sogar aktiviert ist. Es ist jedoch aus Sicherheitsgesichtspunkten keine gute Idee diese beiden Module so zu konfigurieren, dass man die Infomationen von beliebigen Rechnern aus abrufen kann. Deshalb sind beide Module so konfiguriert, dass nur lokal vom Server auf die Seiten zugegriffen werden kann. Wenn wir versuchen auf unsere https://mysubdomain.mydomain.tld/server-status Seite zuzugreifen erhalten wir eine Fehlerseite „403 Forbidden“, wir haben keine Berechtigung auf die Seite zuzugreifen. Für die server-info Seite erhalten wir ein „404 Not Found“, das Modul ist nicht aktiviert.

Wir werfen einen Blick in die beiden Konfigurationsdateien:

In beiden Fällen ist der Zugriff, durch die Anweisung „Require local“, lokal auf den Server beschränkt. Wenn wir hinter einer festen IP-Adresse sitzen, können wir diese natürlich hier eintragen. Ich bevorzuge einen anderen Weg, da ich hinter einer AVM Fritzbox am Vodafone Kabelanschluss, ehemals Kabel Deutschland, sitze und keine feste IP-Adresse habe, jedenfalls keine feste IPv4 Adresse. Voraussetzung ist der Einsatz eines DynDNS Dienstes für meine Fritzbox. AVM bietet einen kostenlosen Dienst für seine Kunden an, den man sehr einfach konfigurieren kann. Einmal eingerichtet findet man den DNS Namen für seine Fritzbox in deren Konfigurationsoberfläche unter Internet -> Online-Monitor. Dort sollte dann ein Eintrag MyFRITZ! existieren, mit einer URL der Form https://routerkennung.myfritz.net und einem Benutzernamen. Der DNS Name für unseren Router ist dann routerkennung.myfritz.net und ein „host routerkennung.myfritz.net“ sollte die momentan zugewiesene IP-Adresse unseres Routers zurückliefern. Da sich zumindest bei Vodafone die zugewiesene IP-Adresse selten ändert könnten wir natürlich diese IP-Adresse in die Konfigurationsdateien eintragen. Ich mache es hier etwas anders.

Zunächst lege ich im Apache Konfigurationsverzeichnis, im von uns angelegten Verzeichnis misc, siehe den 5. Teil der Artikelserie, eine neue leere Datei an:

In die Datei /etc/apache2/misc/my-current-admin-host.conf schreiben wir später eine passende „Require“ Anweisung. Dann tragen wir in allen Konfigurationen, in denen wir den Zugriff von unserem Heimnetz aus freischalten wollen, eine „Include“ Anweisung ein, die den Inhalt der Datei /etc/apache2/misc/my-current-admin-host.conf in die Konfiguration aufnimmt. Als Beispiel sehen wir hier die Datei /etc/apache2/mods-available/info.conf:

Das gleiche machen wir in der Datei status.conf. Nun haben wir eine zentrale Stelle an der wir die IP-Adresse unseres Admin Hostes, bzw. die unseres Internetrouters eintragen können. Am einfachsten wäre für mich, wenn der 1&1 Cloud Server auch über IPv6 ans Internet angebunden wäre. Dann wäre es jetzt ausreichend in unsere neu angelegte Konfigurationsdatei /etc/apache2/misc/my-current-admin-host.conf meine feste IPv6-Adresse einzutragen. Leider ist dem momentan nicht so.

Die nächste einfach aussehende Option wäre die folgende:

Dies funktioniert leider nicht. Wenn wir einen „host“ angeben, müssen die DNS-Auflösung und die reverse DNS-Auflösung zusammen passen. Das ist bei den DynDNS Namen nicht der Fall, wie man leicht selbst überprüfen kann. Da ich dennoch einen Hosteintrag einem IP-Eintrag vorziehe, wähle ich folgende Vorgehensweise. Ich bestimme mir anhand des DynDNS Namens die IP-Adresse und dann von dieser ausgehend den Hostnamen im Providernetz. Diesen Hostnamen trage ich dann in unsere Konfigurationsdatei ein. Anschliessend müssen wir den Apache noch veranlassen seine Konfiguration neu zu lesen.

Um den ganzen Vorgang zu automatisieren benutze ich ein Script /root/bin/setmyhost.sh aus dem 5. Teil der alten Artikelserie mit einigen Korrekturen:

Das script erwartet einen existierenden Hostnamen als Argument. Die Optionen -v, –verbose triggern das eine ausführliche Ausgabe, während die Optionen -h, –help die Hilfe zum Script anzeigen. Die Funktionsweise ist wie oben beschrieben. Zunächst wird für den angegebenen Hostnamen die zugehörige IP-Adresse bestimmt und dann per reverse Auflösung der zugehörige Hostnamen. Dieser Hostnamen wird mit dem in der Datei /etc/apache2/misc/my-old-admin-host.txt abgelegten Namen verglichen. Nur wenn die beiden Namen voneinander abweichen, wird unsere Konfigurationsdatei für die Hostauthentifizierung /etc/apache2/misc/my-current-admin-host.conf neu geschrieben und ein Apache Reload durchgeführt. Anschließend wird der neue Namen in die /etc/apache2/misc/my-old-admin-host.txt geschrieben. Dies stellt sicher, dass nur wenn notwendig eine neue Konfigurationsdatei geschrieben und ein Apache Reload durchgeführt wird. Im Falle  eines Fehlers wird „Require host localhost.localdomain“ in die Datei /etc/apache2/misc/my-current-admin-host.conf geschrieben und damit der Zugriff lokal auf den Server beschränkt.

Wir ändern die Permissions und führen das Script zunächst an der Kommandozeile aus.

Wir erhalten die folgende Ausgabe:

Wenn wir das Script erneut ausführen, erhalten wir keine Ausgabe, da nichts zu tun ist. Erst wenn sich IP-Adresse meines Routers ändert, wird die Konfigurationsdatei neu geschrieben und es erfolgt eine Ausgabe. Das hat den angenehmen Nebeneffekt, das wir eine E-Mail-Benachrichtigung mit den Änderungen erhalten, wenn wir das Script in einem cronjob ausführen und sich die IP-Adresse und damit der Hostnamen geändert hat.

Zuletzt tragen wir mit „crontab -e“ einen entsprechenden cronjob in unserer crontab ein.

Hiermit checken wir unseren Adminhost alle 5 Minuten.

Das Apache info Modul müssen wir noch aktivieren und den Apache restarten.

Diese Konfiguration hat allerdings den Nachteil, dass die Server-Status und die Server-Info-Seite serverweit für alle virtuellen Hosts konfiguriert ist. Das möchte ich so nicht haben und nehme deshalb einige Änderungen vor. Dazu lösche ich zunächst die beiden Links auf die Konfigurationsdateien im /etc/apache/mods-enabled Verzeichnis.

Anschliessend laden wir die beiden Konfigurationsdateien per Include Anweisung in unseren default vhost. Hier der entsprechende Abschnitt der der Datei /etc/apache2/sites-enabled/000-default-le-ssl.conf.

Nach einem Restart des Apache Servers können wir dann unter https://myhost.mydomain.tld/server-info/ und https://myhost.mydomain.tld/server-status/ auf die Apache Info bzw. Apache Status Seite zugreifen.

Um bequem unsere PHP Konfiguration überprüfen zu können, werden wir zunächst eine PHP Info Webseite erstellen, auf die ebenfalls nur von unserem Admin-Host zugegriffen werden kann. Hierzu erstellen wir zunächst ein neues Verzeichnis im Webserverbaum.

Dort erstellen wir eine Datei /var/www/phpinfo/index.php mit dem folgenden Inhalt.

Nun brauchen wir noch eine Apache Konfigurationsdatei phpinfo.conf. Diese erstellen wir im Verzeichnis /etc/apache2/conf-available.

Diese Konfiguration können wir dann ebenfalls per Include Anweisung in unseren virtuellen Host übernehmen. Der entsprechende Abschnitt der Datei /etc/apache2/sites-enabled/000-default-le-ssl.conf sieht dann wie folgt aus:

Nach einem Reload des Apache Servers können wir dann unter https://myhost.mydomain.tld/phpinfo/ auf die PHP Info Seite zugreifen.

Ähnlich verfahren wir mit der Apache Dokumentation. Zunächst installieren wir die Dokumentation.

In die Konfigurationsdatei /etc/apache2/conf-available/apache2-doc.conf tragen wir ebenfalls eine Include Anweisung zur Konfiguration unseres Adminhostes ein.

Diese Konfiguration können wir dann ebenfalls per Include Anweisung in unseren virtuellen Host übernehmen. Nach einem Apache Reload steht die Apache Dokumentation dann unter der URL https://myhost.mydomain.tld/manual/ zur Verfügung.

Zum Schluss dieses Artikels wollen wir noch ein Servermonitoring mit Munin einrichten. Hierzu installieren wir Munin zunächst.

Hierbei werden eine ganze Reihe Pakete mitinstalliert. Anschliessend installieren wir noch etliche empfohlene Pakete.

Anschliessend nehmen wir eine Gundkonfiguration für Munin. Auf die Konfiguration einzelner Module werde ich hier nicht eingehen. Zunächst ändern wir die Datei /etc/munin/munin.conf.

Wichtig ist dabei nur der Abschnitt unter „# a simple host tree“. Danach passen wir die Datei /etc/munin/munin-node.conf an.

Nachdem wir die Änderungen durchgeführt haben, müssen wir den munin-node Dienst neu starten.

Zuletzt ändern wir die Konfiguration für den Apache Webserver /etc/munin/apache24.conf und fügen zwei Include Anweisungen für unseren Adminhost ein.

Im Apache Verzeichnis wurde bei der Installation ein Link auf diese Konfiguration im Verzeichnis /etc/apache2/conf-available angelegt. Mit Include /etc/apache2/conf-available/munin.conf können wir die Konfiguration in unseren virtuellen Host übernehmen. Nach einem Reload des Apache steht die Munin Server Monitoring Seite für unseren Server unter https://myhost.mydomain.tld/munin/ zur Verfügung.

Damit schliesse ich den 7. Teil der Artikelserie. Im 8. Teil werden wir uns mit PHP und MySQL auf dem neuen Server beschäftigen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.