1. Index
  2. Debian
  3. Desktop
  4. Heimserver
  5. Webserver

Der Öffentliche Webserver

Wer sich von den verlockenden Angeboten der großen Internet-Konzerne unabhängig machen möchte, schließt einfach eigene Server 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 Servern. Es reicht aber auch, virtuelle Server bei einem Anbieter wie Linode zu mieten.

Debian installieren

Auf dem neuen Webserver installieren wir Debian per Starmedium auf einer SSD. Die Nutzdaten werden auf herkömmlichen Festplatten gespeichert. Der Auslagerungsspeicher entspricht der Größe des eingebauten Arbeitsspeichers.

Partition Größe Name Benutzen als Einbindungspunkt
/dev/sda1 536 MB esp EFI-System-Partition /boot/efi
/dev/sda2 max root Btrfs-Journaling-Dateisystem /
/dev/sda3 8 GB swap Auslagerungsspeicher (swap)

Bei der Softwareauswahl wählen wir nur den SSH-Server aus und bringen die Installation zu Ende.

Dateisysteme ordnen

Sobald das frisch installierte System läuft, melden wir uns per ssh als normaler Benutzer an und schwingen uns zum Administrator auf.

su - root

Zuerst erzeugen wir eine Momentaufnahme des Wurzeldateisystems und wechseln in die neue Umgebung.

btrfs subvolume snapshot / /@root
mount -o subvol=@root /dev/sda2 /mnt
mount -o bind /dev  /mnt/dev
mount -o bind /sys  /mnt/sys
mount -o bind /proc /mnt/proc
chroot /mnt

Dort installieren wir zunächst die benötigten Pakete.

apt install joe less tree psmisc wget fail2ban

Falls weitere Festplatten installiert sind, bilden wir einen RAID-Verbund. Die Metadaten werden gespiegelt und Nutzdaten gleichmäßig verteilt.

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

Dann legen wir noch Subvolumen und Einhängepunkte dafür an.

mount /dev/sdb /mnt
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@mail
btrfs subvolume create /mnt/@www
btrfs subvolume create /mnt/@gitea
btrfs subvolume create /mnt/@postgres
btrfs subvolume create /mnt/@restic
mkdir /srv/{mail,www,gitea,postgres,restic}
umount /mnt

Schließlich binden wir diese alle in der Dateisystemtabelle ein.

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

Netzwerk konfigurieren

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

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

Die statischen Adressen konfigurieren wir 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

Nun aktivieren wir die neuen Nertzwerkdienste.

systemctl enable --now systemd-{networkd,resolved,timesyncd}

Bootloader ersetzen

GRUB ersetzen wir durch Bootctl.

wget  -O /etc/kernel/postinst.d/zz-update-bootctl https://illusioni.de/~phrank/debian/zz-update-bootctl
chmod +x /etc/kernel/postinst.d/zz-update-bootctl
/etc/kernel/postinst.d/zz-update-bootctl
bootctl install

Aufräumen und neu starten

Zum Schluß entfernen wir die nicht mehr benötigten Pakete, verlassen die Changeroot-Umgebung und starten den Server neu.

apt remove grub-common ifupdown isc-dhcp-{client,common} rsyslog logrotate anacron cron emacsen-common aspell ispell
apt autoremove
exit
reboot

Literatur

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