Alle Artikel hier basieren auf der Erstellung eines Jails, da ich grundsätzlich jede Anwendung in einer eigenen Umgebung betreibe. Das sorgt für saubere Voraussetzungen und keine unnötig wechselseitige Abhängigkeiten. Jails können Dienste sehr einfach, sehr schlank und sehr sicher betreiben. Für FreeBSD ist es egal, ob eine oder 100 Jails gleichzeitig laufen, relevant sind nur die Dienste und deren Ressourcen, die darin laufen. Das macht das ganze sehr effizient und flexibel.
Ziel ist die Erstellung eines Jails mit den wichtigsten Grundeinstellungen, damit andere Artikel darauf aufbauen können. Wichtig: Diese Anleitung ist explizit darauf ausgelegt worden in Koexistenz mit BHYVE auf einem FreeBSD Server betrieben zu werden. Das bedeutet, das die Ablage der Daten und auch die Netzwerkschnittstellen so konfiguriert sind, das beide auf die gleichen Logik aufbauen.
NEU: Für ganz ungeduldige habe ich einen Konsole only Abschnitt. Da gibts nur Befehle, keine Erklärungen.
Letzte Aktualisierung:
work
data
im Dataset data/bastille
abgelegt,/usr/local/bastille/data
eingebunden wirdigb0
BastilleBSD ist nach der Anpassung der Paketquelle mit pkg install -y bastille
schnell installiert.
Mit service bastille enable
startet Bastille zwar automatisch beim booten. Mit sysrc bastille_list=
wird eine Liste der Jails vorbereitet, die später beim booten automatisch gestartet werden sollen und sysrc bastille_rcorder=YES
stellt die richtige Reihenfolge der Jails sicher.
In der Konfigurationsdatei /usr/local/etc/bastille/bastille.conf
werden folgende Einträge angepasst:
sysrc -f /usr/local/etc/bastille/bastille.conf bastille_tzdata="Europe/Berlin" # Zeitzone einstellen
sysrc -f /usr/local/etc/bastille/bastille.conf bastille_zfs_enable="YES" # ZFS Funktionen aktivieren
sysrc -f /usr/local/etc/bastille/bastille.conf bastille_zfs_zpool="work" # ZFS Pool
sysrc -f /usr/local/etc/bastille/bastille.conf bastille_network_loopback="localnet0" # Netzwrkschnittstelle für private Jails
Als erstes wird ein aktuelles FreeBSD mit bastille bootstrap 14.2-RELEASE update
heruntergeladen.
Optional: Wenn der zusätzliche data
Pool genutzt werden soll, dann kann dieser mit zfs create -o mountpoint=/usr/local/bastille/data data/bastille
mit angelegt werden. Die Verzeichnisstruktur per zfs list | grep bastille
sieht dann so aus:
NAME USED AVAIL REFER MOUNTPOINT
data/bastille 96K 1.75T 136K /usr/local/bastille/data
work/bastille 651M 430G 136K /usr/local/bastille
work/bastille/backups 96K 430G 96K /usr/local/bastille/backups
work/bastille/cache 199M 430G 96K /usr/local/bastille/cache
work/bastille/cache/XX.Y-RELEASE 199M 430G 199M /usr/local/bastille/cache/XX.Y-RELEASE
work/bastille/jails 96K 430G 96K /usr/local/bastille/jails
work/bastille/releases 452M 430G 96K /usr/local/bastille/releases
work/bastille/releases/XX.Y-RELEASE 451M 430G 451M /usr/local/bastille/releases/XX.Y-RELEASE
work/bastille/templates 96K 430G 96K /usr/local/bastille/templates
Bevor es weitergeht, ist jetzt ein guter Zeitpunkt das System mit reboot
neu zu starten um zu schauen ob noch alles klappt.
publicnet0
mit dem Mitglied igb0
und localnet0
mit der IP Adresse 10.0.0.1
sysctl net.inet.ip.forwarding
hat den Wert 1
work/bastille
ist nach /usr/local/bastille
eingebundendata/bastille
ist nach /usr/local/bastille/data
eingebundenDamit sind die Vorbereitungen abgeschlossen und das System vorbereitet.
Nun können Jails auf zwei Arten erzeugt werden:
bastille create JAILNAME XX.Y-RELEASE 10.0.0.10 localnet0
erzeugt ein Jail mit dem privaten Netzwerk. Das Jail ist aus dem lokalen Netz erst mal nicht erreichbar, die benötigen Ports werden später per NAT in der pf Firewall freigegeben (so wie bei Docker). Die IP Adresse wird manuell vergeben!bastille create -B JAILNAME XX.Y-RELEASE 0.0.0.0 publicnet0
erzeugt ein Jail welches sich per DHCP eine IP Adresse aus dem lokalen Netzwerk zieht und auch darüber komplett erreichbar ist (wenn die pf Firewall es zulässt).Die IP-Adresse am besten statisch im DHCP-Server hinterlegen, damit sie sich nicht mehr ändert und per DNS veröffentlichen (JAILNAME.domain.local
).
Auf das Jail kann nun mit dem Befehl bastille console JAILNAME
zugegriffen werden. Je nachdem was darin läuft, kann auch nach der Erstellung eines administrativen Benutzers auch SSH aktiviert werden. Dann aber unbedingt daran denken das root Passwort mit passwd
zu setzen.
Updates sind für den sicheren und zuverlässigen Betrieb der Systeme unerlässlich. Neben der regelmäßigen Aktualisierung von Paketen betrifft dies auch das Basissystem selbst. Folgende Aufgaben sind daher regelmäßig durchzuführen:
Voilá