Der Öffentliche Webserver

Wer sich von den verlockenden Angeboten der großen Internet-Konzerne unabhängig machen möchte, schließt einfach eigene Rechner an das Internet an und betreibt verschiedene Dienste auf der Grundlage freier Software selbst. Im Rechenzetrum unseres Vertrauens läuft Debian auf zwei gebraucht gekauften Dell PowerEdge R210 Rechnern. Es reicht aber auch, virtuelle Rechner bei einem Anbieter wie Linode zu mieten.

Debian installieren

Das Betriebssystem installieren wir, wenn möglich, auf einer SSD. Die Nutzdaten werden auf herkömmlichen Festplatten gespeichert. Beim Anlegen der Partitionen verwenden wir die gesamte erste Festplatte und verzichten auf Verschlüsselung. Bei der Softwareauswahl wählen wir nur den SSH-Server aus und bringen die Installation zu Ende.

Sobald das frisch installierte System läuft, melden wir uns per ssh als normaler Benutzer mit dem bei der Installation vergebenen Passwort an und schwingen uns zum Administrator auf.

sudo su -

Dann installieren wir erst einmal diverse Hilfsprogramme.

apt install joe tree psmisc iotop curl fail2ban

Secure Shell einrichten

Administratoren bekommen einen passwortfreien Zugang, indem wir deren öffentliche Schlüssel hinterlegen.

/root/.ssh/authorized_keys
ssh-rsa AAAAM5bH8j0U4k5kiY9GdK5lKI61/PgyqJrsoUD………ImwPxgfks49VI== User

Authentifizierung per Passwort deaktivieren wir komplett. So gewährt ausschließlich der Besitz eines Schlüssels den Zugriff auf die Kommandozeile.

/etc/ssh/sshd_config
AuthenticationMethods publickey AcceptEnv LANG LC_* Subsystem sftp /usr/lib/openssh/sftp-server

Ein schönes Motto of the Day hilft dabei, den Überblick zu behalten, wo man gerade angemeldet ist.

/etc/motd
·▄▄▄▄ ▄• ▄▌▄▄▄ • ▌ ▄ ·. .▄▄ · ▄▄▄▄▄▄▄▄ ▄▄▄· ▐ ▄ ▄▄ • ██▪ ██ █▪██▌▀▄ █··██ ▐███▪▐█ ▀. •██ ▀▄ █·▐█ ▀█ •█▌▐█▐█ ▀ ▪ ▐█· ▐█▌█▌▐█▌▐▀▀▄ ▐█ ▌▐▌▐█·▄▀▀▀█▄ ▐█.▪▐▀▀▄ ▄█▀▀█ ▐█▐▐▌▄█ ▀█▄ ██. ██ ▐█▄█▌▐█•█▌██ ██▌▐█▌▐█▄▪▐█ ▐█▌·▐█•█▌▐█ ▪▐▌██▐█▌▐█▄▪▐█ ▀▀▀▀▀• ▀▀▀ .▀ ▀▀▀ █▪▀▀▀ ▀▀▀▀ ▀▀▀ .▀ ▀ ▀ ▀ ▀▀ █▪·▀▀▀▀ Dell PowerEdge R210 II 9NFF5Z1 3.3 GHz Intel Core i3-2120 16 GB DDR3-1333 UDIMM 256 GB Samsung SSD 830 4000 GB HGST Deskstar NAS

Netzwerk konfigurieren

Zur Konfiguration der Schnittstellen ersetzen wir Debians ifupdown-Mechanismus durch systemd-networkd. Die Schnittstelle bekommt eine statische Adresse nach den Vorgaben des Anbieters.

/etc/systemd/network/eno1.network
[Match] Name=eno1 [Network] Address=2001:1b18:a1::69/64 Gateway=2001:1b18:a1::1 Address=81.92.164.69/26 Gateway=81.92.164.65

Die Uhrzeit wird mit dem NTP-Server des Anbieters synchronisiert.

/etc/systemd/timesyncd.conf
[Time] NTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org …

Der qualifizierte Hostname (FQDN) muss aufgelöst werden.

/etc/hosts
127.0.0.1 localhost 127.0.1.1 durmstrang.illusioni.de durmstrang

Nun aktivieren wir die neuen Nertzwerkdienste und entfernen die nicht mehr benötigten Pakete.

systemctl enable systemd-{networkd,resolved,timesyncd}
apt remove ifupdown isc-dhcp-{client,common} rsyslog logrotate anacron cron

Dateisystem anlegen

Die Nutzdaten werden wir auf herkömlichen Festplatten speichern. Falls mehrere Festplatten installiert sind, bilden wir einen RAID-Verbund mit dem Btrfs-Dateisystem. Die Metadaten werden gespiegelt und Nutzdaten gleichmäßig verteilt.

mkfs.btrfs --metadata raid1 --data raid0 /dev/sdb /dev/sdc …

Darin legen wir die benötigten Verzeichnisse an.

mount /dev/sdb /srv
mkdir /srv/{mail,www,gitea,restic}

Schließlich binden wir diese in der Dateisystemtabelle ein.

/etc/fstab
# What Where Type Options Dump Pass /dev/sda1 /boot/efi vfat umask=0077 0 0 /dev/sda2 / ext4 noatime 0 0 /dev/sda3 none swap sw 0 0 /dev/sdb /var/lib/postgres btrfs noatime,subvol=@postgres 0 0 /dev/sdb /srv/mail btrfs noatime,subvol=@mail 0 0 /dev/sdb /srv/www btrfs noatime,subvol=@www 0 0

Zertifikate hinterlegen

Für den Schlüsselaustausch via TLS erzeugen wir auf jedem Server einen Satz Diffie-Hellmann-Parameter:

openssl dhparam -out /etc/ssl/dh1024.pem 1024
openssl dhparam -out /etc/ssl/dh2048.pem 2048
openssl dhparam -out /etc/ssl/dh4096.pem 4096

Danach kopieren wir Schlüssel und Zertifikat von der Zertifizierungsstelle auf den Server und schränken den Lesezugriff auf Mitglieder der Gruppe ssl-cert ein.

chmod g+r            /etc/ssl/$HOSTNAME.{key,crt}
chgrp ssl-cert       /etc/ssl/$HOSTNAME.{key,crt}

Schlafmodus deaktivieren

Ein Server braucht keinen Bereitschaftsmodus.

/etc/systemd/sleep.conf
[Sleep] AllowSuspend=no AllowHibernation=no AllowSuspendThenHibernate=no AllowHybridSleep=no

Zum Abschluss starten wir das System einmal durch.

reboot

Nun schrauben wir den Server ins Rack und erledigen die restliche Installation bequem von zu Hause aus.

Literatur

  1. Patrick Gillespie: Text-to-ASCII-Generator
  2. Cullum Smith: A Guide to Self-Hosting Your Online Services, 2016
  3. Justin Ellingwood: How To Protect SSH with Fail2Ban, Digital Ocean, 2014
  4. Hardenize: Web security check