Hosting System¶
Einleitung¶
Unser Hosting System wird am Ende folgende Dienste umfassen.
- CertBot 2.6.0 (LetsEncrypt ACME API 2.0)
- OpenSSH 9.3p1 (Public-Key-Auth)
- Unbound 1.17.1 (DNScrypt, DNS over TLS)
- MySQL 8.0.32 (InnoDB, GTID)
- Dovecot 2.3.20 (IMAP only, 1GB Quota)
- Postfix 3.8.0 (Dovecot-SASL, postscreen)
- Python-SPF-Engine 3.0.4 (SPF2)
- OpenDKIM 2.10.3 (VBR, 2048 Bit RSA)
- OpenDMARC 1.4.2 (SPF2, FailureReports)
- SpamAssassin 4.0.0 (SpamAss-Milter)
- Apache 2.4.57 (MPM-Event, HTTP/2, mod_brotli)
- NGinx 1.22.1 (HTTP/2, mod_brotli)
- PHP 8.1.19 (PHP-FPM, Composer, PEAR)
- NodeJS 18.16.0 (NPM, YARN)
Folgende Punkte sind in allen folgenden HowTos zu beachten.
- Alle Dienste werden mit einem möglichst minimalen und bewährten Funktionsumfang installiert.
- Alle Dienste werden mit einer möglichst sicheren und dennoch flexiblen Konfiguration versehen.
- Alle Konfigurationen sind selbstständig auf notwendige individuelle Anpassungen zu kontrollieren.
- Alle Benutzernamen werden als
__USERNAME__
dargestellt und sind selbstständig passend zu ersetzen. - Alle Passworte werden als
__PASSWORD__
dargestellt und sind selbstständig durch sichere Passworte zu ersetzen. - Die Domain des Servers lautet
example.com
und ist selbstständig durch die eigene Domain zu ersetzen. - Der Hostname des Servers lautet
devnull
und ist selbstständig durch den eigenen Hostnamen zu ersetzen (FQDN=devnull.example.com). - Es werden die FQDNs
devnull.example.com
,mail.example.com
undwww.example.com
verwendet und sind selbstständig im DNS zu registrieren. - Die primäre IPv4 Adresse des Systems wird als
__IPV4ADDR__
dargestellt und ist selbsttändig zu ersetzen. - Die primäre IPv6 Adresse des Systems wird als
__IPV6ADDR__
dargestellt und ist selbsttändig zu ersetzen. - Postfix und Dovecot teilen sich sowohl den FQDN
mail.example.com
als auch das SSL-Zertifikat.
Voraussetzungen¶
Diese HowTos setzen ein wie in Remote Installation beschriebenes, installiertes und konfiguriertes FreeBSD Basissystem voraus.
Important
An diesem Punkt müssen wir uns entscheiden, ob wir die Pakete/Ports in Zukunft bequem als vorkompiliertes Binary-Paket per pkg install <category/portname>
mit den Default-Optionen installieren wollen oder ob wir die Optionen und somit auch den Funktionsumfang beziehungsweise die Features unserer Pakete/Ports selbst bestimmen wollen.
In diesem HowTo werden wir uns für die zweite Variante entscheiden, da uns dies viele Probleme durch unnötige oder fehlende Features und Abhängigkeiten ersparen wird. Andererseits verlieren wir dadurch den Komfort von pkg
bei der Installation und den Updates der Pakete/Ports. Ebenso müssen wir zwangsweise für alle Pakete/Ports die gewünschten Optionen manuell setzen und die Pakete/Ports auch selbst kompilieren.
Dieses Vorgehen ist deutlich zeitaufwendiger und erfordert auch etwas mehr Wissen über die jeweiligen Pakete/Ports und deren Features, dafür entschädigt es uns aber mit einem schlankeren, schnelleren und stabileren System und bietet uns gegebenenfalls nützliche/erforderliche zusätzliche Funktionen und Sicherheitsfeatures. Auch die potentielle Gefahr für Sicherheitslücken sinkt dadurch, da wir unnütze Pakete/Ports gar nicht erst als Abhängigkeiten mitinstallieren müssen.
Sofern noch nicht geschehen, deaktivieren wir also zuerst das Default-Repository von pkg
, um versehentlichen Installationen von Binary-Paketen durch pkg
vorzubeugen.
mkdir -p /usr/local/etc/pkg/repos
echo "FreeBSD: { enabled: no }" > /usr/local/etc/pkg/repos/FreeBSD.conf
Die von uns jeweils gewünschten Build-Optionen der Ports legen wir dabei mittels der options
-Files des Portkonfigurationsframeworks OptionsNG
fest.
Da wir unsere Nutzdaten weitestgehend unter /data
ablegen werden, legen wir ein paar hierfür benötigte Verzeichnisse an, sofern nicht bereits geschehen.
mkdir -p /data/db /data/www/acme/.well-known
DNS Records¶
Für diese HowTos müssen zuvor folgende DNS-Records angelegt werden, sofern sie noch nicht existieren, oder entsprechend geändert werden, sofern sie bereits existieren.
example.com. IN A __IPV4ADDR__
example.com. IN AAAA __IPV6ADDR__
devnull.example.com. IN A __IPV4ADDR__
devnull.example.com. IN AAAA __IPV6ADDR__
mail.example.com. IN A __IPV4ADDR__
mail.example.com. IN AAAA __IPV6ADDR__
www.example.com. IN A __IPV4ADDR__
www.example.com. IN AAAA __IPV6ADDR__
example.com. IN MX 10 mail.example.com.
Los geht es¶
Die einzelnen HowTos bauen aufeinander auf, daher sollten sie in der Reihenfolge von oben nach unten bis zum Ende abgearbeitet werden.