FB-jail
FreeBSD12 Jail
作成
## fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/12.2-RELEASE/base.txz wget -e HTTP_PROXY=http://127.0.0.1:18080/ http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/12.2-RELEASE/base.txz http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/13.4-RELEASE/ tar -zxpf ./base.txz -C /home/jail/a tar -zxpf ./base.txz -C /home/jail/b
作成出来たか確認 $ mount -t devfs devfs /home/jail/a/dev $ mount -t devfs devfs /home/jail/a/dev
update
Prisoner が先 Jailer があと
削除
$ service jail stop aaa $ $ chflags -R noschg /home/jail/aaa/* $ cd /home/jail $ rm -rf ./aaa
/etc/rc.conf
# jail jail_enable="YES" jail_list="aaa bbb" 追加
/etc/jail.conf
################ vnet = "new"; ################ aaa { jid=1; name=aaa; path=/home/jail/a; ip4.addr=192.168.12.201; host.hostname=prisoner1.jail.green.local; allow.chflags; allow.raw_sockets; exec.start="/bin/sh /etc/rc"; exec.stop="/bin/sh /etc/rc.shutdown"; interface=re0; mount.devfs; devfs_ruleset=4; } bbb { jid=2; name=prisoner; path=/home/jail/b; ip4.addr=192.168.12.202; host.hostname=bbb.jail.green.local; allow.chflags; allow.raw_sockets; exec.start="/bin/sh /etc/rc"; exec.stop="/bin/sh /etc/rc.shutdown"; interface=re0; mount.devfs; devfs_ruleset=4; }
調整
## コンソールのメッセージを止める vi /home/jail/a/etc/syslog.conf vi /home/jail/b/etc/syslog.conf ## *.err;kern.warning;auth.notice;mail.crit /dev/console
vi /home/jail/a/etc/crontab vi /home/jail/b/etc/crontab ## 時計を止める # 1,31 0-5 * * * root adjkerntz -a
# Host名の設定 vi /home/delegate/jail/a/etc/hosts vi /home/delegate/jail/b/etc/hosts
# bsdconfig & rc.conf の作成 # vi /home/jail/a/etc/rc.conf hostname="pri1.jail.green.local" ## ssh でログインする場合:w sshd_enable="YES" ## /etc/jail.conf に書く場合には以下の行は不要 ## ifconfig_igb1="inet 192.168.12.201 netmask 255.255.255.0 -lro -tso -rxcsum -txcsum " # vi /home/jail/b/etc/rc.conf hostname="pri2.jail.green.local" ## ssh でログインする場合:w sshd_enable="YES"
# uid/gid の重複の禁止 vi /home/jail/a/etc/pw.conf defaultpasswd no minuid 30001 maxuid 39999 mingid 30001 maxgid 39999 vi /home/jail/b/etc/pw.conf defaultpasswd no minuid 40001 maxuid 49999 mingid 40001 maxgid 49999
起動 / 停止
$ /etc/rc.d/jail start $ /etc/rc.d/jail stop # ifconfig bge0 alias 192.168.250.10/32 # service jail start test00
個別に service jail start aaa service jail start bbb
コマンド
jls :稼動中のprisonerの一覧表示 jexec:jailerからprisonerに遷移 jexec 1 /bin/csh aaa ( jid 1 )で CSH を起動
jail を起動したままだと UTC なので
# jexec 1 /bin/csh # # tzsetup Asia/Tokyo ## timezone を tokyo に
仮想ネットワーク
仮想ネットワーク FB-jail -vnet を参照する 以下の部分はメモ
FreeBSD には epair という仮想ネットワークI/F が存在し、仮想的なイーサネットケーブルとしての役割を果たします。 これは、 ifconfig epair create というコマンドを叩くことで作成可能で、作成すると epair0a, epair0b というように a と b の2つのデバイスが一対となって作成されます。これをホストや Jail に割当てることで通信が可能になります。 具体的には、ifconfig epair0a vnet jail01 というコマンドを叩くことで、jail01 という Jail に epair0 の a側 (一方) を割り当てることができます。 この結果を確認するためには、 jail01 上で ifconfig を叩く必要があります。 Jail 上でのコマンド実行は jexec というコマンドを用います。使い方は jexec [jid] [command...] です。 jail01 上で ifconfig を叩く、という場合は、 jexec jail01 ifconfig というようになります。 ここまでが分かれば、トポロジ図にて与えられたネットワークアドレスからIPアドレスを適当に割り当てることで1:1 の通信が可能になります。
ifconfig epair0 create ## ifconfig epair0a destroy
#!/bin/tcsh # ################ # vnet = "new"; ## jail.conf に vnet="new"を追加のこと ################ # sysctl設定 IP転送を有効にする /sbin/sysctl -w net.inet.ip.forwarding=1 # NIC設定 HW機能等を無効化 ifconfig igb0 -rxcsum -rxcsum6 -txcsum -txcsum6 -lro -tso4 -tso6 -vlanhwtso ifconfig igb1 -rxcsum -rxcsum6 -txcsum -txcsum6 -lro -tso4 -tso6 -vlanhwtso # epairデバイス作成 ifconfig epair0 create ifconfig epair1 create ifconfig epair2 create # ホスト側でブリッジインターフェイス作成 ifconfig bridge0 create ifconfig bridge0 addm epair0a addm epair1a addm epair2a addm igb1 up ifconfig bridge0 inet 192.168.1.254/24 up # ルート設定 route add default 192.168.1.1 # DNS設定 echo 'nameserver 9.9.9.9' > /etc/resolv.conf # コンテナというかJail(ms001)起動 /usr/local/bin/qjail start ms001 # hostからms001へNICを割当て。ifconfig [interface_name] vnet [jid]で割当できる。 # [jid]はJailに割り当てられるIDで、1から順次割当て ifconfig epair0b vnet 1 # Jail(ms001)内でコマンド実行(jexec [jid] [command]) jexec 1 ifconfig epair0b up jexec 1 ifconfig epair0b inet 192.168.1.131/24 up jexec 1 route add default 192.168.1.1 jexec 1 echo 'nameserver 9.9.9.9' > /etc/resolv.conf # コンテナというかJail(ms002)起動 /usr/local/bin/qjail start ms002 # hostからms001へNICを割当て。ifconfig [interface_name] vnet [jid]で割当できる。 # [jid]はJailに割り当てられるIDで、1から順次割当て ifconfig epair1b vnet 2 # Jail(ms002)内でコマンド実行(jexec [jid] [command]) jexec 2 ifconfig epair1b up jexec 2 ifconfig epair1b inet 192.168.1.132/24 up jexec 2 route add default 192.168.1.1 jexec 2 echo 'nameserver 9.9.9.9' > /etc/resolv.conf # コンテナというかJail(ms003)起動 /usr/local/bin/qjail start ms003 # hostからms001へNICを割当て。ifconfig [interface_name] vnet [jid]で割当できる。 # [jid]はJailに割り当てられるIDで、1から順次割当て ifconfig epair2b vnet 3 # Jail(ms002)内でコマンド実行(jexec [jid] [command]) jexec 3 ifconfig epair2b up jexec 3 ifconfig epair2b inet 192.168.1.133/24 up jexec 3 route add default 192.168.1.1 jexec 3 echo 'nameserver 9.9.9.9' > /etc/resolv.conf
Tips
https://www.atmarkit.co.jp/ait/articles/1207/20/news153_2.html
https://www.kishiro.com/FreeBSD/jail.html
https://qiita.com/Chun3/items/4b11b9acdd080ecdab6c
http://freebsdnoki.blogspot.com/p/jail.html