Einrichtung eines Web-Servers unter Linux (Debian)

Zuletzt aktualisiert am 25. Dezember 2023 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.

Bestseller Nr. 2

In der Originalform wird die Datei wahrscheinlich so ähnlich aussehen:

Einrichtung eines Web-Servers unter Linux (Debian)

eth0 ist die erste (und hier einzige) Netzwerkkarte und diese steht hier auf DHCP.

Ändere dies ab, z.B. in der Art...

Einrichtung eines Web-Servers unter Linux (Debian)

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.

Einrichtung eines Web-Servers unter Linux (Debian)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.

Einrichtung eines Web-Servers unter Linux (Debian)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"

Einrichtung eines Web-Servers unter Linux (Debian)

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.

Du willst meine Arbeit unterstützen? Dann freue ich mich über eine kleine Spende!

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert