Schlagwort-Archive: Webserver

Homeserver 28: Von außen auf den Server zugreifen

Es gibt immer wieder Situationen, in denen es doch schön wäre, wenn man von außen auf den Server käme. Zum Beispiel, als mir letztens die Platten im RAID verrücktgespielt hatten. Da hätte ich von außen einiges tun können, so musste ich warten, bis ich wieder zu Hause bin. OK, in diesem Falle war das jetzt nicht so schlimm. Aber in der Zukunft soll der Server auch zum Videorekorder werden, und dann würde einfach nichts mehr aufgenommen werden. Das wäre dann schon nicht mehr so schön…

Hierbei gibt es zwei Zugangsarten, die für mich wichtig sind. Zum Einen möchte ich auf die Weboberfläche des Servers kommen. Hier könnte ich die Logs sehen, Temperaturen abfragen und später, wenn es denn mal eingerichtet ist, Aufnahmen programmieren. Alles natürlich, wie in den letzten Teilen beschrieben, SSL-verschlüsselt und Passwort-gesichert. Lest euch hier dazu noch mal die Artikel zur Webserver-Installation im Teil 20 und das Absichern des Webservers im Teil 23 durch.

Das ist jetzt aber eigentlich erst mal nur recht informativ, aber von hier aus kann ich nicht wirklich was tun. Also muss ich auch irgendwie auf die SSH-Oberfläche des Servers. Ich weiß nicht wirklich, ob das auch so über die gleiche Art funktioniert, wie für den Webserver, daher richte ich hierfür eine VPN-Verbindung ein. Die hat auch den Vorteil, dass ich auch auf die Datenverzeichnisse des Servers zugreifen kann.

Vorbereitungen

Viel gibt es da gar nicht vorzubereiten. Ich möchte, wenn ich mal nicht zu Hause bin, von meinem MacBook aus auf mein Netzwerk zugreifen können. Hierfür, und für noch eine ganze Anzahl anderer Aufgaben, habe ich ein Windows in einer virtuellen Maschine auf dem Mac laufen. In dieses Windows müssen alle Tools, die dafür benötigt werden, installiert werden. Dabei ist das bei mir z. B. Putti, oder wenn man möchte, Cygwin, als SSH-Client.

Fernzugriff auf den Webserver

Eigentlich braucht es hierfür nur einen DynDNS-Account. Da ich als Privatperson ja nicht immer eine feste IP-Adresse habe, braucht es so eine Hilfstechnik. Und da ich mein Netz mit einer Fritz!Box ans Netz angebunden habe, würde sich ja der MyFritz-Dienst anbieten. Also melde ich mich dort an.

MyFritz!-Konto erstellen

Ich öffne also den Webbrowser meiner Wahl und gebe in die Adresszeile „fritz.box“, natürlich ohne die Anführungsstriche, ein. Es öffnet sich das Login-Fenster der Fritz!Box, in das ich mein Passwort eingebe und Enter drücke.

Um nun zu der Funktion zu gelangen, unter der man sich einen MyFritz-Zugang anlegen kann, muss man auf den Link „Internet“, und dann den Link „MyFritz“ klicken.

Hier wähle ich weiter unten aus, ob ich ein neues Konto erstellen möchte, oder ob ich meine Fritz!Box an einem vorhandenen Konto anmelden möchte. Da ich noch kein Konto habe, wähle ich „Neues MyFritz!-Konto erstellen“ aus. Anschließend gebe ich noch meine Mailadresse ein und wähle mir ein Kennwort für den MyFritz!-Dienst. Danach klicke ich auf „Weiter“.

Nun sagt mir die Fritz!Box, dass ich einen Benutzer anlegen soll:

Für den Zugriff aus dem Internet ist die Einrichtung eines FRITZ!Box-Benutzers erforderlich. Der Internetzugriff ist nur mit Benutzername und Kennwort möglich.

OK, dann fülle ich mal die Felder aus, die mir hier angeboten werden. Im Feld „Name“ wähle ich einen Benutzernamen, das Feld für die E-Mail-Adresse ist schon ausgefüllt, und dann muss noch ein Kennwort für den Fritz!Box-Benutzer festgelegt werden. Und hiernach klicke ich wieder auf „Weiter“.

Jetzt öffne ich mein Mailprogramm, denn bei meiner Anmeldung an den MyFritz!-Dienst hat mir das System eine Mail geschickt, in der ein Bestätigungslink ist. Diesen klicke ich an.

Es öffnet sich nun der Webbrowser. Hier muss man jetzt die Nutzungsbedingungen für MyFritz! durchlesen und mit einem Kontrollkästchen akzeptieren. Klickt man dann auf „Konto aktivieren“, wird das MyFritz!-Konto bestätigt und die Fritz!Box daran angemeldet.

Und wie geht es jetzt weiter?

Anmelden an der Fritz!Box

Zwei Dinge gilt es nun zu tun: Zum Einen möchte ich wissen, ob meine Fritz!Box von außen zugänglich ist, zum Anderen wüsste ich gerne den Link zu ihr. Also, nur um sicher zu gehen, schließe ich mal alle Browserfenster und öffne ein neues leeres Fenster. Hier gebe ich in die Adresszeile „myfritz.net“ ein.

Auf dieser Seite kann ich mich nun anmelden, indem ich hier meine E-Mail-Adresse und mein MyFritz!-Kennwort eingebe. Weiter unten gibt es ein Kontrollkästchen, „Ich bin kein Roboter!“, dieses solltet ihr wirklich aktivieren. 🙂 Danach könnt ihr weiter unten auf die Schaltfläche „Zu meiner Fritz!Box““ klicken.

Jetzt passiert etwas ähnliches, wie mit meinem für meinen Webserver erstellten SSL-Zertifikat. Auf dieser Seite wird mir nun erklärt, was ich machen muss, aber das weiß ich ja schon aus Teil 23.

Wichtiger ist, dass hier auch der direkte Link zu meiner Fritz!Box steht. Dummerweise ist das aber ein Link, den sich keiner merken kann. Er sieht in etwa so aus:

https://XXX.myfritz.net:YYY/myfritz?user=meine_mailadresse%40gmx.de

Wobei das XXX für eine lange Buchstaben- und Zahlenkette steht, und als E-Mail-Adresse am Ende natürlich die Mailadresse, mit der ich mich angemeldet habe. Das YYY steht für eine zufällig vergebene Portnummer, die man in der Fritz!Box auch ändern kann. Wie gesagt, das kann sich ja keiner merken! Dafür muss ich noch eine Lösung finden!

Klicke ich auf diesen Link, erhalte ich die bekannte Fehlermeldung, dass der Verbindung nicht vertraut werden kann. Macht nix, ich kenne meine Fritz!Box, daher klicke ich wieder unten auf „Ich kenne das Risiko“. Nun klicke ich auf „Ausnahmen hinzufügen“, im folgenden Dialog auf „Zertifikat herunterladen“, hake das Kästchen bei „Diese Ausnahme dauerhaft speichern“ an und klicke dann auf „Sicherheitsausnahme bestätigen“. Fertig, die Anmeldeseite meiner Fritz!Box öffnet sich.

Gerätefreigabe Einrichten

Ich will ja meinen Server von außen erreichen können. Also muss ich ihn ja auch für den Zugriff von außen freigeben. Hierfür gehe ich wieder auf die Benutzeroberfläche der Fritz!Box und gehe nacheinander im Navigationsbereich auf „Internet“ und auf „Freigaben“.

In dieser Tabelle stehen alle Geräte, mit ihren von außen erreichbaren Adressen, auf die ich über meinen Browser zugreifen können möchte. Natürlich steht da jetzt noch kein Gerät, daher klicke ich auf „Neue MyFritz!-Freigabe“. Es öffnet sich ein Fenster, welches folgende Daten abfragt:

  • Netzwerkgerät: Hier wähle ich „server01“.
  • Anwendung: Hier wähle ich HTTPS-Server.
  • Verzeichnis: Das lasse ich leer, ist sowieso optional.

Anschließend klicke ich noch auf OK, damit wäre die Freigabe eingerichtet. Nun sehe ich in der Tabelle das Gerät, die Adresse und den dafür konfigurierten Dienst. Die Adresse für meinen Server sieht jetzt also so aus:

https://server01.xxx.myfritz.net:443

Wobei, den Port am Ende kann man auch weglassen, solange es ein Standard-HTTPS-Port ist. Die Fritz!Box selbst hat einen zufälligen Port erhalten, den muss ich angeben, wenn ich auf die Fritz!Box-Oberfläche aus dem Internet zugreifen möchte. Ich könnte mich hierfür natürlich auch einfach über myfritz.net anmelden.

So, auf meinen Server kann ich jetzt zugreifen, Logs sehen, Manpages lesen, aber das reicht mir ja noch nicht. Ich will auch per VPN auf SSH zugreifen können.

VPN einrichten

Um mit meinem iPhone oder meinem MacBook per VPN auf mein Netzwerk zugreifen zu können, muss ich dies in der Fritz!Box einstellen. Dies ist sogar recht einfach. Ich logge mich auf der Benutzeroberfläche der Fritz!Box ein und gehe im Navigationsbereich nacheinander auf „Internet“ und „Freigaben“. Im oberen Bereich des Fensters wähle ich „VPN“ aus. In der Tabelle stehen nun die verfügbaren VPN-Verbindungen. Da ist natürlich noch keine, daher füge ich mit der Schaltfläche „VPN-Verbindung hinzufügen“ eine neue Verbindung hinzu.

Zunächst werde ich gefragt, was für eine Verbindung ich einrichten möchte. Ich wähle daher den Punkt „Fernzugang für einen Benutzer einrichten“.

Nun öffnet sich die Liste der in der Fritz!Box eingerichteten Benutzer. Ich wähle also den für MyFritz! eingerichteten Benutzer aus und betätige die „Bearbeiten“-Schaltfläche daneben. In der Liste der Berechtigungen aktiviere ich das Kontrollkästchen „VPN“ und klicke dann auf OK.

Normalerweise sollte sich ein Fenster öffnen, welches zeigt, was man wo in sein iPhone oder Android-Gerät eingeben soll. Bei mir ist das nicht passiert, stattdessen habe ich einen OK-Schalter, der mir dann das Fenster öffnet. Das nutzt mir nur gerade nix, weil mein iPhone nicht geladen ist und am Strom hängt.

Das macht aber nichts, denn man kann sich die Daten jederzeit erneut anzeigen lassen. Man loggt sich einfach auf die Benutzeroberfläche der Fritz!Box ein, wählt im Navigationsbereich „System“, dort „Fritz!Box-Benutzer“, klickt neben dem für VPN berechtigten Benutzer auf „Bearbeiten“ und kann sich weiter unten mit dem Link „VPN-Einstellungen anzeigen“ das Fenster erneut anzeigen lassen. Hier folgt man dann einfach den Anweisungen.

Mit dem iPhone über VPN verbinden

Die Einstellungen in das iPhone zu fummeln ist etwas kompliziert. Gut für den, der eine externe Tastatur sein eigen nennt. Denn zum einen muss man die kryptische MyFritz!-Adresse eingeben und das Shared Secret, welches aus Zahlen, Klein- und Großbuchstaben besteht und 16 Stellen lang ist. Auch Benutzername und Kennwort kann man bei der Einrichtung der Verbindung im iPhone gleich angeben. Die Anleitung, die über den Link „VPN-Einstellungen anzeigen“ geboten wird, hat bei meinem iPhone jedenfalls tadellos funktioniert.

Um mich nun mit dem VPN zu verbinden, sollte man zum Testen mal machen, schalte ich erst mal mein WLAN am iPhone ab. Ich will mich über das 3G-Netz verbinden. Nun gehe ich in die App Einstellungen. Jetzt befindet sich unterhalb von „Persönlicher Hotspot“ der Schalter „VPN“. Wenn man den doppeltippt, dauert es eine Weile, bis die Verbindung aufgebaut ist, anschließend wechselt der Schalter von „Aus“ zu „Ein“. Genau so kann man es auch wieder trennen.

Nun schließe ich mal die App Einstellungen, und gucke mal in die Statuszeile des iPhones. Neben dem Symbol für 3G gibt es jetzt auch ein VPN-Symbol. Also öffne ich doch mal eine App, die garantiert nur in meinem eigenen Heimnetz funktionieren sollte. Da bietet sich dreaMote an, um meine Dreambox zu steuern. Die App öffnet sich und nach einer Wartezeit von etwa 5 bis 8 Sekunden kann ich sogar meine Timer sehen. Damit steht fest, auf dem iPhone funktioniert VPN prima. Dann kann ich es in der App Einstellungen ja auch wieder trennen.

VPN am MacBook

Eigentlich werden hier die gleichen Angaben gemacht, nur der Weg ist geringfügig anders. Daher beschreibe ich mal den Vorgang, VPN am MacBook einzurichten. Ich verwende hier Yosemite 10.10.2, das nur, falls es bei anderen Versionen etwas anders aussieht. Ich denke aber, da dürfte es nicht so viele Unterschiede geben. Ich gehe zum Eintragen des VPN-Zugangs ins MacBook also folgendermaßen vor:

  • Mit VO+M gehe ich ins Menü und wähle aus dem Menü „Apple“ die Systemeinstellungen.
  • Hier gehe ich zu „Netzwerk“ und öffne es mit VO+Leertaste.
  • Mit VO+Pfeil-rechts gehe ich weiter, bis ich zu „Dienst hinzufügen“ komme, und drücke dort VO+Leertaste.
  • Im Einblendmenü „Anschluss“ wähle ich „VPN“.
  • Bei VPN-Typ wähle ich „Cisco IPSec“.
  • Bei Dienstname kann ich eine Beschreibung eingeben, die ist frei wählbar.

Anschließend aktiviere ich die Schaltfläche „Erstellen“. Nun befinde ich mich wieder in der Vorherigen Ansicht, und ein weiterer Dienst wurde meiner Dienste-Tabelle hinzugefügt. Dieser muss aber noch konfiguriert werden. Wenn ich jetzt also mit VO+Pfeil-rechts weitergehe, finde ich die Angaben über Serveradresse, Account-Name und Passwort, wo ich die gleichen Werte eingebe, wie beim iPhone.

Anschließend aktiviere ich noch die Schaltfläche „Authentifizierungseinstellungen“, weil hier noch paar Angaben gemacht werden müssen. Zum Beispiel der Shared Secret und der Gruppenname. Auch diese Angaben sind die gleichen, wie für das iPhone, also fülle ich das aus und bestätige das Dialogfenster mit der OK-Schaltfläche.

Ich könnte mich hier natürlich auch verbinden, das mache ich aber nicht. Aber hier ist ein Markierungsfeld, welches man durchaus aktivieren sollte. Denn wenn man „VPN-Status in der Menüleiste anzeigen“ markiert hat, kann man sich ganz bequem über das Statusmenü mit dem VPN verbinden. Dann schließe ich das Fenster, bestätige, dass ich die Änderungen übernehmen will und schließe alle Fenster.

Die VPN-Verbindung am Mac ist zwar jetzt eingerichtet, ich kann sie aber gerade nicht testen. Ich bin ja in meinem eigenen WLAN, da macht das nicht so viel Sinn. Dies zu testen muss also warten, bis ich in einem anderen WLAN bin.

Vereinfachung der MyFritz!-URL

Es gibt bekanntlich viele Wege zur Fritz!Box, hier sind mal zwei davon.

  • Man könnte sich einen Account bei FreeDNS erstellen und hier eine Subdomain registrieren. Das ist sogar kostenlos.
  • Wenn man eigene Domains hat, könnte man sich evtl. ja auch eine Subdomain hier anlegen.

Beide Varianten hätten das gleiche Ziel, aber da ich bereits mehrere Domains habe, lege ich mir eine Subdomain an.

Ein Beispiel könnte so aussehen: Ich habe ja die Domain tuksub.de. Jetzt könnte ich mir eine Subdomain einrichten, wie z. B. „linuxserver“, und als Ziel gebe ich die kryptische MyFritz!-URL an. Wenn ich in meinen Browser jetzt also linuxserver.tuksub.de eingeben würde, würde mich der Browser automatisch auf server01.XXX.myfritz.net weiterleiten, wobei XXX für den kryptischen Buchstabensalat steht, den MyFritz! mir zugewiesen hat.

Natürlich war das nur ein Beispiel, die Tatsächliche Subdomain und Domain, unter der mein Server zu erreichen ist, behalte ich mal für mich… 🙂

Fazit

Es klingt alles komplizierter, als es am Ende tatsächlich einzurichten war. Allerdings war dies ein Schritt, der lange überfällig war. Denn erst jetzt werden gewisse Dinge möglich. Zum Beispiel Fehlerbehebung und Statusabfrage von außen, Programmierung des Videorekorder-Dienstes, sobald der mal installiert ist und, was jetzt auch noch kommen soll, CardDAv und CalDAV zum Synchronisieren meiner Kalender- und Kontaktdaten mit meinen Mobilgeräten.

Aber was genau ich jetzt als nächstes tue, mal gucken. In viele Bereiche muss ich mich noch einlesen, dann geht es weiter!

Homeserver 23: Webserver absichern

Der Webserver ist zwar zur Zeit nur von meinem internen Netz erreichbar, das soll sich aber später noch ändern. Aber so, wie er jetzt ist, wäre es fahrlässig, ihn für das Internet zu öffnen. Jeder könnte meine Server-Logs sehen, jeder könnte die Daten für PHP und MySQL finden, die auf meinem Server laufen. Für einen Angreifer sind das wichtige Daten. Also muss ich, bevor ich Zugriff von außen erlaube, den Webserver absichern.

Passwortschutz einrichten

Meine Server-Startseite hat Links zu allen wichtigen Punkten meines Servers. Jeder, der auf die Startseite kommt, kann sich meine Hardware, Systemdetails und Logs angucken. Also muss ich dafür sorgen, dass man dafür einen Benutzernamen und Passwort braucht. Und das ist gar nicht so schwer.

Zunächst müssen wir am Webserver was umkonfigurieren.

sudo nano /etc/apache2/sites-enabled/000-default

Ihr erinnert euch? Das ist die gleiche Datei, in der wir das DocumentRoot, also das Verzeichnis festgelegt haben, wo Apache nach den Website-Daten suchen soll. Hier müssen wir eine kleine Kleinigkeit ändern. Der Abschnitt sieht ursprünglich so aus:

    <Directory /raid1/web/HTML/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

In der Zeile, wo „AllowOverride None“ steht, müssen wir das „None“ durch „all“ ersetzen. Dann sieht die Zeile so aus: „AllowOverride all“.

Dann noch die Datei speichern, und den Webserver neu starten:

sudo service apache2 restart

Nun müssen im Verzeichnis „HTML“ in der Web-Freigabe zwei Dateien erstellt werden. Die erste Datei erstellen wir mit einem Texteditor. Um es einfach zu machen, mache ich das wieder von der SSH-Kommandozeile:

nano /raid1/web/HTML/.htaccess

Das sudo ist hier nicht nötig, weil wir die Datei mit den Rechten des angemeldeten Benutzers, also kamil, anlegen. Und in das leere Editorfenster schreibe ich folgendes rein:

AuthType Basic
AuthName "Passwort eingeben"
AuthUserFile /raid1/web/HTML/.htpasswd
require valid-user
  • AuthType Basic: Das sorgt für die Abfrage von Nutzerdaten.
  • AuthName „Passwort eingeben“: Dieser Text erscheint im Dialogfeld, wenn jemand die Seite aufruft. Hier könnte alles mögliche stehen.
  • AuthUserFile /raid1/web/HTML/.htpasswd: Das ist der Pfad zur Passwort-Datei, dazu komme ich gleich noch.
  • require valid-user: Jeder in der Passwort-Datei eingetragene Nutzer kann sich an der Seite anmelden.

OK, soweit so gut, aber die Passwort-Datei muss noch angelegt werden. Dies machen wir nicht mit einem Editor, weil das Passwort ja verschlüsselt abgelegt werden soll. Wäre ja witzlos, wenn das Passwort im Klartext auf der Platte liegen würde. Also nehmen wir ein Programm dazu, dass der Apache gleich mitgebracht hat:

sudo htpasswd -c /raid1/web/HTML/.htpasswd kamil

Falls noch keine Passwort-Datei existiert, muss sie angelegt werden, das macht der Parameter -c. Falls die Datei bereits existiert, braucht ihr den Parameter später nicht mehr. Dann kommt der Pfad zur Passwort-Datei, und am Ende der Benutzername.

Nun werde ich nach dem Passwort für kamil gefragt, dieses gebe ich zwei mal ein. Fertig, die Datei wurde erstellt und der Nutzer eingetragen.

Wenn ich jetzt entweder mit der IP-Adresse, oder auch mit http://server01 auf die Seite gehen will, öffnet sich ein Dialogfenster, welches mich nach Benutzername und Passwort fragt. Erst dann bin ich auf meiner Startseite und kann die Links anklicken und mir z. B. die Logs angucken.

Zugriff mit SSL erzwingen

Das ist erst mal die halbe Miete, die andere Hälfte ist die Absicherung mit einem SSL-Zertifikat. Wenn ihr in einem unverschlüsselten WLAN seit, dürft ihr auf gar keinen Fall auf den Server zugreifen, wenn die Verbindung nicht mit SSL abgesichert ist. Jeder, der wollte, könnte mitlesen. Wenn aber der Zugriff über SSL erfolgt, sind eure Daten sicher. Daher richte ich jetzt den Server so ein, dass er alles nur noch über SSL macht.

SSL-Zertifikate sind teuer, wenn man sie sich von einer offiziellen CA-Stelle ausstellen lässt. Die Browser kennen die CAs, (Certificate Authorities), und vertrauen den SSL-Zertifikaten. Ich hingegen will für meinen Homeserver jetzt nicht so viel Geld ausgeben, daher erstelle ich selbst ein Zertifikat und beglaubige es auch selbst. Nachteil, die Browser kennen das Zertifikat nicht und wollen, dass man es selbst bestätigt. Auch muss dieses Zertifikat dann manuell in die liste vertrauenswürdiger Zertifikate aufgenommen werden. Aber für einen Privatserver ist das OK. Wenn ich bei meinem Mailanbieter oder bei der Bank auf solch ein Zertifikat stoßen würde, würden bei mir alle Alarmglocken Sturm läuten.

Zunächst müssen wir am Apache-Webserver die SSL-Unterstützung einschalten. Dazu müssen Module geladen werden.

sudo a2enmod ssl
sudo a2ensite default-ssl

So, nun noch selbstsignierte SSL-Zertifikate erstellen:

sudo make-ssl-cert generate-default-snakeoil --force-overwrite

Damit nun alle Zugriffe auf den Webserver verschlüsselt passieren, müssen alle HTTP-Anfragen in HTTPS-Anfragen umgeleitet werden. Dies kann Apache, aber dazu muss erst wieder ein Modul aktiviert werden:

sudo a2enmod rewrite

Nun muss noch die Regel erstellt werden, die dafür sorgt, dass die Anfragen jeweils umgeleitet werden. Dies ändert man wieder in der 000-default-Datei:

sudo nano /etc/apache2/sites-enabled/000-default

Unter die Zeile, die mit „ServerAdmin“ beginnt, füge ich folgende Zeilen hinzu:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

Diese Datei speichern wir noch und müssen noch eine Datei editieren. Die default-ssl-Datei zeigt noch auf die falschen Verzeichnisse.

sudo nano /etc/apache2/sites-enabled/default-ssl

Hier müssen wieder genau die gleichen Zeilen angepasst werden, damit Apache die Webseite findet und auch die Passwortabfrage funktioniert.

Die Zeile „DocumentRoot“ muss geändert werden, damit da wieder /raid1/web/HTML steht.

Die Zeile <directory /var/www></directory> muss in <directory /raid1/web/HTML></directory> geändert werden.

Die Zeile „AllowOverride None“ muss zu „AllowOverride all“ geändert werden.

Die Datei noch speichern, und nachdem wir all diese Änderungen gemacht haben, den Webserver noch mal neu starten:

sudo service apache2 restart

Wenn ich an meinem Windows-Rechner mit Firefox nun auf die Seite http://server01 gehe, passiert folgendes: Es erscheint eine Meldung, dass dieser Verbindung nicht vertraut wird. Diese Meldung ignoriere ich, und wähle ganz unten den Schalter „Ich kenne das Risiko“. Hierauf erscheint noch mehr Text, welcher einen warnt, und normalerweise würde ich diese Warnungen auch sehr ernst nehmen. Ich weiß aber, dass es mein Server und mein Zertifikat ist, daher gehe ich ganz unten auf die Schaltfläche „Ausnahmen hinzufügen“. In dem nun folgenden Dialog aktiviere ich die Checkbox, „Diese Ausnahme dauerhaft speichern“ und klicke auf die Schaltfläche „Sicherheits-Ausnahmeregel bestätigen“.

Fertig!

Von nun an kann ich, ob nun innerhalb meines Heimnetzes oder von außen, auf meinen Server per SSL-Verbindung zugreifen. Falls ich also mal im Zug, im Hotel oder in einem anderen öffentlichen WLAN auf meinen Server will, kann jedenfalls so ohne weiteres keiner mitlesen.

Homeserver 21: Serverinformationen und Logs im Browser ansehen

In diesem Teil will ich mal ein Paar Anwendungen installieren, mit denen ich über den Webserver einiges an Informationen abfragen oder Datenbanken erstellen kann.

phpMyAdmin

Damit wir jetzt aber mit Datenbanken arbeiten, welche erstellen oder Sicherungen davon machen können, brauchen wir eine bequeme Anwendung. Zwar können wir das auch über die Kommandozeile machen, aber warum kompliziert, wenn es auch einfach geht? phpMyAdmin ist solch eine bequeme Form.

Installation

Wie alles in Linux, wird auch diese Anwendung auf die gleiche Weise installiert:

sudo apt-get install phpmyadmin

Während der Installation werden paar Fragen gestellt.

  • Welcher Webserver soll automatisch konfiguriert werden, damit phpMyAdmin damit funktioniert? Hier gibt es zwei zur Auswahl, ich habe Apache gewählt.
  • Datenbank mit config-db erstellen? Man kann das hinterher auch manuell machen, aber wie das geht, weiß ich nicht. Müsste ich erst lesen. Daher habe ich hier zugestimmt, damit das automatisch gemacht wird. phpMyAdmin funktioniert sonst nicht.
  • Das Datenbank-Administrator-Passwort.
  • Ein phpMyAdmin-Passwort.

Wenn man diese Angaben gemacht hat, ist phpMyAdmin bereits einsatzbereit. Man kann es sehen, wenn man den Browser öffnet, http://<ip des Servers>/phpmyadmin eingibt und die Webseite betrachtet. 🙂

Übrigens, offenbar kann man in der Adresszeile des Browsers auch den Rechnernamen eingeben. mit http://server01/phpmyadmin kam ich auch auf die phpMyAdmin-Seite.

Für die Anmeldung muss man als Benutzername „root“ und als Passwort das Datenbank-Administrator-Passwort eingeben, welches man bei der MySQL-Installation gewählt hat.

Wie man damit jetzt aber Datenbanken anlegt oder sichert, dazu komme ich, wenn es soweit ist.

phpSysInfo

Diese kleine Anwendung zeigt allerhand nützliche Informationen über den Server an. Hier kann man sehen, wie die Temperatur der Festplatten oder des Prozessors ist, wie der RAID-Status ist oder auch, welche Prozesse gerade laufen. Die Art der Anzeigen ist hier fast frei konfigurierbar.

Installation

Zunächst einmal lädt man sich die Anwendung von der phpSysInfo-Webseite herunter. Die geladene ZIP-Datei muss entpackt, und das darin befindliche Verzeichnis umbenannt werden. Zunächst hat es den Namen „phpsysinfo-<version>„, wobei man das Verzeichnis dann in „phpsysinfo“ umbenennt. Das habe ich auf meinem Windows-Rechner gemacht.

Auf dem Server gibt es ja die Freigabe Web, die ich als Netzwerklaufwerk verbunden habe. Dort existiert ein Verzeichnis „HTML“. Hier sucht ja der Webserver nach Dateien. Dort hinein kopiere ich das Verzeichnis „phpsysinfo“. Das war es schon, mehr muss nicht installiert werden.

Konfiguration

Im Verzeichnis „phpsysinfo“ liegt nun eine Datei die sich „phpsysinfo.ini.new“ nennt. Diese muss umbenannt werden, so dass sie „phpsysinfo.ini“ heißt.

Ich habe die INI-Datei aus Bequemlichkeit an meinem Windows-Rechner bearbeitet, aber das ist letztlich euch überlassen. In dieser Datei finden sich alle möglichen Einstellungen, die ihr dem Programm phpSysInfo übergeben könnt. Dies beinhaltet z. B. die Sprache, das Design und viele weitere Parameter. Jede Einstellung hier zu erwähnen würde den Rahmen bei weitem sprengen. Die einzelnen Einstellmöglichkeiten sind in der Datei in Englisch aber ausführlich beschrieben.

Besonders solltet ihr auf die Einstellungen für die Plugins achten. Hier könnt ihr festlegen, ob ihr Prozesse sehen wollt, RAID-Status oder S.M.A.R.T.-Informationen. Aber die meisten anderen Einstellungen können auf Standardwerten bleiben.

Aufruf

Geht mit eurem Browser einfach auf die IP-Adresse eures Servers, z. B. http://192.168.178.10/phpsysinfo. Die Seite baut sich auf, und ihr könnt die Informationen ablesen. Alternativ geht auch http://server01/phpsysinfo.

Log-Dateien im Browser betrachten

So ziemlich alles, was wir dafür brauchen, ist schon installiert. Der Webserver und PHP laufen, MySQL geht auch. Der Dienst rsyslog, den wir dafür brauchen, ist schon vorinstalliert.

Konfiguration der Datenbank

Dieser Punkt hat mich fast den ganzen Tag beschäftigt. Da gibt es so viele veraltete Informationen im Netz, aber egal. Letztlich habe ich es dann doch noch geschafft.

Damit rsyslog in eine Datenbank schreiben kann, muss ein weiteres Modul installiert werden.

sudo apt-get install rsyslog-mysql

Während der Installation werdet ihr gefragt, ob ihr die Datenbanken automatisch erstellen lassen wollt. Das beantwortet ihr mit ja. Dann wird das Datenbank-Administrator-Passwort abgefragt. Anschließend will rsyslog für sich noch ein Passwort erstellt haben. Wenn ihr diese Fragen beantwortet habt, ist rsyslog schon dabei, Logs in die Datenbank zu schreiben.

LogAnalyzer

Dies ist das Programm, mit dem ich mir die Logs angucken will. Dieses bekomme ich auf der Website des Herstellers. Die heruntergeladene Datei wird ausgepackt, und in dem jeweiligen Unterverzeichnis befindet sich ein Verzeichnis „src“. Dieses benenne ich um in „log“ und kopiere es in das HTML-Verzeichnis auf der Web-Freigabe.

Nun gehe ich mit dem Browser auf die Seite http://server01/log und folge den Anweisungen.

Eigentlich sind die Felder selbsterklärend. Als Log-Typ wähle ich „MySQL native“, Benutzername ist „root“ und Passwort ist das Datenbank-Administrator-Passwort. Als Host wird „localhost“ eingegeben.

Hier gibt es zwei Fallen, auf die ihr achten müsst. Der Datenbankname ist vorgegeben, den löscht ihr und tragt „Syslog“ ein. Die Tabelle ist ebenfalls vorgegeben, da steht „systemevents“. Da müsst ihr „SystemEvents“ eintragen, sonst funktioniert es nicht.

Auf die Frage, ob ich die Benutzerverwaltung installieren will, wähle ich ja, worauf wieder Eingabefelder für Datenbank und Tabellen aufgehen. Hier ändere ich nur den vorgegebenen Datenbanknamen in „Syslog“ und trage ansonsten alles so ein, wie vorher. Den Tabellenpräfix lasse ich aber so, wie es vorgegeben war. Anschließend noch schnell den ersten Admin-Benutzer einrichten, fertig.

Die Benutzerverwaltung ist wichtig, weil wir nur so an das Admin-Center rankommen, wo wir Einstellungen machen können. Sonst müssten wir mühsam irgendwelche PHP-Dateien editieren.

Wenn alles geklappt hat, werdet ihr auf die Seite geleitet, wo das Log angezeigt wird. Hier gibt es Suchfelder, viele Möglichkeiten, zu filtern, und eben, wenn alles geklappt hat, eine Menge Logeinträge.

Fazit

Leider stehen die früheren Logs hier nicht zur Verfügung. Die muss man sich evtl. mühsam an der Kommandozeile von Linux angucken. Aber ab jetzt wird jedes Syslog-Ereignis in die Datenbank geschrieben und kann hier über die Webseite ´http://server01/log` angeguckt, oder nach speziellen Einträgen gesucht werden.

Das war’s

Zumindest mal für den Augenblick. Aber damit ihr euch nicht alle URLs zu den unterschiedlichen Diensten merken müsst, könntet ihr euch ja eine Startseite auf http://server01/index.php mit den Links erstellen. Ich habe eine gebastelt, die zum einen die Links zu den Seiten hat, darunter auch die PHP-Info mit vielen nützlichen Infos anzeigt. Ihr könnt das ja als Beispielvorlage nehmen.

Kopiert den folgenden Text und fügt ihn in eine leere Textdatei ein. Speichert diese dann als index.php und kopiert sie in das HTML-Verzeichnis der Web-Freigabe.

<html>
<body>
<h1>System Startseite</h1>
<p>Hier sind die Links, um auf die wichtigsten Systembereiche zu kommen:</p>
<p><a href="/phpsysinfo">Systeminformationen mit PHPSysInfo</a></p>
<p><a href="/phpmyadmin">PHPMyAdmin</a></p>
<p><a href="/log">Log Analyzer</a></p>
<h1>PHP-Informationen</h1>
<?php
phpinfo();
?>
</body>
</html>

Damit müsst ihr euch jedenfalls nicht alle URLS merken und habt auch noch alle PHP-Funktionen und Einstellungen auf dem Bildschirm.

Homeserver 20: Webserver und Komponenten installieren

Als nächstes möchte ich auf dem Server einen Webserver installieren. Ich möchte jetzt nicht irgendwelche Webseiten im Internet anbieten, dafür wäre mein Server vielleicht zu schwach, oder zumindest mal die Anbindung ans Internet wäre dünn. Aber mit einem installierten Webserver kann man eine Menge interessanter Sachen machen. Zum Beispiel habe ich Tools gefunden, mit denen ich den Rechnerstatus abfragen kann, wie Temperatur, Lüfter und andere Parameter. Und das bequem im Browser, ohne dass ich mit SSH verbinden muss und Befehle eingeben muss. Dann habe ich Tools gefunden, mit denen ich die Server-Logdateien anzeigen und bequem durchsuchen kann. Auch das bequem im Browser. Das Management von Datenbanken geht auch super mit phpMyAdmin, also auch prima im Browser. Später soll vielleicht eine Cloud-Lösung installiert werden, ob es nun Owncloud wird, oder ein anderes Produkt welches mir CalDAV und CardDAV anbietet, weiß ich noch nicht. Aber auch hier, ein laufender Webserver sollte schon da sein.

Ich habe so was noch nie gemacht, das wird spannend. Vor allem die Konfiguration, denn besonders viele Informationen habe ich jetzt auf die Schnelle nicht gefunden. Aber, ich weiß ja ungefähr, wo die Konfigurationsdateien des Webservers abgelegt werden, versuche ich mich mal durchzuwühlen. Bei konkreten Fragestellungen kann ich ja immer noch im Netz suchen.

Es soll also Apache, der Webserver, PHP und MySQL als Datenbank installiert werden. Ob dann noch andere Tools installiert werden müssen, sehe ich dann, wenn es soweit ist.

Installation des Webservers

Das ist, denke ich, mit der einfachste Schritt. Man installiert einfach das Apache-Metapaket, und gut. Metapakete sind übrigens leer, sie fassen eine Gruppe von Paketen je nach Zweck zusammen. Das Apache-Metapaket installiert 4 oder 5 Pakete, die zum Betrieb des Webservers nötig sind. So muss man nicht alle Pakete einzeln installieren. Auch MySQL hat solche Metapakete, die die Installation vereinfachen.

Die Installation ist daher denkbar einfach. Das haben wir ja schon dutzende Male gemacht:

sudo apt-get install apache2

Fertig! Im Grunde läuft der Server schon. Man kann das sofort prüfen, in dem man im Browser mal die IP-Adresse des Servers eingibt. Aber das ist ja noch nicht alles. Ich habe ja auf dem RAID ein Verzeichnis web eingerichtet. Also muss Apache so konfiguriert werden, dass es die Webseiten-Daten dort sucht.

Konfiguration des Webservers

Der Webserver sucht seine Webseiten standardmäßig im Ordner /var/www. Das möchte ich aber nicht. Ich habe auf dem RAID einen Ordner web eingerichtet, damit ich die Website-Daten dort ablegen kann. Ich muss also dafür sorgen, dass Apache dort nach den Website-Dateien sucht.

Damit ich später kontrollieren kann, ob es geklappt hat, verschiebe ich erst mal die Test-Index-Datei, die im /var/www-Verzeichnis liegt, auf das RAID.

sudo mv /var/www/index.html -t /raid1/web/HTML

Im Verzeichnis web habe ich das Verzeichnis HTML erstellt, wo die ganzen Website-Daten reinkommen.

Nun teile ich Apache mit, dass der DocumentRoot, das ist das Verzeichnis mit den Website-Daten, auf dem RAID liegt.

sudo nano /etc/apache2/sites-enabled/000-default

In dieser Datei sind einige Werte eingestellt, aber die lassen wir erst mal in Ruhe. Zunächst müssen wir zwei Zeilen ändern.

    DocumentRoot /var/www

Diese Zeile müssen wir so ändern, dass sie auf das HTML-Verzeichnis auf dem RAID zeigt.

    DocumentRoot /raid1/web/HTML

Damit sucht der Server die Dateien nun in diesem Ordner. Es gibt aber noch eine Zeile, die die Rechte innerhalb des Verzeichnisses regelt. Hier muss auch noch etwas geändert werden.

    <Directory /var/www/>

Diese Zeile muss hinterher so aussehen:

    <Directory /raid1/web/HTML/>

Den Rest der Datei können wir in Ruhe lassen. Einfach speichern und dann noch den Webserver neu starten.

sudo service apache2 restart

Und wenn der Server wieder gestartet ist, öffnet mal euren Browser und gebt mal die IP-Adresse eures Servers ein. Ich habe meinem Server ja eine feste IP gegeben, daher weiß ich diese. Wenn alles geklappt hat, erscheint eine Webseite mit ungefähr diesem Text:

It works!

This is the default web page for this server.

The web server software is running but no content has been added, yet.

OK, läuft! Am Webserver müssen wir so jetzt nichts mehr machen.

PHP installieren

Damit gewisse in PHP programmierte Webseiten laufen können, muss PHP auf diesem Server installiert werden.

sudo apt-get install php5

Auch dies hat nun geklappt. Während der Installation wurde der Apache-Server neu gestartet. Damit ist auch die PHP-Installation erledigt.

MySQL installieren

Damit Datenbank-Anwendungen laufen können, muss ein MySQL Server und ein MySQL Client installiert werden. Und damit PHP-Anwendungen auf MySQL zugreifen können, muss PHP5-MySQL installiert werden.

sudo apt-get install mysql-server mysql-client php5-mysql

Während der Installation von MySQL werde ich nach einem Root-Passwort für den Datenbank-Administrator gefragt. Zwar ist das nicht unbedingt erforderlich, es wäre dennoch zu empfehlen, hier eines einzugeben. Es sollte sinnvollerweise nicht das gleiche Passwort sein, welches ihr am Server nutzt. Dann noch das Passwort erneut eingeben, fertig!

Fazit

Die Installation der Komponenten ist wirklich nicht so das Problem. Aber im nächsten Teil möchte ich ein paar Programme für den Webserver installieren, zum Beispiel phpsysinfo, mit dem man allerhand Statusinformationen zum Server bekommt. phpMyAdmin brauchen wir noch, um die Datenbanken managen zu können, und eine Anwendung, um die Logdateien zu durchsuchen wäre auch schön. Diese Dinge kommen in den nächsten Teilen nach und nach dran.