Webserver einfach
Die einfachste Lösung: Du hast einen Router, auf dem schon ....
Nein, das ist in diesem Fall nicht ganz das Gelbe vom Ei. Denn obwohl auf den Routern ein Webserverprogramm läuft, kann man ihn nicht als Webserver missbrauchen. Der dort installierte Webserver ist ausschließlich für die Bedienoberfläche zuständig und es ist nicht sinnvoll, diesen für andere Zwecke umzustricken. Das fällt in diesem Fall also flach. Du brauchst also zwingend ein anderes Gerät, irgendeinen Computer, auf dem schon Linux installiert ist, oder auf dem Du Linux installieren kannst. So ein Rechner könnte z.B. Dein gekauftes NAS sein oder Dein selbst "aufgesetzter" Samba - bzw. FTP-Server. Denn "Webserver" ist auch "nur" ein Programm, das natürlich mit anderen Programmen gleichzeitig auf einem Computer laufen kann.
Doch bevor wir damit anfangen, muss ich die
Arbeitsweise eines Webservers
loswerden.
- Das Programm lauscht aktiv am Port 80 der Netzwerkschnittstelle auf Anfragen und versucht diese zu beantworten
- Diese Anfragen sind von der Sorte "ich will dieunddie Datei haben!"
- Der Speicherort für diese und zugehörige Dateien ist im Webserver festgelegt und wird "Documentroot" genannt
- Existiert die Datei dort, dann wird sie ausgeliefert, wenn nicht, dann wird eine Datei mit einer Fehlermeldung zurückgegeben
- Der Kunde (ich will haben) stellt fest, ob zu der gelieferten Datei noch andere Daten nötig sind (z.B. Bilder, Javascript, CSS) und fordert die an
- Existieren die Zusatzdaten, werden sie ausgeliefert, sonst nicht, aber auch keine Fehlermeldung
- Alle Vorgänge werden in einer Log-Datei genauestens protokolliert
Jetzt die
Voraussetzungen auf dem Rechner:
- Du brauchst einen Speicherort für "Documentroot". Dafür ist bei Linux normalerweise
/srv/www/htdocs
vorgesehen, aber das muss nicht so sein, irgendein anderer Ordner tut es genauso - Das Programm braucht einen Benutzer, der nicht "root" ist und dem der Ordner für "Documentroot" gehört. Üblicherweise ist das der Benutzer www, aber das muss nicht so sein, jeder andere Benutzer tut es auch, allerdings sollte es ein Benutzer sein, der nur für den Webserver da ist und für sonst nichts. Er darf nicht in der Gruppe root sein!
- Du brauchst einen FTP-Server zusätzlich, denn mit dem werden die Dateien, die der Webserver ausliefern soll, nach "Documentroot" übertragen
- Ein Webserver ist meist nur nützlich, wenn er aus dem Internet erreichbar ist (oder willst Du nur die Mitbewohner in der WG "beglücken"?). "Aus dem Internet" bedeutet: Sicherheitsproblematik! Es wimmelt von Angriffsversuchen aus dem Internet, systematisch grasen Unholde alle IPs ab und versuchen, ob sie in irgendeinen Server eindringen können. Und wenn es bei Deinem Server eine Lücke gibt, stehst Du auf einer Stufe mit Microsoft, Amazon, Facebook usw. Keine Bange, so schlimm ist das auch nicht, aber die Problematik musst Du im Hinterkopf behalten bei allem, was Du tust.
- Wenn der Webserver aus dem Internet erreichbar sein soll, dann brauchst Du eine lesbare Adresse so wie in meinem Fall "hartmut.homelinux.org". Dein Router hat eine eindeutige IP, so dass er aus dem Internet erreichbar ist. Leider wechseln die Provider jede Nacht die IP aus (aus Datenschutzgründen). Die Lösung heißt DynDNS, ein Service, der einen Adressnamen wechselnden IPs zuordnen kann.
- Sobald Du eine DynDNS hast, musst Du Deinen Router mit den Daten bestücken, damit diese Zuordnung Namen <--> IP auch funktioniert.
- In Deinem Router musst Du eine Portfreigabe einrichten. Dazu gehört ein Port - in diesem Fall "80" - und eine IP - in diesem Fall die IP Deines Webservers. Ab der Einrichtung lässt die Firewall Deines Routers alle Anfragen aus dem Internet auf Port 80 durch und der Router leitet die Anfragen auf die IP Deines Servers weiter. Sollte auf dem Server auch eine Firewall laufen, musst Du dort auch den Port 80 freigeben!
Sicherheitstipps
Aus der Auswertung meiner Log-Dateien weiß ich, dass die Informatik-Bösewichte der Welt am liebsten Standards abfragen. Und weil es so schön einfach ist, die vorgegebenen Standards einfach beizubehalten, haben sie damit oft Erfolg. Beispiel: ich weiß, dass viele Hausbesitzer einen Zweitschlüssel außen am Haus "versteckt" haben. Die häufigsten Orte dafür sind "unter der Fußmatte", "unter der Mülltonne" und "auf dem Balken des Carport". Schleiche ich mich also durch meinen Ort und sehe bei jedem Haus an den drei genannten Orten nach, dann werde ich irgendwann fündig und kann ins Haus. Easy, oder? Glaub mir, das funktioniert!
Übertragen auf den Webserver: wenn der Standard für "Documentroot" /srv/www/htdoc
ist, dann kann jeder, der es schafft, per Sicherheitslücke aus "Documentroot" auszubrechen sich leicht weiter orientieren. Er sieht zwar nichts wirklich, kennt aber den Verzeichnisbaum und kann sich damit weiterbewegen zu Ordnern, die ihn interessieren. Lege ich "Documentroot" irgendwo anders hin, z.B. nach /home/Webserver/MeineInternetDokumente
, dann habe ich gleich drei Fallen gelegt: außerhalb von "Documentroot" ist nicht /srv/www
, sondern /home/Webserver
. Das kann ein Angreifer nicht auf Anhieb sehen, er müsste sich erst mühsam orientieren. Zweitens habe ich deutsche Bezeichner gewählt, die das üblicherweise englischsprachige Publikum nicht kennt und ich benutze Groß- und kleinschreibung, was für "try and error"-Versuche eine Erschwernis darstellt. Zusätzlich heißt der Benutzer des Webservers nicht www, sondern hat einen "normalen" deutschen Namen und ein sicheres Passwort. Und mein Zweitschlüssel für unser Haus ist elektronischer Art und verbirgt sich in einem gewöhnlichen Stein unter hunderten von ähnlichen Steinen. Viel Spaß beim Suchen ...
XAMPP
Mit sicherheitsrelevanten Dingen spielt man nicht! Und deshalb gibt es die komplette Webservereinrichtung als Spielversion. Sie heißt XAMPP und ist bei den Apache-Friends erhältlich. Lade Dir das Paket auf Deinen Arbeitsrechner (nicht auf den Server) herunter und installiere es auf dem Arbeitsrechner (nicht auf dem Server) genau nach deren Anweisung und nicht anders ! Dann funktioniert der Webserver auch.
XAMPP ist die Buchstabenfolge der Worte: X, Apache, MySQL, PHP und Perl. X steht für eines der Betriebssysteme Linux oder Windows, denn früher gab es mal die Unterscheidung in LAMPP und WAMPP, Apache heißt das Webserverprogramm, MySQL ist eine Datenbank, PHP ist eine Script-Sprache, mit der man dynamische Webseiten erstellt und Perl ist ebenfalls eine Scriptsprache, mit der man Webseiten auswertet. Wir brauchen hier nur Apache, denn dynamische Webseiten, für die PHP und MySQL gebraucht werden, kommen später.
Lies Dir bitte auf der Webseite, von der Du XAMPP gerade heruntergeladen hast, das Kapitel "LIES MICH" durch, ich spare mir das hier. Für den Anfang reichen die Startbefehle (als root) "/opt/lampp/lampp startapache
" und "/opt/lampp/lampp startftp
". Rufst Du jetzt im Browser "localhost" auf, dann siehst Du den Erfolg. Jetzt kannst Du Deine erste Webseite schreiben, per FTP auf den Server laden und sie Dir anschließend mit Deinem Browser ansehen. Für die Herstellung von Webseiten empfehle ich meinen "Homepage-Kurs".
Aber einen Hinweis muss ich noch loswerden: XAMPP ist eine reine Spielwiese und nicht für den produktiven Einsatz gedacht. Ansonsten viel Spaß beim stöbern ...
Der "richtige" Webserver
![Das Apache-Logo Das Apache-Logo](Bilder/Apache-Feder.png)
Hast Du Dir schon Gedanken gemacht, wo der Ordner für "Documentroot" hin soll?. Wie schon gesagt, es ist egal wo, aber wenn Du bei der Vorgabe /srv/www/htdocs
bleiben willst, dann muss ich vorher doch noch was wichtiges loswerden:
Der Inhalt des Webservers hat auf der Systempartition nichts zu suchen
Denn sollte mit der Installation mal irgendetwas sein und Du musst neu installieren, dann überschreibt das den Ordner für den Webinhalt. Abhilfe: Du bindest eine extra Festplattenpartition an der Stelle ein! Oder Du legst "Documentroot" auf die /home-Partition, die Du hoffentlich wie üblich angelegt hast.
Jetzt installierst Du den eigentlichen Webserver. Installiere Apache2 mit allem, was dazu gehört. Das müsste automatisch auch apache2-prefork und apache2-utils installieren. Bevor das Programm gestartet wird, musst Du diverse Einträge in Konfigurationsdateien machen.
Diese "config"-Dateien befinden sich bei Opensuse fast alle in /etc/apache2/
, die fehlende ist /etc/sysconfig/apache2
. Die Struktur sieht so aus:
Overview of include files, chronologically: httpd.conf | |-- uid.conf . . . . . . . . . . .UserID/GroupID to run under |-- server-tuning.conf . . . . . sizing of the server |-- sysconfig.d/loadmodule.conf . [*] load these modules |-- listen.conf . . . . . . . . . .IP adresses / ports to listen on |-- mod_log_config.conf . . . . define logging formats |-- sysconfig.d/global.conf . . . [*] server-wide general settings |-- mod_status.conf . . . . . . . restrict access to mod_status |-- mod_info.conf . . . . . . .. restrict access to mod_info |-- mod_usertrack.conf . . . . . defaults for cookies |-- mod_autoindex-defaults.conf . defaults for directory listing |-- mod_mime-defaults.conf . . . defaults for mime configuration |-- errors.conf . . . . . . . . . .customize error responses |-- ssl-global.conf . . . . . . . SSL for default server | |-- default-server.conf . . . . . set up the default server | |--mod_userdir.conf . . . . enable UserDir | `--conf.d/apache2-manual?conf add the docs | |-- sysconfig.d/include.conf. . . [*] your include files | (for each file to be included here, put its name | into APACHE_INCLUDE_* in /etc/sysconfig/apache2)
Das sieht unheimlich kompliziert aus, ist aber halb so wild, hier muss man nur wenig eintragen. Die wichtigste Datei ist ganz oben: httpd.conf
. In der braucht schon mal nichts geändert werden, dort stehen nur alle aufgeführten Dateien drin als "include". Aber hier einige der anderen Dateien mit den Einträgen. Alle Dateien sind gut kommentiert, so dass Du mit Englisch-Kenntnissen keine Schwierigkeiten haben wirst, die Stellen zu finden.
default-server.conf: /der/ordner/fuer/documentroot
ServerName (der Name des Rechners)
ServerAdmin (Deine Mailadresse)listen.conf : Listen 80
uid.conf: User (der Name des Besitzers des Webordners)
Group (Gruppe, in der der Besitzer ist)
Hinweis: Falls der Server eine Seite nicht ausliefern kann, wird er statt derer automatisch eine Fehlerseite (Error 404) schicken, in der er den Servernamen und Deine Mailadresse einsetzt, damit hilfreiche Besucher Deines Webauftrittes Dir Bescheid sagen können. Und natürlich passiert das auch bei einigen anderen Fehlern ...
Jetzt brauchst Du nur noch eine erste HTML-Seite, die im Quelltext so aussehen könnte:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 \ Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd"> <html> <head> </head> <body> <h1>Meine erste Seite</h1> </body> </html>
Diese Seite speicherst Du als index.html
in "documentroot" ab und jetzt kannst Du den Webserver starten:
und rufst von einem anderen Rechner aus den Server auf: gib in die Adresszeile Deines Lieblingsbrowsers die IP-Nummer Deines Servers ein gefolgt von ENTER. Wenn Du alles richtig gemacht hast, wirst Du Deine erste Seite sehen.
Viel Spaß beim Erstellen Deines Webauftritts ...