Jails sind eine Besonderheit von FreeBSD. Man kann es vielleicht als Mischung aus chroot und Virtualisierung bezeichnen. Hierbei wird im Grunde die Verzeichnisstruktur von FreeBSD nachgebildet und die nötigen Dateien verknüpft. Man kann so Dienste voneinander abgrenzen und die Systemsicherheit erhöhen.

EzJail ist ein tolles Tool mit dem sich Jails auf einfachste Art und Weise einrichten und administrieren lassen. In diese Jails werden wir später unseren Mail- und Webserver installieren. Zudem werden wir in jeder Jail den SSH-Dienst laufen lassen, sodass wir uns die etwas komplizierte Handhabung vom Hostsystem aus sparen können. Was auch ein interessantes Feature ist, dass man sogenannte "Flavours" anlegen kann, die als Vorlage für anderen Jails dienen können. So kann man bspw. eine Vorlage für Webserver-Jails erstellen usw. Im Gegensatz zur Basisjail werden die Daten aus Flavours nicht gemeinsam verwendet.

  1. Als erstes müssen wir unserem Interface weitere IP-Adressen zuweisen. Über diese internen IP-Adressen können diese später erreicht werden. Wir haben diese ja bereits bei unseren Firewall-Regeln berücksichtigt. Um nun unserem Interface IP-Adressen zu zuweisen, tragen wir folgendes in unsere '/etc/rc.conf' ein:
    ifconfig_lnc0_alias0="10.10.10.1/32"
    ifconfig_lnc0_alias1="10.10.10.2/32"
  2. Du kannst nun entweder den Server neustarten um die IPs zu zuweisen oder du führst diese Befehle zusätzlich einmal von Hand aus, das sieht dann so aus:

    # ifconfig lnc0 10.10.10.1/32 alias
    # ifconfig lnc0 10.10.10.2/32 alias

  3. Wir müssen uns jetzt erstmal den Quelltext von FreeBSD besorgen um die Jails zu bilden. Hierfür brauchen wir ein  Programm, dass wir mit folgendem Befehl installieren:

    # cd /usr/ports/net/cvsup-without-gui/ && make install clean

  4. Jetzt müssen wir das Programm noch konfigurieren, was allerdings wirklich kein Problem darstellen dürfte. Wir führen dazu folgende Befehle aus:

    # mkdir /etc/cvsup
    # cp /usr/share/examples/cvsup/standard-supfile /etc/cvsup/source-supfile

    Wir müssen diese Datei jetzt, nachdem wir sie an die richtige Stelle kopiert haben, noch anpassen. Folgende Zeile muss geändert werden:

    *default host=CHANGE_THIS.FreeBSD.org auf
    *default host=cvsup.de.FreeBSD.org

    Dann ändern wir noch folgende Zeile:
    *default compress auf
    #*default compress


  5. Nach dem Abspeichern müssen wir natürlich das Verzeichnis '/usr/src' aktualisieren, das machen wir mit cvsup :

    # cvsup /etc/cvsup/source-supfile

  6. Jetzt installieren wir EzJail mit folgendem Befehl:

    # cd /usr/ports/sysutils/ezjail/ && make install clean

  7. Wir müssen nun EzJail erstmal konfigurieren. Das machen wir in der Datei '/usr/local/etc/ezjail.conf'. Die Kommentare erklären eigentlich alles, daher will ich das hier nicht nochmal wiederholen.
  8. Wir erstellen nun die Basisjail, die später in alle anderen Jails eingebunden wird. Das dauert, also besorgt euch ein gutes Buch oder nen Film oder nen Kaffee oder zwei oder drei

    # ezjail-admin update -b

    Mit diesem Befehl müssen wir auch später die Basisjail updaten, wenn wir das Betriebssystem upgedatet haben.

Jetzt konnen wir eine Jail Anlegen

  1. Bevor wir aber nun die erste Jail erstellen, müssen wir verhindern, dass andere Dienste auf die IP der neuen Jail hören. Da wir über ein frisch aufgesetztes System verfügen, müssen wir jetzt lediglich den syslog-Dienst (syslogd) binden. Das machen wir über folgende Einträge in der '/etc/rc.conf':

    syslogd_flags="-ss"
  2. Jetzt erstellen wir die erste Jail, in der wir später den webserver installieren. Achte bitte darauf "www1" durch einen Namen deiner Wahl zu ersetzen und ebenso die IP-Adresse an die, die du im ersten Schritt als Alias vergeben hast.

    # ezjail-admin create www1 10.10.10.1

    Die Jails werden standardmäßig im Verzeichnis '/usr/jails/' angelegt. Daher liegen die Konfigurationsdateien auch im entsprechenden Unterverzeichnis.

  3. Jetzt wird erstmal gemeckert, dass noch verschiedene Dienste auf allen Ports und IPs lauschen, also auch auf der der Jail. Das liegt noch an unserem syslog-Dämon, aber ist für den Moment nicht so schlimm. Als nächstes müssen wir die Datei '/usr/jails/www1/etc/resolv.conf' anlegen. Diese kannst du entweder in einem Flavour anlegen, sodass du bspw. unterscheidest zwischen Online-Jails und Offline-Jails, oder du bindest sie in deine Basisjail ein. Schreibe einfach folgendes in diese Datei:

    nameserver 8.8.8.8
    nameserver 8.8.4.4

    Hinweis: Welchen Nameserver du hier einträgst hängt davon ab, wo der Server steht. Wenn er Teil deines privaten Netzwerkes zuhause ist, dann ist das in der Regel die IP deines Routers. Steht der Server irgendwann in einem Rechenzentrum, dann kann das der Nameserver von deinem Serviceprovider sein, oder, das gilt sowohl für den Rechenzentrumsbetrieb als auch den Betrieb des Servers zuhause, es ist dein eigener Nameserver, der bspw. in einer anderen Jail läuft.

  4. In der Datei '/usr/jails/www1/etc/rc.conf' tragen wir nun noch als Gateway die IP des Hostsystems ein:

    defaultrouter=""

    bei mir wäre es nicht in der config (ich route alles über die Firewall)

  5. jetzt kann man noch den SSH Dienst Aktevieren bei bedarf muss man aber nicht...

    sshd_enable="YES"

    Alternativ kannst du aber auch sshd_enable auf "NO" setzen, dann kannst du den SSH-Server nicht starten. Dennoch kannst du vom Hostsystem aus auf der Shell arbeiten. Das machst du einfach über folgenden Befehl (die JID kriegst du über den Befehl 'jls'):

    # ezjail-admin console www1

  6. So, bevor wir jetzt unsere erste Jail starten, müssen wir in der 'rc.conf' des Hostsystems angeben, dass bzw. ob alle Jails beim Systemstart gestartet werden sollen. Das bewirkt folgender Eintrag in der rc.conf:

    ezjail_enable="YES" 

    jetzt können wir ezjail starten, das machen wir mit dem befehl:

    # /usr/local/etc/rc.d/ezjail.sh start

  7. Hier nochmal meine ganze rc.conf von meiner JAIL, hier ist zu beachten das ich sendmail komplett noch deakteviert habe..

    # Miscellaneous Configuration
    network_interfaces="lo0"
    kern_securelevel_enable="YES"
    kern_securelevel="1"
    rpcbind_enable="YES"
    cron_flags="$cron_flags -J 15"
    syslogd_flags="-ss"
    clear_tmp_enable="YES"
    
    ## Mail Config
    sendmail_enable="NO"                    # Disable Sendmail
    sendmail_submit_enable="NO"             # Disable sendmail submit
    sendmail_outbound_enable="NO"           # Disable sendmail outbound
    sendmail_msp_queue_enable="NO"          # Disable sendmail msp queing
    
    sshd_enable="NO"

Wie man eine Jail Löschen kann.

  1. Deaktivieren einer Jail:
    Mit dem Befehl

    # ezjail-admin delete Jailname

    kannst du eine Jail deaktivieren. Der Inhalt der Jail wird also nicht gelöscht. Aktivieren kannst du sie dann wieder indem du eine neue Jail mit dem gleichen Namen erstellst. Eine andere IP kannst du dann bspw. über den Parameter '-x' angeben. Näheres dazu auf der Internetseite von EzJails.

  2. Löschen einer Jail: Mit dem Befehl

    # ezjail-admin delete -w Jailname

    kannst du die Jail komplett von der Festplatte löschen. Du kannst allerdings auch erst die Jail deaktivieren, wichtige Daten sichern und dann das Verzeichnis mit dem Befehl

    # rm -R /usr/jails/

    löschen.

    Achtung: Evtl. hast du in der ezjail.conf den Pfad geändert, den müsstest du natürlich anpassen.

Der Portstree für die Jail

    1. Melde dich an der neuen Jail an und lösche den Symlink '/usr/ports':

      # rm /usr/ports

    2. Erstelle nun ein Verzeichnis anstelle des Symlinks, also '/usr/ports':

      # mkdir /usr/ports

    3. Melde dich jetzt am Hostsystem an und mounte per 'mount_nullfs' das Verzeichnis '/usr/ports' nach '/jails/jailname/usr/ports':

      # mount_nullfs /usr/ports /jails/jailname/usr/ports

    4. Jetzt müssen wir, da wir den Portstree aus Sicherheitsgründen nur "read-only" mounten, noch ein paar Änderungen in der Datei "/etc/make.conf" der Jail vornehmen. Trage hier folgende Zeilen ein bzw. ändere vorhandene Zeilen ab, sofern ezJail diese Anpassungen nicht schon für dich vorgenommen hat:
      DISTDIR = /tmp/distfiles
      PACKAGES = /usr/ports/packages
      WRKDIRPREFIX = /usr/obj

 

 

Informationen zur Quelle: ServerZeit Informationen wurden nach meinen erfahrungen geändert, nur die grund informationen sind erhalten geblieben, das buch von Serverzeit ist auch zu emfehlen es bietet viele informationen zum Lerrnen.. 


Sie k?nnen keine Kommentare abgeben!