
Zuletzt aktualisiert am 26. September 2020 von Lars
In diesem Tutorial lernst du, wie du einen Web-Server unter Linux einrichtest.
Bei der Installation des zugehörigen Linux solltest Du einige Einstellungen gegenüber einer typischen Desktop-Installation anpassen:
- Installationssprache English
- Location United States
- Keymap to use: German (bzw. Swiss German bei mir)
Durch den Einsatz der englischen Version vermeidest Du mögliche Lokalisierungsschwierigkeiten, die auftreten können. Ausserdem werden Patche und Upgrades häufig erst einmal für die englichen Versionen erstellt.
Die grafische Benutzeroberfläche lässt Du bitte weg. Nach der Grundinstallation wählst Du nur die Tools...
- SSH Server
- Standard System Utilities
...für die Installation aus.
Die graphische Oberfläche lasse ich bei einem reinen Server immer weg. Auch Microsoft propagiert inzwischen die sogenannten Cores-Server-Variante ohne graphische Oberfläche. Dadurch wird das System "schlanker". Es bietet weniger Angriffsfläche für Sicherheitslücken und benötigt auch weniger Upgrades und Patche.
Netzwerk anpassen
Als erstes musst Du nach der Installation das Netzwerk anpassen. Hierzu ist die Datei...
/etc/network/interfaces
zu editieren. Ich nehme hierzu den Editor nano.
- Utech, Klaus (Autor)
In der Originalform wird die Datei wahrscheinlich so ähnlich aussehen:



eth0 ist die erste (und hier einzige) Netzwerkkarte und diese steht hier auf DHCP.
Ändere dies ab, z.B. in der Art...



Nach dem Speichern startest Du das Netzwerk neu mittels...
service networking restart
Sollte das Netzwerk nicht funktionieren, überprüfe die eingegebenen Werte nochmals genau. Hilft das nicht, dann starte den ganzen Rechner bitte neu, z.B. mit...
shutdown -r now
Die DNS-Einstellungen sind normalerweise schon richtig gesetzt, wenn der Server beim Installieren die Werte via DHCP erhalten hat. Falls nicht, kontrolliere bitte die Werte in...
/etc/resolv.conf
SSH-Zugriff für PUTTY freischalten
Oft ist es bequemer, von Windows aus via Dienstprogramm putty auf den Server zuzugreifen. Gerade für Dokumentationszwecke ist das sehr angenehm, da auch Copy & Paste zwischen Windows und Linux funktioniert. Hierzu muss allerdings erst der Zugriff via ssh ermöglicht werden.
Zunächst braucht es das SSH-Paket:
apt-get install openssh-server
Editiere anschliessend die Datei...
/etc/ssh/sshd_config
Such nach der Zeile...
PermitRootLogin without-password
...und ändere Sie ab in...
PermitRootLogin yes
Speichere die Datei und starte ssh neu mit...
service ssh restart
Nun installiere den Webserver und ein paar coole Tools.
apt-get install apache2 php5 php5-mysql mysql-server phpmyadmin htop nload mtr
Während der Installation musst Du noch angeben:
- Password für den MySQL Root User
- phpmyadmin muss für apache2 konfiguriert werden
- Datenbank für phpmyadmin ("Configure database for phpmyadmin with dbconfig-common?")
- Passwort für phpmyadmin
Lege Die angegeben Werte gegebenenfalls an einen sicheren Ort ab, Du wirst Sie noch brauchen.
Was haben wir jetzt installiert?
- apache2 - Eigentlicher Webserver
- php5 - PHP5
- php5-mysql - PHP5 MySQL Library
- mysql-server - MySQL (Datenbank)
- phpmyadmin - PHPMyAdmin (Weboberfläche für Datenbank)
- htop - Überwachung Systemauslastung (CPU / RAM ähnlich Taskmanager)
- nload - Überwachung Netzwerkauslastung
- mtr - Wie Netzwerktool tracert, nur besser
Apache 2
Nach der Installation lässt sich eine Default-Webseite aufrufen. Die dazugehörigen Dateien befinden sich unter...
/var/www/html
Ein Webserver hostet aber in der Regel mehrere Webseiten. Jetzt wollen wir als Beispiel die Seite labor.mylab.lan einrichten.
Hierzu können wir z.B. unter /var/www/html den passenden Dokument-Ordner einrichten:
mkdir /var/www/html/labor.mylab.lan
Die Konfigurationen der Seiten befinden sich unter...
/etc/apache2/sites-available
Dort sind nach der Standard-Installation zwei conf-Dateien enthalten:
- 000-default.conf
- default-ssl.conf
000-default.conf ist die Standard-Seite, die man z.B. über die IP des Webservers erhält.
Default-Webseite des Apache 2
default-ssl.conf ist die Default-Konfig für SSL-geschützte Seiten. SSL ist nicht Thema dieses Artikels.
Die 000-default-Seite disablen wir mittels:
a2dissite 000-default.conf
Der Befehl meldet es schon, nach derartigen Änderungen ist ein Neustart des Apache-Dienstes nötig. Dieser erfolgt mit:
service apache2 reload
Für unsere neue Seite legen wir eine neue Config-Datei im gleichen Verzeichnis (/etc/apache2/sites-available) an.
nano labor-mylab-lan.conf
Eventuell gibt es Probleme, wenn in der conf-Datei mehrere Punkte vorkommen, also verzichtet lieber darauf und verwendet stattdessen Striche.
<VirtualHost *:80> ServerAlias labor.mylab.lan DocumentRoot /var/www/html/labor.mylab.lan </VirtualHost>
Diese Seite aktivieren wir mittels...
a2ensite labor-mylab-lan.conf
...und starten der Service nochmal neu mit...
service apache2 reload
Unter /var/www/html/labor.mylab.lan plazieren wir jetzt eine passende index.html. Zum Anfang reicht hier was ganz einfaches, z.B.
<!DOCTYPE html> <html lang="de"> <head> <title></title> <meta charset="utf-8" /> </head> <body> <h1>Willkommen auf labor.mylab.lan</h1> <p>Bla bla bla...</p> </body> </html>
Vergissnicht den entsprechenden DNS-Eintrag, der von labor.mylab.lan auf die IP des Web-Servers zeigt. Hast Du dies erledigt, dann sollte nach Eingabe der Adresse die entsprechende Anzeige erscheinen.
Default-Webseite des Apache 2
FTP
Ohne FTP können wir unseren Web-Server nicht vernünftig "füttern". Also lass uns diesen auch noch einrichten.
Mit...
apt-get install proftpd
...startest Du die Installation des Web-Servers "proftp".
Als Server-Variante wählen wir "standalone"



In der Datei...
/etc/proftpd/proftpd.conf
...passt Du noch den Server-Namen an.
Mit...
adduser ftp
...legst Du User und Passwort für Deinen FTP-User fest.
In der Datei...
/etc/passwd
...änderst Du in der Zeile mit dem entsprechenden User...
/bin/bash
...in
/bin/false
Damit erreichst Du, dass sich der FTP-User nicht regulär einloggen kann. Das erhöht die Sicherheit, falls zum Beispiel das Passwort des ftp-user geknackt wird. Speziell wenn Du den FTP-Server mit dem Internet verbindet, wirst Du Angriffsversuche haben. Mit einem sogenannten Portscan ist es ganz leicht festzustellen, dass hinter einer bestimmten Adresse ein FTP-Server "haust".
Ausserdem änderst Du noch das Homeverzeichnis. Hier gibst Du das Verzeichnis der Web-Präsenz ein. Das Homeverzeichnis ist direkt vor der Bash-Definition.
Die neue Zeile sieht also so aus:
ftp:x:1001:1001:myftpuser,,,:/var/www/html/labor.mylab.lan:/bin/false
Jetzt geht es an die Konfiguration der FTP-Servers. Hierzu editierst Du die Datei...
/etc/proftpd/proftpd.conf
Die Zeile mit "DefaultRoot" ist auskommentiert. Nimm Sie wieder mit hinein. Da ich nur einen FTP-User verwende und erst mal nur eine Seite hoste, habe ich hier erstmal den Pfad fix auf die Web-Seite gesetzt. Wenn Du neu in der ganzen Materie bist, mach das doch auch erst einmal so, bis Du die ganze Umgebung verstanden hast.
"DefaultRoot" ist das Verzeichnis, in dem der User, der sich gerade mit FTP verbindet, landet.
# Use this to jail all users in their homes DefaultRoot /var/www/html/labor.mylab.lan
Auf grösseren Servern kann man die WWW-Dokumentenverzeichnisse in die Home-Verzeichnisse der einzelnen User legen. Dann passt das jeweilige Login wieder. Tilde bzw. ~ ist ein Platzhalter für das Home-Verzeichnis.
Ebenfalls auskommentieen müsst Du die Zeile...
RequireValidShell off
Damit alle Änderungen aktiv werden, musst Du jetzt den Server mit...
service proftpd reload
...neu starten.
FTP absichern mit Fail2ban
FTP ist eine relativ sicherheitskritische Angelegenheit. Durch Port-Scans lässt sich leicht feststellen, hinter welcher Adresse ein FTP-Server "werkelt". Dann muss der böse Hacker nur noch eine Passwort-Attacke laufen lassen ist in irgendwann in Deinen Server eingeloogt. Du daher den ftp-User in der Praxis nicht admin, ftp oder ähnlich gängig benennen. Das Passwort darf natürlich auch nicht trivial sein.
Noch besser ist es, den FTP noch weiter abzusichern. Hier kommt Fail2ban ins Spiel. Es sperrt IPs aus, die zu oft eine falsche Eingabe gemacht haben. Fail2ban ist ein sogenanntes Intrusion Prevention System. Verinfacht ist es eine Firewall die Einbrüchen vorbeugt.
Installiere fail2ban mit...
apt-get install fail2ban
Jetzt konfiguriere fail2ban und editiere hierzu die Datei...
/etc/fail2ban/jail.conf
Kontrolliere die Zeilen...
# "bantime" is the number of seconds that a host is banned. bantime = 600 # A host is banned if it has generated "maxretry" during the last "findtime" # seconds. findtime = 600 maxretry = 3
Bei 3 Fehlversuchen wird also der Zugriff für 10 Minuten gesperrt. Gegebenfalls kann die Zeitspanne noch höher gesetzt werden.
Damit das ganze mit proftpd funktioniert, musst Du diese Zeilen noch ändern:
[proftpd] enabled = true maxretry = 6
maxretry, also die Anzahl der Fehlversuche, wird hier separat für FTP definiert. Hier kannst Du auch einen kleineren Wert wählen, um Angreifer eine möglichst geringe Angriffs-Chance zu bieten.
Aktiv wird das ganze auch hier erst, wenn der Fail2ban Service neu gestartet wird.
service fail2ban restart
Starte auch nochmal den FTP-Server neu:
service proftpd reload
Um eine "gebannte" IP freizuschalten, gibst Du z.B. ein:
fail2ban-client set proftpd unbanip 192.168.0.160
Der obige Befehl würde die 192.168.0.160 freischalten.
Wie sieht man, was gebannt und freigeschaltet wurde? Hierzu schaust Du Dir die letzten Zeilen der Log-Datei an, z.B. mit...
tail -20f /var/log/fail2ban.log
Installation aktuell halten
Gerade bei Systemen, die direkt mit dem Internet verbunden sind, sind regelmässige Aktualisierungen überaus wichtig. Führe daher von Zeit zu Zeit die Befehle...
apt-get update
...und...
apt-get upgrade
...aus, um das System automatisch nach Updates suchen und diese bei Bedarf auch installieren zu lassen.
Troubleshooting
php.ini
Die Datei php.ini enthält diverse Grundeinstellungen zu PHP. Du findest diese Datei unter...
/etc/php5/apache2/php.ini
Fast immer muss ich die maximale Grösse von Dateien anpassen, die hochgeladen werden dürfen. Die Voreinstellung 2 MB ist hier einfach viel zu wenig.
Sucht nach der Zeile...
upload_max_filesize = 2M
...und ändert den Wert z.B. auf 20M.
Sucht aber zusätzlich auch noch nach...
post_max_size = 8M
Auf php.net steht hier der nötige Hinweis: "Setzt die maximal erlaubte Größe von POST-Daten. Diese Option betrifft auch den Datei-Upload. Um größere Dateien hochzuladen, muss der Wert größer sein als upload_max_filesize."
Credits
Schaut mal bei Marcos Blog ein, dessen Input die Erstellung dieses Artikels ermöglichte. Auch er schreibt viel Wissenwertes zur IT.



Hallo, hier schreibt Lars. Dipl-Ing. Ingenieurinformatik (FH). Seit Jahrzehnten in der IT tätig. Geprüfter (und begeisterter) Webmaster. Ebenso begeisterter Windows-, Apple-, und Office-User. Ich schreibe über alle möglichen Themen rund um IT. Mehr über mich erfährst du hier: Über mich. Danke für deinen Besuch!