#!/bin/sh ################################################################################ # https://docs.freebsd.org/de/books/handbook/book/index.html#jails-ezjail # # Die meisten Netzwerkdienste laufen problemlos in einer Jail. # Ein paar wenige Netzwerkdienste, vor allem ping(8) verwenden Netzwerk-Sockets. # Aus Sicherheitsgründen werden Netzwerk-Sockets innerhalb der Jails # deaktiviert, so dass Dienste, die diese Sockets benötigten, # nicht funktionieren werden. ################################################################################ if [ x == "x${2}" ] ; then echo "${0} [Jail-Name] [Jail-IP]" echo "${0} testjail 192.168.10.10" echo "${0} testjail 10.10.10.10" exit 1 fi JAIL_NAME="${1}" JAIL_IP="${2}" echo " JAIL_NAME: ${JAIL_NAME} JAIL_IP: ${JAIL_IP} " JAIL_DIR="/usr/jails" JAIL_CMD="$(which ezjail-admin)" if [ x == "x${JAIL_CMD}" ] ; then echo "... ggf. muß ezjail vorher noch installiert werden:" echo "> cd /usr/ports/sysutils/ezjail && make clean install clean" echo "> ezjail-admin update -b" exit 1 fi JLS_NAME="$(jls name | grep -E "^${JAIL_NAME}$")" if [ x != "x${JLS_NAME}" ] ; then echo "Eine Jail mit diesem Namen läuft bereits." echo "so kannst Du sie betreten:" echo "> ezjail-admin console ${JAIL_NAME}" exit 1 fi IFCONFIG_IP="$(ifconfig -a | grep -F "inet ${JAIL_IP} netmask")" if [ x != "x${IFCONFIG_IP}" ] ; then echo "Die IP existiert schon." exit 1 fi HOST_BASIS_RELEASE="$(uname -r | sed 's/[-]p.*//')" echo "OS-Release: ${HOST_BASIS_RELEASE}" ### die neue Jail bauen # "lo1" sollte schon eingerichtet sein: # > echo 'cloned_interfaces="lo1"' >> /etc/rc.conf # > service netif cloneup # Created clone interfaces: lo1. # #ezjail-admin create ${JAIL_NAME} "lo1|127.0.1.1,${NIC_ALIAS}|${JAIL_IP}" # NIC_ALIAS="$(cat /etc/rc.conf | grep -E 'ifconfig_[a-z0-9]+="inet ' | grep -Fv bridge | head -n1 | awk -F'=' '{print $1}' | awk -F'_' '{print $2}')" ifconfig ${NIC_ALIAS} alias ${JAIL_IP}/32 ezjail-admin create ${JAIL_NAME} ${JAIL_IP} # cp /etc/resolv.conf /etc/localtime /etc/make.conf "${JAIL_DIR}/${JAIL_NAME}"/etc/ ls -lha "${JAIL_DIR}/${JAIL_NAME}"/etc/resolv.conf "${JAIL_DIR}/${JAIL_NAME}"/etc/localtime "${JAIL_DIR}/${JAIL_NAME}"/etc/make.conf jls ### die neue Jail starten ezjail-admin start ${JAIL_NAME} echo " Um diese Jail nach dem nächsten reboot erneut starten zu können, ist das folgende Kommando nötig. Allerdings ist die Nummer von 'alias0' entsprechend richtig zu setzen: > echo 'ifconfig_${NIC_ALIAS}_alias0="inet ${JAIL_IP}/32"' >> /etc/rc.conf einloggen in die neue Jail: > ezjail-admin console ${JAIL_NAME} die neue Jail auf den neuesten Stand bringen: > ezjail-admin update -b \"${JAIL_DIR}/${JAIL_NAME}\" fetch install die neue Jail wieder löschen: > ezjail-admin stop ${JAIL_NAME} ggf. von Hand eingerichtete Bind-Mounts entfernen... > ezjail-admin delete -w ${JAIL_NAME} > service netif restart "