Da es also keinen sachlichen Grund für einen Windows-Server gibt, befasst sich diese Seite auch nicht mit Apache in einer Windows-Umgebung.
- Installation
- Websites konfigurieren
- Module
- Private Konfiguration mit .htaccess
- Mehrere Domänen auf einem Server
- HTTPS-Der verschlüsselte Zugriff
- Konfigurieren des Apachen für HTTPS
Installation
Jedes Linux hat Apache in seinem Repository. Da das Repository die denkbar sicherste Quelle ist, sollte der Apache von dort installiert werden.Debian, Ubuntu und Linux Mint verwenden das Tool apt für die Installation seiner Pakete. Dazu benötigt man root-Rechte. Das Apache-Paket heißt apache2. Vor der eigentlichen Installation stellt man sicherheitshalber mit apt update die Konsistenz der Paketliste zwischen Computer und Repository sicher.
# apt update # apt install apache2Im weiteren Verlauf der Seite wird von einer Debian-Installation ausgegangen, die auch der unter einem Ubuntu-Server entspricht. Andere Linux-Versionen unterscheiden sich in Details.
Red Hat und CentOS
Red Hat und CentOS verwenden das Tool yum und das Apache-Paket heißt dort httpd, weil Apache ein HTTP-Server (oder Daemon) ist.yum install httpdEntsprechend heißt das Konfigurationsverzeichnis bei Red Hat und CentOS auch /etc/httpd.
SUSE und OpenSUSE
Test und Neustart
Ob der Apache auf dem lokalen Computer läuft, lässt sich einfach durch einen dort gestarteten Browser, beispielsweise Firefox prüfen.- Firefox starten
- In die Adresszeile eingeben: localhost
- Die Standardseite von Apache meldet sich mit "It works"
Bei Änderungen an der Konfiguration muss der Apache neu gestartet werden. Dazu verwendet man das Kommando:
# systemctl reload apache2Im Allgemeinen ist es auch noch möglich, die System-V-Startskripte zu verwenden.
/etc/init.d/apache2 restart
Websites konfigurieren
Die Konfiguration eines Apachen erfolgt im Verzeichnis /etc/apache2. Dort befinden sich nach der Installation typischerweise zwei Dateien, eine für HTTP-Seiten une eine für HTTPS-Seiten, also Seiten, bei denen die Übertragung mit einem Zertifikat verschlüsselt wird.Apache kann mehrere Domänen auf einem Server betreiben. Für jede Präsenz wird typischerweise eine eigene Konfigurationsdatei erstellt. und im Verzeichnis /etc/apache2/sites-available abgelegt.
Konfigurationsdateien anlegen und scharfstellen
Damit die Konfigurationsdatei wirksam wird, muss sie im Verzeichnis /etc/apache2/sites-enabled erscheinen. Anstatt die Dateien zu verschieben, wird üblicherweise ein symbolischer Link auf die jeweilige Datei des Verzeichnisses sites-available angelegt. Änderungen in einer der beiden Verzeichnisse gelten so für beide und die Konfiguration der Site läuft nicht auseinander. Ein solcher symbolischer Link wird wie folgt angelegt:cd /etc/apache2/sites-enabled ln -s ../sites-available/meineseiteDie Struktur der Verzeichnisse sieht folgendermaßen aus:
/etc/apache2 +--- sites-enabled +--- sites-availableDateien in den enabled-Verzeichnissen sind normalerweise symbolische Links auf Dateien im parallelen available-Verzeichnis.
Struktur einer Konfigurationsdatei
Für jede Website wird sinnvollerweise eine eigene Konfigurationsdatei angelegt. Sie beginnt mit dem Schlüsselwort VirtualHost. Ihm folgen der Asterix, ein Doppelpunkt und die Portnummer.<VirtualHost *:80> ... Direktiven ... </VirtualHost>
- Der Stern besagt, dass es egal ist, unter welcher IP-Adresse der Server angesprochen wurde.
- Die Portnummer hinter dem Doppelpunkt ist standardmäßig 80, da HTTP standardmäßig auf 80 bedient wird. Bei HTTPS ist dieser beispielsweise 443.
<VirtualHost *:80> # ServerName www.meinedomain.de DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log ... Direktiven ... </VirtualHost>Die Direktive DocumentRoot legt fest, wo sich die HTML-Dateien befinden. Ihr folgt also der Pfad, typischerweise liegt er unterhalb von /var/www.
Jeder Pfad kann einzeln konfiguriert werden. Dazu wird ein Bereich mit dem Schlüsselwort Directory gekennzeichnet. Es folgt der Pfad des Aufrufs. Erfolgt der Aufruf per www.firma.de/produkte, kann der Bereich der Produkte gesondert behandelt werden, indem Folgendes definiert wird:
<VirtualHost *:80> ServerName www.meinedomain.de DocumentRoot /var/www/html <Directory /produkte> AllowOverride All ... Direktiven ... </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log ... Direktiven ... </VirtualHost>In diesem Fall liegt unterhalb des Verzeichnisses die Direktive AllowOverride, die es ermöglicht, .htaccess-Dateien in diesem Verzeichnis abzulegen.
Der Verzeichnisname /produkte bezieht sich auf die URL, würde also hier auf www.meinedomain.de/produkte wirken.
Direktiven
An verschiedenen Stellen der Konfiguration können Direktiven gesetzt werden, wie in den bisherigen Beispielen bereits erkennbar ist. Hier sind einige gänge Direktiven und ihre Bedeutung.- DirectoryIndex index.html index.htm
Die Dateinamen hinter DirectoryIndex werden automatisch geladen, wenn nur der Pfad angegeben ist. - Options +Option -Option Option
Steht + wird Option eingeschaltet. Bei - wird es abgeschaltet. Steht nichts wird ein + ergänzt.- FollowSymLinks: Folgt auch symbolischen Links.
- Indexes: Die in DirectoryIndex genannten Dateien werden geladen, wenn nur der Pfad angeben wird.
- ExecCGI: Erlaubt die Ausführung von CGI-Programmen.
- AllowOverride All
erlaubt, dass im Directory eine Datei namens .htaccess als lokale Konfigurationsdatei verwendet wird.- None: (Standard) .htaccess-Dateien werden ignoriert.
- All: Die Konfigurationen in .htaccess überschreiben die Konfiguration.
- AuthConfig: .htaccess kontrolliert die Authentifizierung des Benutzers mit Kennung und Passwort.
- FileInfo: Eigene Dateitypen sind erlaubt. Jedes Directory kann eigene Fehlermeldungen generieren.
- Allow all
Legt fest, wer den Webserver überhaupt ansprechen darf.- all: Die Benutzung wird nicht eingeschränkt.
- from: Es folgt eine Netzwerkadresse. Allow from 192.168.109.0 erlaubt also den Zugriff aus dem lokalen Netzwerk 192.168.109.0. Mehrere Adressen können durch Leerzeichen getrennt angegeben werden. Auch Hostnamen sind erlaubt.
- Deny All
Beschränkt den Zugriff analog zu Allow. - Order deny,allow
Erklärt die Reihenfolge von Deny und Allow. Hier gelten zunächst alle Verbote von Deny. Anschließend werden die Allow-Regeln als Ausnahme zugelassen.
Module
Apache kann durch Module erweitert werden. Am bekanntesten dürfte das Interpretermodul für die Sprache PHP sein.Module müssen manchmal aus dem Repository nachgeladen werden, wenn sie nicht zum Standardlieferumfang von Apache gehören.
Für das Modul von PHP, wie für alle anderen Module, gibt es je eine Datei mit der Endung .conf und eine Datei mit der Endung .load. Die erstere konfiguriert das Modul und ist modulspezifisch, die zweite Datei gibt an, wo sich das Modul befindet und wie es geladen wird.
Neben dem PHP-Modul existiert noch das SSL-Modul (ssl.conf und ssl.load), das explizit freigeschaltet werden muss.
Im Falle von SSL muss das Modul auch zunächst aktiviert werden. Dazu dient der Befehl a2enmod. Erst dann öffnet Apache den Port 443.
# # a2enmod ssl # systemctl restart apache2
Auch die Module werden in zwei Verzeichnissen enabled und available abgelegt und werden analog zu sites verwaltet.
/etc/apache2 +--- mods-enabled +--- mods-available
Private Konfiguration mit .htaccess
Wurde in der Konfiguration die Direktive AllowOverride freigeschaltet, kann im Datenverzeichnis eine Datei .htaccess abgelegt werden, die Konfigurationen auf Verzeichnisebene erlaubt. Das ist insbesondere interessant, wenn man eine Webpräsenz bei einem Provider hat, dessen Apache sich der eigenen Konfiguration entzieht.
-
ErrorDocument 404 /fehler404.html
Der HTTP-Fehler 404 (File not found) wird auf eine eigene HTML-Datei umgelenkt, die den Fehler dem Anwender meldet. -
AuthType Basic AuthName "Einloggen, bitte" AuthUserFile /var/www/sicher/.htpasswd require valid-user
- AuthType Basic
erlaubt die Verwendung einer lokalen Passwortdatei. - AuthName "Meldung"
erscheint als Überschrift in der Dialogbox, die den Anwender nach Benutzerkennung und Passwort fragt. - AuthUserFile Datei
gibt den Dateiname inklusive Pfad der Passwortdatei an. - require valid-user
legt fest, dass nur korrekte Anmeldungen Zugriff auf dieses Verzeichnis erhalten.
- AuthType Basic
htpasswd -c /var/www/sicher/.htpasswd paul
Mehrere Domänen auf einem Server
Ein Apache kann mehrere Domänen betreuen. Dazu werden die betroffenen Domänen typischerweise durch Domain Name Service (DNS) auf diesen Server umgeleitet. Für die Tests kann dazu die Datei /etc/hosts verwendet werden.Die vom Client angeforderte Domain liest der Server aus der HTTP-Anfrage. Er muss sich also nicht in dieser Domain befinden.
Einrichten der Konfigurationsdateien
cd /etc/apache2/sites-enabled ln -s ../sites-available/dieneuedomain.confAnschließend wird Apache aufgefordert, die neue Konfiguration zu laden.
systemctl reload apache2
Anlegen der Dateien und Pfade
Für jede Domain werden eigene Dateien benötigt. Diese legt man dort an, wo die Direktive DocumentRoot hinweist, typischerweise unterhalb des Verzeichnisses /var/www.Steht in DocumentRoot beispielsweise /var/www/meinedomain, wird man dieses Verzeichnis anlegen, Dateien hineinlegen und das Eigentum an den Benutzer von Apache www-data übertragen.
- Verzeichnis anlegen.
mkdir /var/www/meinedomain
- Eine HTML-Datei anlegen und den Inhalt ändern.
vi /var/www/meinedomain
Eine einfache HTML-Seite<html> <body> <h1>Meine Domain</h1> </body> </html>
- Die Dateien dieses Verzeichnisses dem Benutzer www-data zuordnen
chown -R www-data /var/www/meinedomain
Testen der Domänen
Wer nicht gleich ein DNS aufsetzen will, kann sich durch Manipulation der /etc/hosts helfen, um den Server zu testen.
- Man bestimmt die Server-IP-Adresse, etwa mit ip a oder ifconfig. Das Ergebnis könnte beispielsweise 192.168.1.10 lauten.
- In der /etc/hosts trägt man für diese IP die Domains ein.
# /etc/hosts ... 192.168.1.10 www.eins.edu www.zwei.edu www.drei.edu
- Nun kann man Firefox (oder einen anderen Browser) starten und als Adresse die entsprechende Domain, bspw. www.eins.edu eintragen.
HTTPS-Der verschlüsselte Zugriff
Bei der HTTP-Kommunikation über den Port 80 werden alle Daten im Klartext übertragen. Das ist insbesondere bei der Eingabe von Passwörtern nicht gut. Für einen verschlüsselten Transport wird HTTPS verwendet, das über den Port 443 kommuniziert.HTTPS bietet gegenüber HTTP zwei wichtige Eigenschaften:
- Die Übertragung ist verschlüsselt.
- Der Server weist sich gegenüber dem Client als verlässliche Quelle aus.
Verschlüsselung über das Zertifikat
- Der Server sendet dem Client, also dem Browser, bei Verbindungsaufnahme den öffentlichen Teil seines Zertifikats. Das Zertifikat enthält den Domain-Namen der Webseite.
- Der Client prüft, ob Zertifikat und Domain-Namen zusammenpassen und kann aufgrund der anderen Zertifikatsinhalte feststellen, wer der Eigner ist.
- Auf der Basis dieses Zertifikats kann eine asymmetrische Verschlüsselung stattfinden. Der Client verschlüsselt mit dem öffentlichen Schlüssel des Zertifikats. Dies kann dann nur durch den privaten Schlüssel des Zertifikats entschlüsselt werden.
- Unter dieser Verschlüsselung wird ein zufälliger symmetrischer Schlüssel ausgetauscht, der für den weiteren Verlauf der Verschlüsselung verwendet wird. Die symmetrische Verschlüsselung ist weniger prozessorbelastend und darum auch schneller.
Zertifizierung der Zertifikate
Damit der Client die Echtheit des Zertifikats prüfen kann, müsste er jedes Zertifikat eines Webservers weltweit mit sich führen. Das ist nicht machbar.Wie bei einem Personalausweis, der durch den Stempel des Ausstellerlandes autorisiert wird, geht man bei Zertifikaten vor. Es gibt es Zertifikatsautorisierungsstellen (CA - Certificat Authority), die Zertifikate quasi zertifizieren.
Dazu sendet man sein Zertifikat an die CA, die mit ihrem privaten Schlüssel das Zertifikat autorisiert. Parallel macht die CA-Stelle ihren öffentlichen Schlüssel verfügbar. Beispielsweise enthält ein Browser bereits eine Bibliothek der relevanten CA-Stellen. Zeigt der öffentliche CA-Schlüssel, dass das Zertifikat von einer bekannten CA-Stelle autorisiert wurde, kann der Client das Zertifikat bedenkenlos verwenden.
Für das eigene Netzwerk kann man das CA-Zertifikat auch selbst erstellen. Das ist bei Intranet-Anwendungen durchaus sinnvoll, weil die meisten Browser auf Zertifikate ohne bekannte CA sehr aufgeregt reagieren, was sich leicht auf die Anwender überträgt, die mit Warnungen überhäuft werden.
- Der private CA-Key wird benötigt, um das Zertifikat zu autorisieren.
- Der öffentliche CA-Key muss zum Browser, damit er bestätigt, dass das Zertifikat autorisiert ist. Aber auch der Server benötigt ein Exemplar.
Browser-Einbindung
Beim Firefox wird der öffentliche CA-Key über die drei waagerechten Striche, die neuerdings ein Menü darstellen sollen und dann über folgende Schritte eingefügt.- Einstellungen|Erweitert|Zertifikate
- Dort wählen Sie den Button Zertifikate anzeigen.
- Klicken Sie auf den Reiter Zertifizierungsstellen.
- Dort wählen Sie den Button Importieren. In der nun erscheinenden Dateiauswahlbox können Sie die Datei auswählen.
Webserver mit kombinierten Schlüsseln
Bei einigen Webservern kann der öffentliche CA-Schlüssel nicht separat eingebunden werden. In diesen Fällen ist es möglich, den öffentlichen CA-Schlüssel direkt an das öffentliche Zertifikat anzuhängen. Das funktioniert mit einem einfachen Linux-Standardbefehl:cat ca-pub.pem >> zertifikat-pub.pem
Konfigurieren des Apachen für HTTPS
Damit der Apache HTTPS verwendet, muss er den Port 443 betreuen und das Modul ssl installiert haben. In der VirtualHost-Konfiguration müssen die Pfade zu den Zertifikaten liegen und natürlich muss festgelegt werden, wo die HTML-Dateien liegen sollen.Port 443 und Modul ssl
Zunächst wird überprüft, ob der Apache den Port 443 vielleicht bereits bedient. Zum Scannen offener Ports dient das Tool nmap, das allerdings erst installiert werden muss.
# apt update # apt install nmap # nmap 127.0.0.1Sollte der Port 443 nicht auftauchen, kontrolliert man, ob es in der Datei /etc/apache2/ports.conf eingetragen ist. Das sieht normalerweise so aus:
<IfModule mod_gnutls.c> Listen 443 </IfModule>Schließlich wird das Modul ssl aktiviert. Dann muss Apache neu gestartet werden.
# a2enmod ssl # systemctl restart apache2
Verweis auf die Zertifikate in der VirtualHost-Konfiguration
Für den Apachen liegt nach der Installation bereits eine Default-Konfiguration für SSL unter /etc/apache2/sites-available/default-ssl.conf vor. Diese Konfiguration muss nur angepasst und aktiviert werden. Abgesehen von Kommentaren enthält sie folgende Einträge:<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key </VirtualHost> </IfModule>Zunächst prüft die Konfiguration, ob das Modul ssl installiert ist. In der Folgezeile der Konfiguration wird der Zugriff für den Port 443 zugelassen, dem Standard-Port von HTTPS. Die anderen Einträge unterscheiden sich nicht von der Standardkonfiguration, nur die mit SSL beginnenden Direktiven sind neu. Sie sollten auf die erstellten Dateien verweisen.
SSLCertificateFile /etc/apache2/ssl/zertifikat-pub.pem SSLCertificateKeyFile /etc/apache2/ssl/zertifikat-priv.pem ... SSLCertificateChainFile: /etc/apache2/ssl/ca-pub.pem
- SSLCertificateFile zeigt auf den öffentlichen Teil des Zertifikats.
- SSLCertificateKeyFile enthält den passenden privaten Tei.
- SSLCertificateChainFile verweist auf den öffentlichen Teil des CA-Zertifikats, den Sie vom Zertifizierer erhalten.
Die so angepasste Datei liegt im Verzeichnis sites-available, muss aber noch im parallelen Verzeichnis sites-enabled auftauchen. Das macht man nach guter UNIX-Sitte mit einem symbolischen Link:
cd /etc/apache2/sites-enabled ln -s ../sites-available/default-ssl.conf 001-ssl.confDas Apache-Modul für mod_ssl wird, falls noch nicht vorhanden, installiert.
apt install libapache2-mod-gnutlsDas Modul SSL wird freigeschaltet.
a2enmod sslNach allen Konfigurationsänderungen muss der Apache neu gestartet werden:
systemctl restart apache2