Obwohl Linux als freie Software kostenlos verfügbar ist, setzen viele beim Unternehmenseinsatz auf Enterprise-Distributionen mit Support. Wo die Stärken der ... (mehr)

Fazit

Das Konzept der Jails unter FreeBSD ist nicht allein ein Sicherheitskonzept, sondern es stellt auch eine kleine Virtualisierungslösung dar. Dadurch bekommen nicht nur Administratoren in Rechenzentren ein mächtiges Werkzeug an die Hand. Auch Internet-Providern bietet sich hier die Chance, ihren Kunden Root-Shells zur Verfügung zu stellen und diese nutzen zu lassen. Die Sicherheit ist dabei bedingt durch das Konzept in vollem Umfang gewährleistet.

Den Administratoren eines Heimnetzwerks bieten die Jails ebenfalls einen erheblichen Sicherheitsgewinn. Besonders, wenn sie nicht nur einen kleinen DNS-Dienst einsperren, sondern beispielsweise einen Webbrowser in einer Jail installieren. Alles in allem zeigt sich: Die Jails unter FreeBSD sind ein echtes Highlight und zugleich sehr vielseitig einsetzbar. (jcb)

Tools zur Verwaltung von Jails

Um die Verwaltung von Jails vom Hostsystem aus zu ermöglichen, gibt es ein paar Tools, die kurz beschrieben werden. jail [-i] [-l -u <Username> | -U <Username>] <Pfad> <Hostname> <IP-Adresse> <Kommando>: Startet eine Jail im angegebenen Pfad, mit der IP-Adresse und dem Kommando. Falls die Option -l gesetzt ist, wird vor dem Start das Environment auf Standardwerte gesetzt. Das angegebene Kommando wird dabei mit den User-Rechten des Hostsystems (-u) oder mit den Rechten des Users innerhalb der Jail (-U) ausgeführt. jexec [-u <Username> | -U <Username>] <JID> <Kommando> <Parameter zum Kommando>: Führt ein Kommando mit den Parametern innerhalb einer Jail aus. Dabei startet es mit den User-Rechten des Hostsystems (-u) oder mit den Rechten des Users innerhalb der Jail (-U). Zur eindeutigen Identifizierung der Jail ist auch hier wieder die JID anzugeben. jls: Erzeugt eine Liste aller im Moment gestarteten Jails. Es werden dabei die Identifizierungsnummer der Jail (JID), IP-Adresse, Hostname und Pfad zur Jail ausgegeben. Die JID ist eine fortlaufende Nummer, unter der die Jail eindeutig identifiziert wird. Die JID ist für killall wichtig. killall -j <JID> -<Signal> <Prozessname>: Damit wird an einen Prozess innerhalb einer Jail ein Signal gesendet. Wenn kein Prozessname und Signal angegeben ist, dann wird die ganze Jail beendet. "Signal" bezeichnet die in UNIX üblichen Signale wie SIGTERM, SIGKILL et cetera.

1/1 A

210 x 297 mm zzgl. Beschnitt

LM

 

Regeln für die Paketfilter PF und IPFW

Damit Routing-fähige Jails auch von außen erreichbar sind, müssen entsprechende Regeln für PF und IPFW [9] geschrieben werden. Zunächst zu PF, dem Paketfilter, der von OpenBSD portiert wurde.

# NAT-Regeln fuer PF
# =================
extif = "<I>Internet-Interface<I>"
intif = "<I>Intranet-Interface<I>"
nat_jail = "<I>Jail-IP-Adresse<I>"
nat on $extif from $intif:network to  any -> ($extif)
rdr on $extif proto tcp from any to  any port <I>Port<I> -> $nat_jail
pass in on $extif inet proto tcp from any to $nat_jail port  <I>Port<I>

Zunächst wird festgelegt, auf welchem Netzwerk-Interface (»$extif« ) der Datenstrom belauscht werden soll. Anschließend leitet PF alle TCP-Daten, die über das externe Interface an Port »Port« gesandt werden, an die IP-Adresse der Jail (»$nat_jail« ) um. Damit die Daten auch ungehindert durch den Paketfilter fließen, wird mit »pass« ein Kanal freigeschaltet.

Bei IPFW ist die Sache umfangreicher. Es müssen das IPFW-Skript und NAT-Regeln für den NAT-Daemon erstellt werden. Die Regeln für den NAT-Daemon (»natd« ):

# NAT-Regeln fuer natd
# /etc/natd.conf
# =================
redirect_port tcp <Jail-IP>:<Port 1> <Port 1>
redirect_port tcp <Jail-IP>:<Port 2> <Port 2>

Damit IPFW im System verfügbar ist, müssen diverse Optionen im Kernel aktiviert sein. Dazu ist es ratsam, sich die einschlägige Literatur wie beispielsweise das sehr gute Handbuch durchzulesen. Damit alles lesbarer ist, setzt man eine Variable: »fwcmd="/sbin/ipfw -f"« Dann muss auch hier wieder der Datenverkehr, der über das Interface tun0 führt, für den NAT-Daemon zugänglich gemacht werden. Die folgende Regel sollte eine der ersten Angaben im Skript sein:

${fwcmd} add divert natd all from any to
  any via tun0

Damit keiner über den umgeleiteten Datenstrom Schaden anrichten kann, folgt eine weitere Regel:

${fwcmd} add allow tcp from any to any
  <Port> setup keep-state
 @KL: Die letzte Regel sollte immer sein:
${fwcmd} add deny ip from any to any

Nach dem Einlesen des Konfiguration bei PF oder dem Ausführen des Skripts für IPFW werden die Regeln aktiv. Zu jeweiligen Konfiguration sei dringend auch die Dokumentation zu Tools empfohlen.

F Abbildung 2: Server mit Diensten in einer Jail.
G Abbildung 3: Datenbank-Server mit WWW-Anbindung.

Wichtige Flags für Jails

Wichtige Flags für Jails

Für Jails gibt es sechs MIBs (Management Information Base), die nur vom Hostsystem aus geändert werden dürfen, und zwei Parameter lassen sich vom Root-User innerhalb der Jail manipulieren. Die Flags werden mittels »sysctl« gesetzt: »sysctl -w $MIB=0 oder sysctl -w $MIB=1. Mit sysctl $MIB« lässt sich der aktuelle Status erfragen. Zuerst die MIBs, die vom Hostsystem geändert werden dürfen und sich auf alle Jails gleichermaßen auswirken:

Innerhalb einer Jail dürfen zwei MIBs geändert werden, sofern dies erlaubt wurde!

Bezeichnung der MIB

Erklärung

Standard

Soll

security.jail.set_hostname_allowed

Der root-User darf innerhalb einer Jail den Hostnamen mit hostname(1), sethostname(3) oder mit dem MIB kern.hostname ändern.Die Jail nutzt den Hostnamen, um mit dem Hauptsystem in Verbindung zu bleiben. Daher sollte dieser Parameter immer auf "0" gesetzt sein.

1

0

security.jail.socket_unixiproute_only

Diese MIB entscheidet, ob die Kommunikation der Jail über IP kommuniziert, oder über UNIX-Sockets. Letzteres ist als gefährlich einzustufen, da dies ein Loch in das Konzept reißen würde.

1

1

security.jail.sysvipc_allowed

Falls dieses Flag gesetzt ist, ist eine Kommunikation mit Prozesses außerhalb der Jail über mittels System V IPC (Interprocess communication) möglich. Es gibt Datenbanken, die ein gesetztes Flag unbedingt benötigen. Aber Vorsicht!

0

0

security.jail.allow_raw_sockets

Diese MIB erlaubt es, innerhalb einer Jail die sogenannten raw-sockets zu verwenden. Damit ist es unter anderem möglich, Tools wie ping(8) oder traceroute(8) zu verwenden. Es ist aber auch zu berücksichtigen, dass die raw-sockets auch vom Netzwerk-Subsystem verwendet werden!

0

0

security.jail.getfsstatroot_only

Damit lässt sich einstellen, ob User innerhalb einer Jail alle Mount-Points sehen können oder nicht.

1

1

security.jail.chflags_allowed

Diese MIB kontrolliert, ob ein privilegierter User, die File-Flags (chflags(8)) ändern darf, oder nicht.

0

0

Bezeichnung des MIBs

Erklärung

Standard

Soll

kern.hostname

Falls im Hostsystem security.jail.set_hostname_allowed = 1 ist, dann kann innerhalb der Jail der Jail-Hostname geändert werden.

1

0

kern.securelevel

Die Jail kann ebenso wie der Host mit verschiedenen Securelevels arbeiten.

-1

Infos

  1. J. Dankoweit: FreeBSD Installieren – Konfigurieren – Administrieren, (Hrsg.), C&L-Verlag
  2. FreeBSD-Handbuch (online): http://www.freebsd.org/doc/de_DE.ISO8859-1/books/handbook/index.html
  3. Evi Nemeth et al.: UNIX-Systemverwaltung , Markt&Technik
  4. Evan Sarmiento: The Jail Subsystem: http://www.freebsd.org/doc/en_US.ISO8859-1/books/arch-handbook/jail.html
  5. Poul-Henning Kamp: Jails: Confining the omnipotent root
  6. Kirk McKusik: The Design and Implementation of the FreeBSD Operating System, Chapter 4: The Jail Facility in FreeBSD 5.2
  7. man-pages: jail(8), jexec(8), jls(8), killall(1), ipfw(8), ezjail-admin(1), mount_nullfs(8)
  8. Englischsprachiges BSD-Forum: http://www.bsdforums.org
  9. Handbuch zum Paketfilter PF: http://www.openbsd.org/faq/pf/de/index.html
  10. ISC-DHCP-Daemon: http://www.isc.org/index.pl
  11. Postfix-MTA: http://www.postfix.org
comments powered by Disqus
Mehr zum Thema

FreeBSD Jails mit Raspberry

FreeBSD und Raspberry Pi bilden ein starkes Team. Das bekannteste Sicherheitsmerkmal von FreeBSD sind Jails. Sie bieten auch auf der Raspberry-Plattform ein Plus an Sicherheit.

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2021