Anfängerfrage - Jails + VNET + pf

Hi,

zunächst einmal entschuldige ich mich für die vermutlich dumme Frage.


Ich möchte verschiedene VNET-Jails erstellen. Deren Traffic soll nach extern und intern (nicht jede Jail soll mit jeder Anderen kommunizieren können) isoliert und "geglättet" werden.

Hierzu stelle ich mir folgendes Schema vor


(1)
WAN ---- em0 ------- pf-jail ------ jail 1
WAN ---- em0 ------- pf-jail ------ jail 2
>> pf-jail ist direkt über jeweils eigene epair mit jail1 und jail2 verbunden

oder

(2)
WAN ---- em0 ------- |pf-jail| ----- |bridge0| ------ jail 1
WAN ---- em0 ------- |pf-jail| ----- |bridge0| ------ jail 2
>> pf-jail ist via bridge0 über jeweils eigene epair mit jail1 und jail2 verbunden


Aus diesem Artikel https://vermaden.wordpress.com/posts/ habe ich folgende Jail.conf

host # cat /etc/jail.conf.d/vnet.conf
vnet {
# STARTUP/LOGGING
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.consolelog = "/var/log/jail_console_${name}.log";

# PERMISSIONS
allow.raw_sockets;
exec.clean;

# PATH/HOSTNAME
path = "/jail/${name}";
host.hostname = "${name}";

# VNET/VIMAGE
vnet;
vnet.interface = "${if}b";

# NETWORKS/INTERFACES
$id = "60";
$ip = "20.0.0.${id}/24";
$gw = "20.0.0.1";
$br = "bridge0";
$if = "epair${id}";

# ADD TO bridge0 INTERFACE
exec.prestart += "ifconfig ${if} create up";
exec.prestart += "ifconfig ${if}a up descr jail:${name}";
exec.prestart += "ifconfig ${br} addm ${if}a up";
exec.start += "ifconfig ${if}b ${ip} up";
exec.start += "route add default ${gw}";
exec.poststop += "ifconfig ${if}a destroy";
}

Ich befürchte, mittels (2), kann ich die Jails nicht isolieren, da sie über die bridge direkt miteinander kommunzieren können. Die Festlegung des Gateway ist dabei nicht hilfreich, da ein böswilliger Angreifer diese Angabe in der Jail ändern könnte.

Um (1) einzurichten, dachte ich, diese beiden Zeilen
exec.prestart += "ifconfig ${if}a up descr jail:${name}";
exec.prestart += "ifconfig ${br} addm ${if}a up";
zu ändern in

exec.prestart += "ifconfig ${if}a up descr jail:${name}";
exec.prestart += "ifconfig ${if}b up descr jail:pf-jail";
und
exec.poststop += "ifconfig ${if}a destroy";
ergänzen um
exec.poststop += "ifconfig ${if}b destroy";

Ok, nun zerreißt mich in der Luft, oder erklärt mir bitte, wie ich mein Ziel erreiche.

Danke schon mal.

PS: Die Vorstellung eines böswilligen Angreifers im internen Lan, der es schafft, eine Jail zu infiltrieren, kann paranoisch erscheinen. Aber ich will ja auch ein bisschen was über VNET und Jails lernen.
 
Ich habe mir vor einiger Zeit mal dieses Ebook gekauft, um den Autor zu unterstuetzen. Du kannst das Ebook allerdings auch kostenlos downloaden, wenn Du beim Betrag $0 eingibst: https://rderik.gumroad.com/l/uwOLZ

Jails and VNET, a guide​

This guide shows you how to use jails and virtual networks. Virtual networks give you the flexibility to:

+ Give your jails their own network stack.

+ Isolate jails from each other by grouping them in vnets.

+ Model networks you are currently running, and test them in jails before messing with the real system.

Whatever the case might be, learning how to use vnets and jails is a useful skill to have. In this guide, we begin with basic jails operations and end up designing and implementing our network using vnets.

The case study for this guide consists of having a jailed web server running in public vnet that can expose services to the host, and a fictitious database server that will be located in a private vnet. The web server will have access to both the private and the public vnet. With this basic setup, you'll understand the necessary concepts of using jails and vnets so you can apply it to your specific needs.

Includes: mobi, ePub, PDF, plain text, and source code.
 
Um Dein Problem zu lösen, musst Du Dir eigentlich nur über die Infrastruktur klar werden. Betrachte jede Jail als Host und überleg Dir, wie Du diese verkabeln würdest. Dann ergibt sich daraus auch der Aufbau. Du müsstest also jail 1 und jail 2 jeweils direkt mit der pf jail verbinden. Dann kannst Du in der pf jail auch den Zugang steuern. Am sichersten wären dann auch getrennte Netze für jail 1 und jail 2. Aber beachte: Wenn jemand den Host aller jails infiltriert, dann nützt das Konstrukt nichts mehr.
 
Sorry im Voraus, wenn ich nicht so ganz in deine config reinsteige und daher die Antwort eventuell nicht 100% passt. :p
Das war meine funktionierende Beispielconfig in /etc/jail.conf : https://www.bsdforen.de/threads/ung...-nach-update-auf-13-0-beta2.36034/post-323669

Es hilft (mir zumindest), sich das erstmal optisch auf Papier hinzukritzeln, eins nach dem anderen so konfigurieren und dann von allen Seiten durchzupingen.
Sieh die Behandlung des Netzwerkteils von VNET-jails 1:1 wie bei VMs an. Du willst auf dem Host die Trennung entweder durch mehrere bridges (jail1 bekommt pärchenAB1 und jailbridge1, jail2 bekommt pärchenAB2 oder CD2 sowie jailbridge2 ...usw) oder du dudelst alles über VLANs raus (jail1 - pair1_vlan100 (vlan1 ist nie eine gute idee) auf jailbridge1, jail2 - pair2_vlan200 auf jailbridge2 ... ), dann reicht auch eine (zusätzliche, je nach configausgestaltung) bridge auf dem Host.

ErgänzungsEdit:
jail1 192.168.100.0/24 darf dann auf pf 192.168.100.1/24
jail2 192.168.200.0/24 darf dann auf pf 192.168.200.1/24
...
und was du sonst noch erlauben oder verbieten willst :)
 
Zurück
Oben