Apache - Webserver

Apache

Apache ist der bekannteste Webserver im Internet

Informationen

Linux dominiert das Internet, die meisten Server – egal ob Webserver, Mail-Server, FTP-Server, Cloud-Server, Proxy- oder VPN-Server, selbst Spiele-Server laufen mit Linux als Betriebssystem. Die meisten Server sind hier natürlich Webserver, also Server die Internet-Seiten die wir in unserem Webbrowser öffnen bereit stellen.

Der bekannteste Webserver im Internet ist nun Apache2, etwas das dieser Server nicht kann gibt es eigentlich nicht, er ist durch Module erweiterbar, hoch anpassbar und auch recht schnell. In diesem Beitrag werden wir uns die Installation, die Konfiguration, das Bereit stellen von Webseiten und die Absicherung etwas näher ansehen.

Apache installieren

Unter auf Debian basierenden Systemen wie Ubuntu, Kubuntu, Linux Mint und so weiter installieren Sie diesen Server ganz einfach über die Paket-Verwaltung durch das Paket “apache2“.

Warum könnte man einen solchen Server privat installieren wollen? Es gibt so manche Nutzer die damit zu Hause ihre Homepages testen bevor Sie diese tatsächlich online stellen, es gibt Web-Entwickler. Es gibt Nutzer die Ihre Homepage von zu Hause aus direkt ins Internet stellen – etwa über den Raspberry Pi oder auch ihre eigene private Cloud auf diese Weise bereit stellen – sodass wirklich niemand anderes als sie selbst an ihre Daten kommen.

Apache staŕten & erster Test

Wurde Apache unter auf Debian basierenden Systemen installiert läuft dieser bereits automatisch. Benötigen Sie den Server nur manches mal – also etwa hin und wieder zum Testen von Webseiten muss dieser nicht immer laufen sodass er nur dann Ressourcen benötigt wann sie ihn wirklich brauchen. Dazu lesen Sie den Beitrag Systemd – der nötige Service von Apache nennt sich “apache2.service“.

Haben Sie Apache auf Ihrem lokalen Rechner installiert an dem Sie jetzt gerade sitzen öffnen Sie einfach den Webbrowser und geben die Adresse:

http://localhost

ein und öffnen die Seite:

Apache2 – Der Webserver unter Linux – Testseite

Apache2 – Der Webserver unter Linux – Testseite

Dies ist die Testseite des Servers die zeigt das der Server läuft und funktioniert. Wollen Sie den Server von einem entfernten Rechner aufrufen muss dazu auf dem Rechner auf dem der Server installiert ist durch die Firewall der Port “80” geöffnet sein, um dann die Seite zu öffnen geben Sie die IP-Adresse dieses Rechners an, also etwa:

http://123.456.78.9

Einfache Webseiten bereit stellen

Es gibt mehrere Arten wie man über Apache Webseiten bereit stellen kann, Apache kann eine einzelne Webseite (die natürlich aus mehreren einzelnen HTML-Seiten bestehen kann) in das Netz stellen, eine beliebige Web-Software oder was auch immer. Dann könnte er auch auf verschiedene Arten mehrere Web-Adressen bereit stellen. In diesem Beispiel wollen wir ganz einfach eine einfache Homepage im Netz anbieten.

Webseiten die der Server in das Netz (egal ob im lokalen Netz oder im Internet) liefern soll legt man im System unter “/var/www/html/” ab, wie etwa hier die originale Testseite:

Apache2 – Der Webserver unter Linux – HTML-Ordner

Apache2 – Der Webserver unter Linux – HTML-Ordner

Um Webseiten hier abzulegen muss man der Administrator des Systems – also der Nutzer “root“sein. Ruft man eine Web-Adresse auf – etwa die Linux Bibel liefert der Server als erstes die Datei “index.html” (oder “index.php“) aus wenn man nicht eine spezielle Unterseite aufruft. Es muss also eine dieser Dateien geben – ansonsten bietet der Server nur eine Dateiliste an. Lädt man also etwa ein CMS auf den Server dessen Dateien alle in einem Verzeichnis liegen kann man nicht einfach das Verzeichnis hoch laden sondern nur den Inhalt dieses Verzeichnisses. Etwas das man tun könnte wenn man mehrere CMS-Systeme nutzen will wäre es dann etwa die kompletten Verzeichnisse hoch zu laden und im Basis-Verzeichnis des Servers eine “index.html” ablegen die dann auf die Index-Dateien in den Verzeichnissen verweist.

Legt man ein komplettes Verzeichnis auf den Server hoch das etwa ein zu installierendes CMS enthält wird dies wie schon beschrieben als Nutzer “root” getan, doch der Server selbst hat aus Gründen der Sicherheit einen anderen Nutzer namens “www-data“, würde man nun auf dem Server die Installation starten wäre dies nicht möglich weil der Server nicht der Besitzer dieser Datei ist, es gilt also das jeweilige Verzeichnis dem Nutzer des Servers zu übergeben, dies gelingt wieder als Administrator auf dem Terminal durch den Befehl:

chown -R www-data:www-data Verzeichnis/

Sicherheit

Bevor wir uns die weiteren Möglichkeiten ansehen wie wir mit Apache Webseiten bereit stellen können wollen wir uns um die Sicherheit kümmern denn dies hat bei einem Server vor allem dann wenn er im Internet ist absolute Priorität.

Firewall

Einen Beitrag über die Firewall wird es in Kürze auf der Linux Bibel geben. Alles was wir nun unbedingt wissen müssen ist das ein reiner Webserver nicht mehr als drei offene Ports benötigt. Port 80, also um reine “http“:-Seiten auszuliefern (dies ist aber heute sowieso obsolet da so ziemlich jeder Webbrowser vor nicht verschlüsselten Seiten warnt), Port 443 für “https“-Seiten und wenn man keinen physischen Zugang zum Rechner hat der Port 22 für SSH.

Sichere Verbindung – https

Früher war es die Regel reine HTTP-Verbindungen zu nutzen, dies hat sich in letzter Zeit massiv geändert. Der Grund ist – wenn Sie auf einer Webseite Eingaben machen, etwa sich dort mit Nutzername und Passwort anmelden wäre es bei dieser unsicheren Verbindung problemlos möglich das diese Daten von einer dritten Person abgefangen werden könnten. Des weiteren verspricht HTTPS die Übertragung der originalen und nicht verfälschten Daten / Webseite.

Die einfachste Variante zu einer HTTPS-Verbindung zu kommen ist nun der Dienst von Lets Encrypt, wie man diesen Dienst installiert und nutzt zeigt nun dieser Absatz.

Installieren Sie als erstes über die Paket-Verwaltung das Paket “python-certbot-apache“, ist dies erledigt starten Sie auf dem Terminal – natürlich als Administrator den Befehl:

certbot --apache

Die Software fragt nun der Reihe nach die nötigen Optionen wie etwa die Domain (Web-Adresse – etwa “linux-bibel.at”), Ihre Mail-Adresse und ob der Server nur noch HTTPS ausliefern soll ab, geben Sie dies an und erledigt den Rest automatisch. Anschließend ist Ihr Server nur noch per HTTPS erreichbar, Sie erhalten eine E-Mail wenn das Zertifikat ausläuft – dann wiederholen Sie den Vorgang.

Nicht zu gesprächig sein

Der Webserver Apache ist in seiner Grundkonfiguration rund um das Thema Sicherheit viel zu gesprächig, so verrät er etwa in HTTP-Anfragen seine Version, PHP-Version, aktivierte Module und einiges mehr – dies ist für Angreifer ein gefundenes Fressen denn sie wissen dann schon mit was sie es zu tun haben. Um den Server in diesem Sinne stumm zu schalten öffnet man mit einem Texteditor als Administrator die Datei “/etc/apache2/conf-available/security.conf“, hier sucht man die Zeile:

ServerTokens OS

Und ändert diese zu:

ServerTokens Prod

Danach startet man den Server neu. Um die Gesprächigkeit von PHP zu deaktivieren (wenn installiert) abzuschalten öffnen Sie die Datei “/etc/php/7.0/apache2/php.ini” und suchen die Zeile:

expose_php = On

Ersetzen Sie diese durch:

expose_php = Off

Auch hier starten Sie den Server neu.

Zu viele Anfragen abweisen

DOS- und DDOS-Angriffe sind die häufigsten um einen Server zu überlasten, das System so zu schädigen und möglicherweise zu übernehmen. Ein sehr hilfreiches Modul in Dingen Sicherheit ist hier Evasive. Installieren Sie über die Paket-Verwaltung das Paket “libapache2-mod-evasive“, nun starten Sie auf dem Terminal den Befehl:

a2enmod evasive

Wird nun eine Homepage mehrmals in der Sekunde von einer IP-Adresse aufgerufen wird diese IP-Adresse für einige Sekunden gebannt, erhält der Server mehr als 50 Anfragen gleichzeitig von den selben IP-Adressen – die selbe Geschichte.

Virtuelle Server

Virtuelle Server bedeutet nichts anderes als das auf einem Rechner nur ein Server läuft, dieser aber unterschiedliche Webseiten / Web-Adressen ausliefern kann, also etwa “linux-bibel.at linux-bibel.co.at linux-bibel-online.at“. Um einen solchen virtuellen Server zu erstellen kopieren Sie die Datei “/etc/apache2/sites-available/ooo-default.conf” und legen diese unter einem anderen Namen – etwa “linux.conf” im selben Verzeichnis ab.

Diese Datei bearbeiten Sie nun nach Ihren Wünschen, als Beispiel habe ich im Verzeichnis “/var/www/html/linux/” meine zweite Webseite liegen:

Apache2 – Der Webserver unter Linux – Virtueller Server

Apache2 – Der Webserver unter Linux – Virtueller Server

Diesen virtuellen Host gilt es nun zu aktivieren:

a2ensite linux.conf

Apache neu starten und die Geschichte steht.

Apache erweitern

Apache lässt sich durch Module erweitern dies funktioniert recht einfach wie wir oben beim Thema Sicherheit schon gesehen haben. Sie finden in der Paket-Verwaltung – am besten nutzen Sie hier das grafische Synaptic wie im Link zuvor beschrieben so einige Module und auch deren Beschreibung. Suchen Sie einfach nach dem Begriff “libapache2-mod-” und Sie finden alle nutzbaren Module. Als Beispiel will ich das Modul “libapache2-mod-ssl” aktivieren nach der Installation:

a2enmod ssl

Um dieses zu deaktivieren:

a2dismod ssl