Vorbereitung der Jails
Zur Verwaltung der Jails setze ich ezjail ein.
Hintergrund
Der Server hat nach außen hin einen /64
er Block IPv6 Adressen, jedoch
nur eine einzige IPv4 Adresse.
Somit kommt man nicht drum rum, den IPv4 Verkehr aus den Jails raus durch
ein NAT laufen zu lassen. Dies erledigt pf
.
Für den Weg rein wird jeglicher Verkehr (auch mit pf
) auf eine Jail
geleitet, in der ein Reverse Proxy läuft.
Vorwiegend sollen Webserver in den Jails laufen, somit wird jeglicher http und https Verkehr an die Reverse-Jail umgeleitet.
Ungefähr so:
+==Host==+
|
+-<-pf->-+
| |
+-----+ +-----+
| em0 | | lo0 |
+-----+ +-----+
| |
| +------+==Reverse-Proxy==+
+==Internet==+ |
+------+==Jail-A==+
|
+------+==Jail-B==+
|
+------+==...==+
Dies hat den Vorteil, dass ich die Terminierung der SSL-Zertifikate dem Reverse-Proxy überlassen kann.
Intern, zwischen den Jails wird dann nur IPv6 gesprochen.
Vorbereitung
Die Installation von ezjail ist recht einfach:
cd /usr/ports/sysutils/ezjail
make install
Pro Jail möchte ich ein eigenes ZFS Dataset haben, somit kommt in die
/usr/local/etc/ezjail.conf
(weiter unten) folgendes:
ezjail_use_zfs="YES"
ezjail_use_zfs_for_jails="YES"
ezjail_jailzfs="jail/root"
Ggf. ezjail_jailzfs
anpassen, es sollte ein Dataset sein, dass
auf /usr/jails
zeigt:
zfs list -r jail
NAME USED AVAIL REFER MOUNTPOINT
jail 224K 2.56T 88K none
jail/root 224K 2.56T 88K /usr/jails
(Dieses Dataset habe ich mir bei der Installation erzeugt. Mehr Details dort nachlesen.)
Danach in der /etc/rc.conf
ezjail selbst aktivieren:
ezjail_enable="YES"
Weil wir gerade dabei sind, ein zweites Loopback Interface einrichten, um den Traffic der Jails von dem Loopback Traffic des Hosts zu separieren:
cloned_interfaces="lo1"
Damit das mit dem Traffic in die Jails rein funktioniert muss man noch Forwarding aktivieren:
gateway_enable="YES"
ipv6_gateway_enable="YES"
Danach kann man lo1
und ezjail manuell starten:
service netif cloneup
service ezjail start
Für das Forwarding braucht es noch zwei sysctls.
Unter /etc/sysctl.conf
:
net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1
Bootstrapping
Auf meinem Server baue ich mir die Pakete selbst.
Ich könnte mir das Base Jail mit ezjail-admin update -bp
erstellen,
doch dann wird world auf nur einem Core gebaut, und das dauert…
-b
ruftmake buildworld; make installworld
auf, um die Base Jail zu bauen.-p
gibt der Base Jail mittelsportsnap
einen ports tree mit.
Um das ein bisschen zu beschleunigen mache ich das hier:
cd /usr/src
make buildworld -j8
ezjail-admin update -ip
-i
ruft nurmake installworld
auf (haben world ja eben erst gebaut).-j8
(von make) sollte der Anzahl von Cores entsprechen..
Siehe an, der Aufwand hat sich gelohnt:
zfs list -r jail
NAME USED AVAIL REFER MOUNTPOINT
jail 1.18G 2.56T 88K none
jail/root 1.18G 2.56T 104K /usr/jails
jail/root/basejail 1.15G 2.56T 1.15G /usr/jails/basejail
jail/root/newjail 26.4M 2.56T 26.4M /usr/jails/newjail
Als nächsten Schritt kümmern wir uns um die Jail Flavours.
last update: 2024-01-28 17:42:17 +0100