↑ zurück zur Startseite

TechTipps

»

Webentwicklung

↓ Quickie

XAMPP einrichten & absichern

Einleitung

[Screenshot von XAMPP]
Screenshot: Das XAMPP-Kontrollzentrum

XAMPP ist ein Komplett-Paket für Windows, mit dem man die „typischen“ Programme in einem Schwung installiert, mit denen eine Webseite im Internet läuft. Es ist ausdrücklich nicht dafür gedacht, auf dem eigenen Rechner einen Webserver laufen zu lassen, also unter heimischem Windows einfach ein Programm zu installieren und dann kostenlos die eigene Homepage online zu stellen. XAMPP ist eine Testumgebung, mit der man schnell und unproblematisch „ausprobieren“ kann, bevor man die entsprechenden Dateien online und live stellt.
Ich nutze den XAMPP gern, um auf meinem Eee PC unterwegs weiter arbeiten zu können, ohne online gehen zu müssen.

Wichtig ist, dass der XAMPP als Testumgebung gedacht ist und deshalb nicht so abgesichert ist, wie es für ein Live-System nötig ist. In der Original-Konfiguration ist der XAMPP auf Deinem Rechner von jedem Internetnutzer erreichbar. Das ist kein Fehler, das ist so gedacht! (XAMPP Philosophie und entsprechender Hinweis)

Wenn Du einen Webserver aufsetzen willst, um von Deinem Rechner aus Angebote im Netz zu veröffentlichen, dann reicht eine kleine Anleitung nicht aus. Dann musst Du Dich zwingend mit Serveradministration auskennen. Und das ist nicht nur zufällig ein Job, der fundiertes Fachwissen erfordert.

Zum XAMPP wird es hier keine detaillierte Anleitung geben, die gibt es im Netz schon zur Genüge und in größerem Umfang und höherer Qualität. Ich werde weder XAMPP ausführlich erklären, noch werde ich auch nur ansatzweise erklären (können), was für den Live-Betrieb eines Webservers alles nötig ist.
Ich stelle hier eine kleine Übersicht ins Netz, die ich selbst als Gedächtnisstütze nutze, wenn ich den XAMPP installiere & einrichte.

Am Ende des Texts gibt es eine Schnellübersicht für alle, die nur eine kurze Übersicht brauchen ohne Erklärung.

Herunterladen und Installieren

Der einfachste Teil: XAMPP ist ein „normales“ Windows-Programm. Das heißt, mehr als herunterladen und installieren musst Du nicht. Auf der XAMPP-Homepage findest Du unter den Downloads XAMPP für Windows. Für den normalen Gebrauch reicht die XAMPP „Lite“-Version völlig aus. Sie enthält Apache, PHP, MySQL, SQLite und diverse Hilfsmittel. Es fehlen insbesondere der Filezilla FTP Server und der Mercury Mailserver. Ich brauche beides im Offline-Testbetrieb bisher nicht. Wer sie braucht, nimmt statt der Lite- die normale XAMPP-Version.

Ich empfehle die Installation mit der EXE-Version. Du arbeitest schließlich sowieso auf Windows. Die Installation selbst ist auf der Homepage gut beschrieben. Das selbstentpackende Archiv bringt ein Unterverzeichnis „xampplite“ mit. Wer also nach „C:\XAMPP“ installiert, landet in „C:\XAMPP\xampplite“.

Beachte die Hinweise zu Vista, insbesondere soll der XAMPP ein eigenes Verzeichnis (z.B. C:\XAMPP) außerhalb des Standard-Programmverzeichnisses bekommen. Die verschiedenen Teile speichern Einstellungen und Logs in vorgegebenen Verzeichnissen. Im Normalbetrieb ist dies aber im Standard-Programm-Verzeichnis nicht möglich.

Natürlich sollten Apache und MySQL in der Firewall von Windows nicht mehr geblockt werden, also wenn die Frage kommt, richtig antworten.

Ich rate davon ab, die Server als Services in Windows laufen zu lassen. Ich starte per XAMPP-Kontrollzentrum sowieso immer nur, was ich gerade brauche. Wenn ich also nur in HTML und PHP arbeite, dann auch nur den Apache. MySQL starte ich bei Bedarf. Wenn ich nicht an Web-Projekten arbeite, sind Apache & Co ganz aus. Deshalb ist es meiner Meinung nach nicht nötig und nicht sinnvoll, die Server permanent als Dienste im Hintergrund mitlaufen zu lassen.

Wenn Du alles richtig gemacht hast, kannst Du http://127.0.0.1/ oder http://localhost/ aufrufen und siehst ein Bild wie im Screenshot.

Apache absichern

Als erstes bringen wir dem Apache bei, nur noch auf Anfragen zu hören, die vom eigenen Rechner kommen. Dazu legen wir einfach fest, auf welchen Internet-Adressen (IPs) der Server „lauscht“.

Es gibt verschiedene Adressen, die Du dazu nutzen kannst. Grundsätzlich kann dazu jede Adresse genutzt werden. Sinnvoll ist es natürlich nur, private oder lokale Adressen zu nutzen. Bei den privaten Adressen (10.*.*.*, 172.16-32.*.* und 192.168.*.*) ist der Apache aus dem jeweiligen lokalen Netzwerk erreichbar. Viele Router nutzen 192.168.0.* oder 192.168.178.* für das heimische Netzwerk.

Ich nutze den XAMPP wie gesagt nur, um auf dem Rechner, auf dem ich arbeite, ohne langes Hochladen direkt testen zu können. Deshalb reicht es völlig, wenn der Server auch nur von dem selben Rechner aus erreichbar ist. Deshalb lasse ich den XAMPP nur auf Anfragen über das sogenannte Loopback Interface (localhost) antworten. Das ist erreichbar unter 127.0.0.1, typischerweise sind auch höhere Nummern möglich bis hin zu 127.255.255.255.

Diese Änderungen werden in der Konfigurationsdatei des Apache vorgenommen, die im Apache-Verzeichnis unterhalb des XAMPP-Verzeichnisses liegt. Du findest sie unter „(XAMPP-Verzeichnis)/apache/conf/httpd.conf“. Dort suchst Du den Bereich, der die „Listen“-Direktive enthält.

Ich bearbeite meist mehrere Seiten zugleich. Deshalb möchte ich auch mehr als eine Seite getrennt und unabhängig von den anderen aufrufen können. Wer nur eine Seite bearbeiten will, fügt nur eine Zeile ein: „Listen 127.0.0.1:80“. Wer, wie ich, mehrere Seiten bearbeitet, fügt für jedes Projekt je eine weitere eigene Zeile ein: „Listen 127.0.0.x:80“. Statt des „x“ ist jede Zahl zwischen 2 und 255 möglich. Ich nehme einfach zur Unterscheidung 127.0.0.10 und aufwärts.

Vor allen anderen Zeilen in diesem Abschnitt fügst Du ein „#“ ein und kommentierst sie so aus. Insbesondere darf es keine Zeile ohne „#“ mehr geben, in der ein „Listen“ ohne IP steht.

So sieht eine Konfiguration für zwei weitere Projekte aus:

#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 0.0.0.0:80
#Listen [::]:80
#Listen 80
Listen 127.0.0.1:80
Listen 127.0.0.10:80
Listen 127.0.0.11:80

MySQL absichern

Natürlich muss auch MySQL abgesichert werden. Hier setzen wir an zwei Stellen an. Einmal sorgen wir wie beim Apache dafür, dass auch MySQL nur auf Anfragen vom eigenen Rechner antwortet. Zum anderen legen wir aber auch noch für jeden Benutzer einzeln fest, dass der sich nur vom lokalen Rechner aus anmelden kann.

Zuerst schotten wir MySQL nach außen ab. Wie beim Apache auch schon teilen wir MySQL mit, dass nur noch auf Anfragen von dem Rechner reagiert wird, auf dem MySQL auch selbst läuft, also von Deinem Rechner. Das hat den großen Vorteil, dass auf Anfragen von außen gar keine Reaktion mehr kommt. Würden wir nur die Benutzer absichern, käme ein „Du darfst hier nicht rein“ als Antwort. Damit aber wäre offensichtlich, dass zumindest ein MySQL-Server läuft.

In der Konfigurationsdatei für MySQL legen wir also fest, auf wen MySQL künftig hört. Die Konfiguration befindet sich in „(XAMPP-Verzeichnis)/mysql/bin/my.ini“ (im Original unter Linux heißt die Datei „my.cnf“). Dort suchen wir den Abschnitt „[mysqld]“.

Dort legen wir fest, auf Anfragen von welcher IP der MySQL-Server ausschließlich reagieren darf („bind-address“), auch hier verwenden wir dafür „localhost“: bind-address = 127.0.0.1 oder bind-address = localhost. MySQL ist es egal, für welche Seite bzw. welches Projekt Du gerade auf MySQL zugreifst. Deshalb reicht hier in jedem Fall die 127.0.0.1, weitere IPs sind nicht nötig und nicht sinnvoll.

Hinweis Früher musste man festlegen, dass MySQL nur über sogenannte „Sockets“ erreichbar ist. Dazu wurden Verbindungen über's Netzwerk abgeschaltet („skip-networking“). Damit das auch unter Windows funktioniert, musste man die sogenannten „Named Pipes“ einschalten („enable-named-pipe“). skip-networking und enable-named-pipe sind alte Einstellungen. Ab MySQL v5.x soll bind-address genutzt werden.

So sieht die Konfiguration dann aus, das „=“ nicht vergessen, hier brauchen wir's:

[mysqld]
[…]
# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking
#enable-named-pipe

bind-address = 127.0.0.1

[Screenshot von phpMyAdmin]
Screenshot: phpMyAdmin

Danach sorgen wir noch dafür, dass die Standard-Nutzer besser gesichert sind. Theoretisch ist das gar nicht erforderlich, weil der MySQL-Server ja von außerhalb nicht mehr erreichbar ist. Praktisch gilt bei solchen Sicherheitsaspekten immer, so sicher wie irgend möglich zu arbeiten. Denn wenn es irgendwo einen Fehler gibt, den wir noch nicht kennen, nutzt uns ein „theoretisch kann das nicht sein“ exakt nichts.

Über http://127.0.0.1/xampp/ rufen wir die Konfigurationsoberfläche von XAMPP auf und starten dort dann unter Tools den phpMyAdmin, oder rufen ihn direkt über http://127.0.0.1/phpmyadmin/ auf. Dort wählen wir links die Datenbank „mysql aus und darin dann die Tabelle „user. Hier muss bei allen Nutzern unter Host „localhost stehen. Steht dort „%“, dann ist der Zugriff für diesen Nutzer von überall her möglich!

Bei der Gelegenheit sollten beide Benutzer dann auch Passwörter bekommen, vorzugsweise auch komplizierte!

Einrichten - .test-Domains

Zum Schluss bringen wir Windows und dem Apache noch bei, wo die verschiedenen Homepages liegen und wie sie zu erreichen sind. Um mir einfach merken zu können, wie ich das jeweilige Projekt aufrufen kann, will ich die Original-Domainnamen behalten. Natürlich kann ich nicht thknuth.de oder schufte.de nehmen, denn die *.de-Adressen verweisen ja auf die „Live“-Versionen. Für das lokale Testen ist aber tatsächlich „.testoffiziell vorgesehen. Also möchte ich thknuth.test und schufte.test verwenden.

Diese *.test-Adressen sollen nur auf meinem Rechner funktionieren, und sind auch nur für die lokale Nutzung gedacht. Also müssen wir Windows beibringen, dass thknuth.test eine lokale Adresse ist. Wir haben oben dem Apache ja schon gesagt, dass er auf mehreren IP-Adressen „lauschen“ soll (127.0.0.10, 127.0.0.11). Jetzt müssen wir Windows noch beibringen, dass thknuth.test zu 127.0.0.10 gehört und schufte.test zu 127.0.0.11.

Dazu gibt es auch auf Windows die „hosts“-Datei. Standardmäßig liegt die Datei unter %SystemRoot%\system32\drivers\etc\hosts. Bei einigen Windows-Versionen ist die Datei schreibgeschützt. Um sie ändern zu können, sind außerdem teilweise Admin-Rechte nötig. In der hosts-Datei werden Internet-Adressen gespeichert, die von Windows selber in IP-Adressen übersetzt werden sollen, ohne dass dazu ein DNS-Server nötig ist. Einfacher ausgedrückt, dort schreiben wir rein, dass thknuth.test 127.0.0.10 bedeutet. Und deshalb muss Windows dann nirgends sonst mehr nachschauen, um das zu wissen.

Hier fügen wir einfach entsprechende Zeilen ein. Für jedes Projekt eine Zeile, bestehend aus gewünschter lokaler IP und zugehöriger Domain. Denk dran, dass www.beispiel.test und beispiel.test zwei verschiedene Adressen sind, die beide drin stehen müssen.

So kann das dann aussehen:

# Copyright (c) 1993-1999 Microsoft Corp.
#
# Dies ist eine HOSTS-Beispieldatei, die von Microsoft TCP/IP
# für Windows 2000 verwendet wird.
#
# Diese Datei enthält die Zuordnungen der IP-Adressen zu Hostnamen.
# Jeder Eintrag muss in einer eigenen Zeile stehen. Die IP-
# Adresse sollte in der ersten Spalte gefolgt vom zugehörigen
# Hostnamen stehen.
# Die IP-Adresse und der Hostname müssen durch mindestens ein
# Leerzeichen getrennt sein.
#
# Zusätzliche Kommentare (so wie in dieser Datei) können in
# einzelnen Zeilen oder hinter dem Computernamen eingefügt werden,
# aber müssen mit dem Zeichen '#' eingegeben werden.
#
# Zum Beispiel:
#
# 102.54.94.97 rhino.acme.com # Quellserver
# 38.25.63.10 x.acme.com # x-Clienthost

127.0.0.1 localhost
::1 localhost
127.0.0.10 thknuth.test
127.0.0.10 www.thknuth.test
127.0.0.11 schufte.test
127.0.0.11 www.schufte.test

Hinweis Einige Programme wie z.B. Spybot Search & Destroy nutzen die hosts-Datei, um bekannte schädliche Internetadressen zu blockieren. Wenn die hosts-Datei also bei Dir eine ellenlange Liste enthält, füg die Zeilen ganz am Ende an oder am Anfang direkt nach den Kommentaren.
Achte darauf, dass die Zeile „127.0.0.1 localhost“ als erste Zeile stehen bleibt! Gibt es bei Dir auch die Zeile „::1 localhost“, dann lass die auch oben stehen. Das ist localhost für IPv6.

Einrichten - Virtual Hosts (vhost)

Jetzt teilen wir dem Apache noch mit, wo die Dateien zu den einzelnen Seiten liegen. Das geschieht mit sogenannten virtuellen Hosts. Damit kann man die Einstellungen, die sonst für den gesamten Server gelten, passend für einzelne Projekte festlegen. Wer sich damit beschäftigen will, sollte auf eine der vielen Anleitungen zum Einrichten eines Apache-Webservers zurückgreifen.

Die Einstellungen, die wir ändern wollen, liegen in einer Extra-Datei, die genau für diese Einstellungen existiert: (XAMPP-Verzeichnis)/apache/conf/extra/httpd-vhosts.conf

Ich hab mir aus der httpd.conf gleich noch die jeweils passende Directory-Direktive kopiert. Dann habe ich nur eine Stelle, an der ich die für mich wichtigen Einstellungen vornehme. Für die bloße Einrichtung ist aber nur die jeweilige VirtualHost-Direktive erforderlich.

In der httpd-vhosts.conf sind ausführliche Beispiele auskommentiert. Wichtig sind folgende Punkte:

Zuerst legen wir fest, dass der Apache versucht, alle Domains zuzuordnen, ohne sich um IP-Adressen kümmern zu müssen. Dazu geben wir als Namen den Platzhalter * ein.

#
# Use name-based virtual hosting.
#

NameVirtualHost *:80

Und anschließend legen wir für jedes Projekt, also für jede einzelne oben angelegte IP fest, wo die zugehörigen Dateien liegen und welche Adresse (*.test) zugeordnet ist.

<VirtualHost 127.0.0.10:80>
# ServerAdmin postmaster@dummy-host2.localhost
DocumentRoot "D:/Projekte/Web/01-thknuth/www"
ServerName thknuth.test
ServerAlias www.thknuth.test
ErrorLog "D:/Projekte/Web/01-thknuth/z-local-log/thknuth.test-error.log"
CustomLog "D:/Projekte/Web/01-thknuth/z-local-log/thknuth.test-access.log" combined
</VirtualHost>

Die fett gedruckten Punkte musst Du angeben, alle anderen sind sinnvoll, aber nicht zwingend. Für jede Website, zu der Du oben eine IP und eine *.test-Domain festgelegt hast, definierst Du hier so einen Block.

Wer will, kann dann gleich noch jeweils passend einen Konfigurationsblock für das jeweilige Projektverzeichnis festlegen. Wie gesagt, ist dieser Schritt aber optional und nicht nicht zwingend.

<Directory "D:/Projekte/Web/01-thknuth/www">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>

Fertig

Das war's. Wenn Fragen offen geblieben sind, dann einfach fragen. Ansonsten viel Spaß! Falls jemand Hinweise oder Tipps hat oder einen Fehler findet, immer her damit!

PHP-Short Tags (<? & ?>)

Das hat mit den XAMPP-Einstellung nichts zu tun, mich hat's aber genervt. Ich arbeite gelegentlich mit PHP-Short-Tags (<? & ?>). Die sind im XAMPP per Voreinstellung deaktiviert. In „(XAMPP-Verzeichnis)/php/php.ini“ kann die Verwendung von Short-Tags aktiviert werden.

;;;;;;;;;;;;;;;;;;;
; Quick Reference ;
;;;;;;;;;;;;;;;;;;;
; The following are all the settings which are different in either the production
; or development versions of the INIs with respect to PHP's default behavior.
; Please see the actual settings later in the document for more details as to why
; we recommend these changes in PHP's behavior.

[ … ]
; short_open_tag
; Default Value: On
; Development Value: Off
; Production Value: Off

[ … ]
;;;;;;;;;;;;;;;;;;;;
; Language Options ;
;;;;;;;;;;;;;;;;;;;;
[ … ]
; This directive determines whether or not PHP will recognize code between
; <? and ?> tags as PHP source which should be processed as such. It's been
; recommended for several years that you not use the short tag "short cut" and
; instead to use the full <?php and ?> tag combination. With the wide spread use
; of XML and use of these tags by other languages, the server can become easily
; confused and end up parsing the wrong code in the wrong context. But because
; this short cut has been a feature for such a long time, it's currently still
; supported for backwards compatibility, but we recommend you don't use them.
; Default Value: On
; Development Value: Off
; Production Value: Off
; http://php.net/short-open-tag

short_open_tag = On

Quickie

Wer keine ausführliche Anleitung benötigt, findet hier nochmal kurz zusammengefasst, was zu tun ist.

Runterladen & Installieren
XAMPP Lite von www.ApacheFriends.org herunterladen und die EXE-Datei starten.
Beim Entpacken beachten, dass XAMPP ein eigenenes Verzeichnis „xampplite“ mitbringt.
XAMPP muss in ein Verzeichnis, in dem XAMPP Schreibrechte hat. Also unter Vista (und wohl auch Windows 7) nicht ins Standard-Programmverzeichnis installieren!
Nicht als Service installieren, einfach bei Bedarf aus dem Kontrollzentrum Apache und/oder MySQL starten und stoppen.
Apache absichern
In der Apache-Konfigurationsdatei „(XAMPP-Verzeichnis)/apache/conf/httpd.conf“ den Bereich mit der „Listen“-Direktive suchen.
Dort kommt muss in jedem Fall Listen 127.0.0.1 eingetragen sein
Dazu für jedes weitere Projekt mit eigener IP und Adresse eine weitere Zeile Listen 127.0.0.10
Weitere Listen-Beispiele werden mit „#“ auskommentiert
MySQL absichern
In der „(XAMPP-Verzeichnis)/mysql/bin/my.ini“ im Abschnitt „[mysqld]“ die Zeile bind-address = 127.0.0.1 oder bind-address = localhost einfügen.
Mit phpMyAdmin in der Datenbank mysql in der Tabelle user sicherstellen, dass bei allen Benutzern „localhost“ als Host steht.
Test-Domains und vhosts einrichten
In der hosts-Datei (%SystemRoot%\system32\drivers\etc\hosts) von Windows muss mindestens 127.0.0.1 localhost stehen. Soweit ::1 localhost vorhanden ist, bleibt das auch. Sollen mehrere Projekte mit eigenen Adressen genutzt werden, kommt für jedes Projekt eine weitere Zeile mit IP und Domain, z.B. 127.0.0.10 thknuth.test
In der (XAMPP-Verzeichnis)/apache/conf/extra/httpd-vhosts.conf für jede IP einen Block wie im dort angegeben Beispiel erstellen. IP ist die 127.0.0.x, ServerName ist beispiel.test, ServerAlias ist www.beispiel.test und DocumentRoot ist das Verzeichnis zu den Dateien Deiner Webseite. Für ErrorLog und CustomLog kannst Du eigene Dateien angeben, musst Du aber nicht.
 
 
 
Impressum, Datenschutz usw.
© Copyright 1996-2025 Thoralf Knuth • Top