Einleitung

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.

Ziele

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:

Grundbedingungen

BastilleBSD

Installieren

BastilleBSD ist nach der Anpassung der Paketquelle mit pkg install -y bastille schnell installiert.

Anpassen

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.

  • Diese Schnittstellen existieren:
    • publicnet0 mit dem Mitglied igb0 und
    • localnet0 mit der IP Adresse 10.0.0.1
  • Routing ist aktiviert, denn sysctl net.inet.ip.forwarding hat den Wert 1
  • work/bastille ist nach /usr/local/bastille eingebunden
  • OPTIONAL: data/bastille ist nach /usr/local/bastille/data eingebunden

Damit sind die Vorbereitungen abgeschlossen und das System vorbereitet.

Erstellen

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).

Zugriff

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

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:

Konsole

Voilá