FreeBSD und Jails - Grundsatzfragen

worker

Active Member
Hallo Community,

nach etwas Studium über FreeBSD und der Jails, lies ich mich von der Konzeption doch ziemlich begeistern. ^^

Doch leider konnte mir $uchmaschine folgende Fragen [noch] nicht beantworten:
1. Wenn ich einen Dienst wie z.B. Nextcloud in einem Jail installiere, wie kann dann diese Instanz auf Daten einer anderen Instanz - z.B. den MariaDB/MySQL-Dienst - zugreifen? Natürlich ginge das wohl bei vielen/einigen Diensten über die zum Jail zugewiesene IP(v6), aber z.B. bei MySQL, wo eine Abfrage absichtlich auf den localhost begrenzt ist, dürfte das schwierig sein? Abgesehen davon, wenn Daten per IP getauscht würden, würe das sicherlich die Performance des gesammten Systems ziemlich in die Knie zwingen, oder?

2. Leidet die Performance des Servers/der Hardware darunter, wenn man mehrere (2-4) Jails für bestimmte Dienste einrichtet?
Als Beispiel würde ich folgende Hardware anführen: Intel i5 (4 Kerne), 2.67GHz, 16GB RAM, 2TB HDD (Anbindung: 100 Mbps)

Nachtrag:
3. Kann man "zentrale" Dienste wie z.B. Fail2Ban auch auf Jails "ausdehnen", oder muss man solche Dienste separat in den einzelnen Jails laufen lassen?

Grüssle
worker
 
Zuletzt bearbeitet:
Wenn ich einen Dienst wie z.B. Nextcloud in einem Jail installiere, wie kann dann diese Instanz auf Daten einer anderen Instanz - z.B. den MariaDB/MySQL-Dienst - zugreifen?

Über TCP/IP. Die Performance ist dabei kaum ein Problem, da alles übers loopback läuft.

2. Leidet die Performance des Servers/der Hardware darunter, wenn man mehrere (2-4) Jails für bestimmte Dienste einrichtet?

Die Anzahl der Jails wirkt sich nicht auf die Performance aus, natürlich wird die Maschine mehr belastet, sobald mehr Dienste laufen. Dabei gibt es quasi keinen Unterschied, ob diese nun in Jails aufgeteilt sind oder alle im Basissystem laufen.

Rob
 
Die Anzahl der Jails wirkt sich nicht auf die Performance aus, natürlich wird die Maschine mehr belastet, sobald mehr Dienste laufen. Dabei gibt es quasi keinen Unterschied, ob diese nun in Jails aufgeteilt sind oder alle im Basissystem laufen.
Also nehme ich an, dass Jails nicht wirklich das Gleiche sind, wie VMs?
 
Hallo Community,

nach etwas Studium über FreeBSD und der Jails, lies ich mich von der Konzeption doch ziemlich begeistern. ^^

Doch leider konnte mir $uchmaschine folgende Fragen [noch] nicht beantworten:
1. Wenn ich einen Dienst wie z.B. Nextcloud in einem Jail installiere, wie kann dann diese Instanz auf Daten einer anderen Instanz - z.B. den MariaDB/MySQL-Dienst - zugreifen? Natürlich ginge das wohl bei vielen/einigen Diensten über die zum Jail zugewiesene IP(v6), aber z.B. bei MySQL, wo eine Abfrage absichtlich auf den localhost begrenzt ist, dürfte das schwierig sein? Abgesehen davon, wenn Daten per IP getauscht würden, würe das sicherlich die Performance des gesammten Systems ziemlich in die Knie zwingen, oder?

Zum einen über TCP. Da alles über lo geht, hast du auch keine nennenswerten Performanceeinbußen. Allerdings musst du zwischen den klassichen Jails und den neuen VNET-Jail unterscheiden. Letztere bringen eigenen virtualisierten TCPIP Stack mit, wie sich das hier auf die Performance auswirkt kann ich nicht wirklich sagen, aber ich denke auch nicht wirklich. Bei gängigen Virtualisierungstechniken mit paravirtualisiertem NIC hast du auch sehr wenig Overhead. Zudem wirst du üblich keine Unmengen an Daten an die MySQL schicken (wenn ja ist MySQL eher der Flaschenhals).
Allerdings kannst du auch MySQL per Socket betreiben und den per nullfs in die entsprechenden Jails mounten.


2. Leidet die Performance des Servers/der Hardware darunter, wenn man mehrere (2-4) Jails für bestimmte Dienste einrichtet?
Als Beispiel würde ich folgende Hardware anführen: Intel i5 (4 Kerne), 2.67GHz, 16GB RAM, 2TB HDD (Anbindung: 100 Mbps)

Grüssle
worker

Das dürfte zu vernachlässigen sein und jenseits von Benchmarks nicht zu bemerken. Zumindest in den von dir geschilderten Anwendungsfällen.


Also nehme ich an, dass Jails nicht wirklich das Gleiche sind, wie VMs?

Nein bei weitem nicht. Du arbeitest im Jail immer auf dem Kernel das Hauptsystems, die einzelnen Prozesse werden nur mit Schutzmechanismen gegeneinander abgeschirmt.
 
Dafür müsstest du erstmal definieren, was VMs in deinen Augen sind.
Genau :-)
Soweit ich weiss, ist ne VM, ein eigenständiges OS. Also vom Bootvorgang, über's laden der benötigten Treiber, etc. Nicht zu vergessen, dass dies auch den RAM betrifft.

Soweit ich jetzt gelesen habe, sind Jails eine "Kopie" des ursprünglichen bzw. des "Haupt-Betriebssystems". Das heisst, das hier auch "Nebendienste" (z.B. NTP[d]) laufen? Nicht zu vergessen, dass auch da RAM reserviert wird für diese "VM"?
Aber sicherlich wird da nix gebootet, bzw. ein weiterer Kernel geladen und gestartet..?
 
Heute würde man Jails als im weiteren Sinne Container bezeichnen. Es sind einfach weitere Instanzen des Userlands, die parallel unter einem gemeinsamen Kernel laufen. Technisch ist es so umgesetzt, dass die Prozesstabelle einen weiteren Eintrag erhält. Dieser Eintrag gibt an, zu welchem Jail der Prozess gehört. Der Kernel schränkt die Rechte des Prozesses entsprechend ein, er sieht nur den dem Jail zugehörigen Teil des Dateisystems, kann nur zugewiesene Ressourcen nutzen und so weiter. Der Vorteil ist, dass man eine Trennung ähnlich wie zwischen verschiedenen VMs hat (FreeBSDs Jails haben eine wesentlich härtere Trennung als Linux Container), aber nur den Ressourcenoverhead eines Chroot.
 
Genau :-)
Soweit ich weiss, ist ne VM, ein eigenständiges OS. Also vom Bootvorgang, über's laden der benötigten Treiber, etc. Nicht zu vergessen, dass dies auch den RAM betrifft.

Soweit ich jetzt gelesen habe, sind Jails eine "Kopie" des ursprünglichen bzw. des "Haupt-Betriebssystems". Das heisst, das hier auch "Nebendienste" (z.B. NTP[d]) laufen? Nicht zu vergessen, dass auch da RAM reserviert wird für diese "VM"?
Aber sicherlich wird da nix gebootet, bzw. ein weiterer Kernel geladen und gestartet..?

Nein, der Kernel wird nicht kopiert oder ähnliches. Deine Prozesse im Jail laufen auf dem selben Kernel wie das Hostsystem. Der Kernel weiß allerings welcher Prozess zu welcher Jail gehört, und schottet die gegeneinander ab, so dass ein Prozess von Jail 1 auch nur Prozesse von Jail 1 sehen kann. Sehr vereinfacht ausgedrückt natürlich.
Wenn ein Prozess in der Jail RAM braucht, bekommt er den wie jeder andere Prozess vom Kernel dynamisch zugeteilt. Er braucht vielleicht etwas mehr RAM, da Libraries z.b. nochmal geladen werden müssen, da der Prozess von Jail 1 nicht auf die schon vom Host ins RAM geladene Lib zugreifen kann. Aber das ist vernachlässigbar gering.
 
Der Kernel weiß allerings welcher Prozess zu welcher Jail gehört, und schottet die gegeneinander ab, so dass ein Prozess von Jail 1 auch nur Prozesse von Jail 1 sehen kann. Sehr vereinfacht ausgedrückt natürlich.
Genau, und da kommt meine 3. Frage ins Spiel ...
Demnach ist es nicht möglich z.B. Fail2Ban nur einmal auf dem gesamten System laufen zu lassen und dabei nen Dienst/Dienste in den Jails zu "schützen". Also müsste ich in jedem Jail Fail2Ban explizit installieren und einrichten?
 
Je nachdem wie du es einrichtest sollte es schon möglich sein, ein f2b am Host zu haben und damit über die Firewall alles zu blocken. Vom Host kannst du ja auf die einzelnen Logs zugreifen. Wie genau das Setup dazu aussehen muss hab ich mir aber bisher noch nie gedanken gemacht.
 
Vom Host kannst du ja auf die einzelnen Logs zugreifen.
Ah, okay...

Je nachdem wie du es einrichtest sollte es schon möglich sein, ein f2b am Host zu haben und damit über die Firewall alles zu blocken.
Das dürfte dann wohl ein interessanter job sein, denn wenn Jails über andere IPs laufen als das BasisSystem, müsste F2B damit umgehen können (quasi auf mehreren IPs horchen?), wenn es denn funktionieren sollte...

Gut. Dann erstmal vielen Dank Euch allen für die Klärung meiner Fragen :-)
 
f2b liest ja nur die Logs und blockt dann die entsprechenden Source IPs.
Wenn du Jails mit shared Net einrichtest (default) sollte es überhaupt kein Problem sein, dass am Host zu blocken. Wenn du VNET verwendest und die Jails quasi ihr eigenes Nic haben was in einer Bridge hängt geht das nicht mehr so einfach. Da könntest du über Nat mit RDR arbeiten, dann kannst du auch alles am Host blocken. Aber vielleicht gehts auch einfacher. Die Frage ist halt was machst du genau ;)
 
Hallo!
Wir haben auf unserem Server das meiste mit Jails realisiert, auch eine Nextcloud Instanz. Zur Zeit rennt bei uns alles über normale Shared IPs vom Host Sytem. Die Nextcloud ist mit Apache, LetsEncrypt und PHP in einem Jail und MariaDB mit Redis auf einem anderen. Du musst eigentlich nur einen Benutzer auf der MySQL Instanz, direkt in MySQL, erstellen, welcher Zugriff von einer bestimmten IP erlaubt. Weiters muss der MySQL Server auf einer Adresse schlummern, damit von außen zugegriffen werden kann. Die config.php von Nextcloud konfigurierst du zu der IP, wo der MySQL Server rennt.

Fail2Ban haben wir auch installiert. Es wird vom Host System geregelt und ist auch dort installiert, als Firewall benutzen wir PF. Google mal nach Fail2ban FreeBSD, da gibt es Anleitungen. Ich sag dir aber gleich, unter action.d die pf.conf ist, zumindest war es so bei uns, nicht wirklich funktionsfähig. Ich hab ein spartanisches Konfig geschrieben, welches Ban und Unban erledigt. Gelesen wird aus den Ordnern der Jail, welche ja auf dem Laufwerk ersichtlich sind. Als Dateisystem benutzen wird ZFS und für Backups znapzend. Funktioniert sehr gut. Vorallem, da wir alle Jails und Backups auf verschiedenen iSCSI Lun's haben. Noch etwas, PF in einem Jail geht nicht. IPFW JA, PF Nö! Lass das Hostsystem den Job übernehmen.

Zum Management unserer Jails benutzen wir iocage (auch für die RCTL Ressource Vergabe Geschichten). Diese haben eine recht gute Doku. Willst du mehr von Jails lesen schau dir https://www.amazon.de/FreeBSD-Maste...&keywords=jails+mastery&qid=1576440730&sr=8-1 an, das kann ich sehr empfehlen. Geht aber nicht soooo ins technische Detail. Verwendet aber interessante Beispiele für Standard Jails und Jails via Iocage.

In diesem Sinne...
LG
 
Noch etwas zur Performance von MariaDB/MySQL via IP: Ich hatte das vor ein paar Jahren aus Interesse mal etwas getestet, weil ich wissen wollte ob das für eine WordPress-Installation eine Rolle spielt. Dazu habe ich dieselben Anfragen mit dem mysql-client mal über IP und mal über einen Socket gestellt. Bei Kommunikation über IP war eine gewisse höhere Latenz feststellbar: Alle Antworten hatten eine ungefähr gleichbleibende Verzögerung. Sie lag aber für unsere WP-Installation weit unterhalb allem, was wir als relevant betrachtet hätten. Wenn man komplexe Anwendungen mit vielen aufeinander folgenden Datenbank-Abfragen hat, sollte man vielleicht einmal konkret testen, ob die Art der Anbindung (IP oder Socket) doch relevant wird.
 
Zurück
Oben