Jails in File-basierten Filesystem

BrainPain

Well-Known Member
Hallo Leute,

da ich es nicht geschafft habe meine /usr Partition zu verkleinern, um dann für jede Jail eine Partition anlegen zu können, habe ich nun mit dd für jede Jail auf /usr eine Datei (10GB) erzeugt die ich dann per mfs mounte. Meine Frage ist nun ob das irgendwelche Nachteile mit sich bringen könnte...Performance usw. Was mir besonders gut daran gefällt ist natürlich die besonders einfache Erstellung einer Sicherung.
Was meint Ihr dazu?

Viele Grüße
 
Warum wolltest du fuer jede Jail ein eigenes Filesystem?

Na jedenfalls fallen mir spontan folgende Punkte ein, welche zur nicht-optimalen Ressourcennutzung fuehren _koennten_. Aber wenn du genug davon hast, ist das wohl hinfaellig

1. UFS auf UFS ist vermutlich suboptimal
2. Evtl. cached die VM Bloecke dann doppelt, aber ich glaube das wird fuer md(4) umgangen
3. syscall overhead, weil du VFS -> Blockdevice -> VFS -> Blockdevice gehen musst
4. Backups koennen nicht inkrementell gemacht werden und belegen immer mehr Platz als noetig (warum du das als Vorteil siehst, ist mir nicht klar)

Bei "dicker" Hardware alles natuerlich kein Problem, nur etwas verschwenderisch, IMHO.
 
Hallo MrFixit,

wie gesagt wollte ich für jede Jail eine eigene Partition machen, weil ich grunix Jail-HowTo verwendet habe und die dort angeführten Gründe ziemlich logisch klangen.
Das mit den Dateien ist daher eine Notlösung und da ich performancetechnische Bedenken habe habe ich hier gepostet. Punkt 3. klingt für mich jetzt nicht so prickelnd da man ja ungerne Performace verschwendet. Punkt 4 sehe ich jedoch weniger kritisch, da ich ja aus der Jail genauso Sicherungen erstellen kann wie sonst auch. Aber die Überlegung einfach die Datei zu kopieren war wohl wirklich Unsinn.
[EDIT]
Okay, ich habe jetzt mal eine Reboot durchgeführt und nun ist das Filesystem in der Datei komplett leer. Wahrscheinlich wird es durch das automatische Mounten mit der fstab komplett verworfen...FAZIT: Blöde Idee.

Welche Vorgehensweise würdet Ihr empfehlen wenn die usr-Partition verkleinert werden soll? Theoretisch könnte man doch die /usr-Partition auf eine andere Partition kopieren und dann die Kopie als /usr mounten. Dann könnte man doch die alte /usr löschen und neu verteilen, oder? Hierfür wäre cpdup mein Freund, oder? Wäre diese Idee machbar oder wieder Quatsch?
[/EDIT]

Viele Grüße
 
Zuletzt bearbeitet:
Hi BrainPain,

konnte auf die Schnelle nicht finden, wo asg verschiedene Partitionen empfiehlt. Ich finde es aber etwas sehr aufwändig, mehrere Part. zu nehmen. Ansonsten guck dir doch mal ezjail an. Es löst nicht dein Part.-Problem, ist aber ein prima Tool, um die ganze Handarbeit zu minimieren :) http://wiki.bsdforen.de/howto/ezjail

Gruss, Elwood
 
Hi BrainPain,

konnte auf die Schnelle nicht finden, wo asg verschiedene Partitionen empfiehlt.
Steht im Kapitel 2.5 auf Seite 10. Es ging hauptsächlich darum dass wachsende Jails nicht das Hostsystem beeinträchtigen.

Ich finde es aber etwas sehr aufwändig, mehrere Part. zu nehmen. Ansonsten guck dir doch mal ezjail an. Es löst nicht dein Part.-Problem, ist aber ein prima Tool, um die ganze Handarbeit zu minimieren :) http://wiki.bsdforen.de/howto/ezjail
Daran hatte ich auch schon gedacht, ich werds mir mal anschauen.

Wie würdest du es denn machen? Einfach für jede Jail ein Verzeichnis anlegen? Funktioniert eigentlich meine Idee mit dem /usr-Partition kopieren oder oder geht das nicht so einfach?

Viele Grüße
 
Ich mache es so:
- Alle Jails kommen auf eine gemeinsame Partition. Bei ZFS werden wir das denn umstellen, sodass jedes Jail sein eigenes Dataset hat. Aber das ist Zukunftsmusik und erst in frühestens einem Jahr relevant... Wenn der Speicherplatz für ein Jail dort nicht mehr ausreichen wollte, wird es schnell auf eine neue Platte umkopiert.

- Es wird einmal ein Jail mit make buildworld und make distribution erstellt. In dieses kommen die grundlegend Programme wir Portupgrade (Portstree wird mit mount_nullfs reingemountet) und es wird grundlegend konfiguriert.

- Mit cpdup(1) wird dies Grundjail nun so oft umkopiert, wie wir Jails benötigen. Hinterher wird's getart und für die Zukunft als jail_leer.tar.bz2 aufbewahrt.

- Nun können die einzelnen Jails recht schnell aufgesetzt und gestartet werden.

Irgendwas aus dem Host herauskopieren ist immer ein wenig problematisch. Theoretisch müsste es aber gehen /usr zu kopieren.
 
Okay, ich habe nun die jail mit ezjail erstellt. Sie wird auch automatisch beim booten gestartet nur leider hat die Jail keine Verbindung zum Internet, also funktioniert auch kein pkg_add, weis jemand woran das liegen kann? Zur Info: Das Ganze läuft auf nem Rootserver und als Nameserver habe ich in der resolv.conf die nameserver des Providers eingetragen. SSH funktioniert ebenfalls nicht.

/etc/rc.conf (habe mich an asgs howto orientiert):
Code:
rcpbind_enable="NO"
network_interfaces=""
syslogd_enable="YES"
syslogd_program="/usr/sbin/syslogd"
syslogd_flags="-ss"

keymap="german.iso"
hostname="web.server"
scrnmap="NO"

sendmail_enable="NO"

sshd_enable="YES"
sshd_flags="-p 2222"

/etc/ssh/sshd_config:
Code:
ListenAddress 192.168.0.1

Viele Grüße
 
Das entwickelt sich so langsam zur neverending Story.
Ich hab keine Ahnung von pf, wie richte ich denn NAT mit pf ein?
Meine Config tut es scheinbar nicht.

Code:
ext_if="rl0"
internal_net="{{Color|#ff0000|192.168.0.0/16}}"

# nat
nat on $ext_if from $internal_net to any -> 192.168.0.2

# zunaechst alles oeffnen
pass out all keep state
pass in all keep state

# interne devices explizit durchgaengig machen
pass quick on lo0 all

# ext_if dicht machen
pass out on $ext_if all keep state
block in on $ext_if all

# spezialbehandlungen
pass in on $ext_if proto tcp from any to any port **ssh** keep state

in rc.conf steht gateway_enable auf YES

Ich weis das ping aus der jail heraus nicht funktioniert aber zum DNS testen reicht es scheinbar.
Wenn ich also nun ein ping aus der jail heraus auf www.google.de mache kommt
"Host name lookup failure". Was könnte also noch fehlen?

[EDIT]
Ich sehe grad dass wenn ich pf mit /etc/rc.d/pf stoppe und starte Syntaxfehler beim nat und bei
der ssh-regel habe...nur wo?
[/EDIT]

Viele Grüße
 
Zuletzt bearbeitet:
Ohh man, ich glaub jetzt hab ich es.
Die Color-Angabe beim internal_net war schuld. Ich dachte das wäre irgendeine Anweisung damit die pf-ausgabe auf der console farbig erfolgt...also hab ich es einfach aus dem wiki kopiert. Aber es ist wohl lediglich eine wiki-format Anweisung welche seltsamerweise bis zum Browser durchgerutscht ist...sollte vielleicht jemand reparieren der Ahnung von wikipedia hat.
Gemeint ist dieser Artikel unter dem Punkt "pf einrichten".
Der Fehler mit der ssh-Regel lag übrigens in dem **ssh**. Ich dachte dass dies die Portsyntax von pf ist, da man z.B. bei cisco-ACLs ebenfalls die Ports über den Namen ansprechen kann. Also habe ich es jetzt durch 22 ersetzt und schon tut es.

Viele Grüße
 
Ich hab keine Ahnung von pf, wie richte ich denn NAT mit pf ein?
Meine Config tut es scheinbar nicht.

Code:
ext_if="rl0"
internal_net="{{Color|#ff0000|192.168.0.0/16}}"

# nat
nat on $ext_if from $internal_net to any -> 192.168.0.2

# zunaechst alles oeffnen
pass out all keep state
pass in all keep state

# interne devices explizit durchgaengig machen
pass quick on lo0 all

# ext_if dicht machen
pass out on $ext_if all keep state
[B]block in on $ext_if all[/B]

# spezialbehandlungen
pass in on $ext_if proto tcp from any to any port **ssh** keep state

in rc.conf steht gateway_enable auf YES

Ich weis das ping aus der jail heraus nicht funktioniert aber zum DNS testen reicht es scheinbar.
Wenn ich also nun ein ping aus der jail heraus auf www.google.de mache kommt
"Host name lookup failure". Was könnte also noch fehlen?

[EDIT]
Ich sehe grad dass wenn ich pf mit /etc/rc.d/pf stoppe und starte Syntaxfehler beim nat und bei
der ssh-regel habe...nur wo?
[/EDIT]

Viele Grüße

last match wins. du solltest erst alles blocken, und dann explizit öffnen. wenn du auf deinen externen interface nix reinlässt, dann wirds auch schwer mit den dns-antworten.

wieso nattest du auf deinem externen interface auf eine privaten adressbereich?
 
last match wins. du solltest erst alles blocken, und dann explizit öffnen. wenn du auf deinen externen interface nix reinlässt, dann wirds auch schwer mit den dns-antworten.

wieso nattest du auf deinem externen interface auf eine privaten adressbereich?

Wie gesagt lag es wohl daran dass es einen Syntaxfehler in der pf.conf gab und pf wahrscheinlich garnicht richtig lief. Wie meinst du das mit last match wins? Ich blocke doch schon als erstes alles was reinkommt und danach öffne ich doch explizit für ssh, oder sehe ich das falsch? Hab wie gesagt keine Ahnung von pf.
Das mit dem nat auf privaten Adressbereich habe ich aus einem Beitrag hier im Forum, aber ich habe es bereits wieder mit
Code:
nat on $ext_if inet from $internal_net to any -> ($ext_if)
ersetzt.

Viele Grüße
 
last match wins bedeutet, dass die letzte zutreffende regel, die beim durchlaufen des regelwerkes gefunden wird, zutrifft.

du hast in deiner pf.conf stehen (reihenfolge beachten):
Code:
pass out on $ext_if all keep state
block in on $ext_if all
zum einen ist das "keep state" seit 4.1 nicht mehr notwendig, da es mittlerweile die standardeinstellung in pf ist.

mit dieser reihenfolge wird kein verkehr bei dir ankommen, weil du _allen_ eingehenden verkehr blockierst. das "block in all" sollte als erstes kommen. danach dann etwas wie "lass alle dns-anfragen rein" oder "mein internes netz darf dns nach draussen machen" und solche regeln dann im anschluss. du kannst das ganze auch andersrum aufbauen, wenn du mit quick arbeitest.

anstatt "pass quick on lo0" kannst duch "set skip on lo0" in den options setzen (das hab ich aber auch erst auf der mailingliste zu hören bekommen, dass das die bessere alternative zu der pass-regel ist).

lies bitte die FAQ von pf auf der openbsd-webseite durch und sieh dir auch die beispiele an; die FAQ gibts auch in deutsch.
 
Sorry, versteh ich nicht ganz. Die besagte pf.conf ist bereits produktiv auf einem Rootserver auf dem ich ohne Probleme mit ssh drauf komme, also kann es nicht sein dass mit meiner Einstellung kein Verkehr bei mir ankommen kann, oder? Das ssh durch darf steht ja auch erst nach der "block in ... all"-Regel. Also ist es doch richtig, oder nicht?

Weiterhin schreibst du dass "keep state" seit 4.1 nicht mehr notwendig ist. Du meinst sicherlich OpenBSD, ist denn die nach FreeBSD 6.2 portierte Version auf dem gleichen Stand?

Viele Grüße
 
Zuletzt bearbeitet:
okay, wie es bei freebsd aussieht, kann ich dir nicht sagen, aber die manpage sollte dir weiterhelfen können, ob es bei fbsd mittlerweile auch standard ist.
ja, ssh ist wieder erlaubt, weil du das anschließend eingefügt; hier gilt auch wieder "last match wins". aber du hast nur ssh explizit erlaubt, der restliche eingehende verkehr wird geblockt; daher vermute ich mal, dass die dns-antworten nicht zurückkommen (dürfen). dass kannst du aber per tcpdump auf das logginginterface feststellen, wenn du logging für pf aktivierst (block in log all). ansonsten horche einfach mal mit tcpdump auf das externe interface, dann solltest du sehen, ob die pakete auf der karte ankommen.
 
Danke für den Link, dagnu. Also bin ich doch nicht der Erste der daran gedacht hat das Ganze in einer File zu halten.

Ich habe übrigens gerade gemerkt dass pkg_add -r in der Jail nicht funktioniert. Ich vermute dass dies wieder mit pf zusammen hängt.
Die Fehlermeldung ist:
Code:
Can't open data connection
oder:
Code:
File unavailable
oder:
Code:
Operation timed out

Ich habe testweise die block in ... all Regel auskommentiert und es erneut versucht aber Fehlanzeige. Weis jemand woran das liegen kann?

Viele Grüße
 
Kann es auch an der /etc/hosts liegen? Dort habe ich nämlich noch garnichts getan. Wenn ja wie sähe denn so ein Eintrag für eine Jail aus?

[EDIT]
DNS scheint trotzdem zu funktionieren, da wenn ich traceroute www.google.de in der jail ausführe erhalte ich eine gültige IP.
Welche Regel ist denn für pf relevant damit ein pkg_add funktioniert?
[/EDIT]

Viele Grüße
 
Zuletzt bearbeitet:
Danke für den Link, dagnu. Also bin ich doch nicht der Erste der daran gedacht hat das Ganze in einer File zu halten.
Das ich als erster vor einer Thematik stehe, ist mir bisher eigentlich bei FreeBSD bzw. bsdforen.de noch nicht passiert.

Ich habe übrigens gerade gemerkt dass pkg_add -r in der Jail nicht funktioniert. Ich vermute dass dies wieder mit pf zusammen hängt.
Ich denke mal ein anderer Thread wäre schon seit längerem angebracht, der Titel hat doch relativ wenig mit dem überwiegend behandeltem Thema zu tun.
 
Das ich als erster vor einer Thematik stehe, ist mir bisher eigentlich bei FreeBSD bzw. bsdforen.de noch nicht passiert.
Sorry, meine Forumsuche und Google hat es nicht ausgespuckt und die Glaskugel ist gerade in Reparatur...so what?

Ich denke mal ein anderer Thread wäre schon seit längerem angebracht, der Titel hat doch relativ wenig mit dem überwiegend behandeltem Thema zu tun.
Auch wenn du recht hast war dein Posting irgendwie garnicht hilfreich.
Aber vielleicht postest du ja etwas in dem neuen Thread.

Viele Grüße & nichts für ungut
 
Zuletzt bearbeitet:
Zurück
Oben