トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

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

Tips 0000