FreeBSD 11.1でのJailの構成

はじめに



インターネット上のFreBSDの刑務所管理に関する情報がほとんどないという事実により、私はこの出版物を書くことを奨励されました。 確かにこの主題に関する素晴らしい出版物を見つけることができますが、それらはほとんど何年も前に書かれたものであり、Jailの新機能とFreeBSDオペレーティングシステム自体には影響しません。

出版物を2つの部分に分けます。 最初の部分はFreeBSDの準備と設定に焦点を当て、2番目の部分はJailの作成に焦点を当てます。



パート1. FreeBSDの準備と設定。



ここに書かれたすべてが正しく機能するためには、FreeBSDバージョン11.1を使用する必要があります。このバージョンから、システムはディスクI / Oの制限などのサポートを含むためです。 これが不要な場合は、バージョン10.Xが適しています。

rc.confにいくつかのパラメーターを追加します。



sysrc jail_enable="YES" sysrc rctl_enable="YES" sysrc rctl_rules="/etc/rctl.conf" sysrc zfs_enable="YES" sysrc ifconfig_em0_alias="192.168.1.105/24"
      
      





1行目はシステムで自動的に起動するようにJailに指示し、2行目はJailの制限を含めることを示し、3行目は制限付きのルールファイルを示します。 4行目は、ZFSファイルシステムを使用する機能をアクティブにします(すべてのJailはZFSパーティションに保存されます)。システムがネイティブUFSファイルシステムを使用する場合、このパラメーターが必要です。 次のコマンドでZFSを起動できます。



 /etc/rc.d/zfs start
      
      





5行目では、複数のJailが必要な場合、Jailのエイリアスを作成し、必要な数のipエイリアスを追加します(VMware ESXIを使用しているため、ネットワークカードの名前はem0であるため、カードの名前を使用する必要があります)。

FreeBSDでは、デフォルトで、カーネルはリソースを制限する機能を無効にして構築されていますが、幸いなことにこの制限は簡単に削除でき、次のコマンドでloader.confファイルに1行追加するだけです。



 echo 'kern.racct.enable="1"' >> /boot/loader.conf
      
      





変更は、システムの再起動後に有効になります。 iscsiプロトコルのサポートを有効にする必要もあります。バックアップはこのプロトコルを介して正確に実行されるため、次のコマンドでサポートを追加できます。



 echo 'iscsi_initiator_load="YES"' >> /boot/loader.conf
      
      





変更は、システムの再起動後に有効になります。

システムで最後に構成する必要があるのは(Jail自体を除く)ipfwのファイアウォールです。 次のコマンドは、ipfwルールを含むファイルを作成します。



 ee /etc/firewall.sc
      
      





このファイルには次の行を入力する必要があります。



 ipfw -q -f flush c="ipfw -q add " $c 00105 allow tcp from any to 192.168.1.105 80 setup keep-state $c 00110 allow tcp from any to me 22 setup keep-state $c 00140 allow tcp from me to any 443,80,21,53,3260 setup keep-state $c 00143 allow icmp from me to any keep-state $c 00144 allow udp from me to any 53 keep-state $c 40533 deny all from any to any frag $c 40534 deny all from any to any established $c 40535 deny all from any to any
      
      





これらのルールにより、すべてのJailはポート443、80、21、53、3260(iscsi)を介して発信接続を行うことができ、SSHを介してすべてのJailに接続することも可能になります。 行:



 $c 00105 allow tcp from any to 192.168.1.105 80 setup keep-state
      
      





将来のJailへの接続は、特にWebサーバーに対して責任があります。他のポートを追加する必要がある場合は、それらをコンマ(80,21,443,68など)で区切って指定します。 udpに接続する必要がある場合、udpプロトコルにはSYNフラグがないため、行をコピーしてtcpをudpに置き換え、行番号を変更し、セットアップを削除する必要があります。



 $c 00105 allow tcp from any to 192.168.1.105 80,21,22,443 setup keep-state $c 00106 allow udp from any to 192.168.1.105 53 keep-state
      
      





次のコマンドを順番に実行します。



 sysrc firewall_enable="YES" sysrc firewall_script="/etc/firewall.sc" service ipfw start
      
      





これらのコマンドを実行した後、ほとんどの場合、SSH経由で再接続する必要があります。 この初期セットアップは完了しました。iscsiターゲットサーバーの構成に移りましょう。



iSCSIターゲットの構成

構成するには、ネットワーク上の別のサーバーまたは仮想マシン(私の場合のように)が必要です。

iscsiターゲットを設定するには、ctld(FreeBSDの一部)を使用し、rc.confにエントリを追加します。



 sysrc ctld_enable="YES"
      
      





次のステップは、ctldの構成ファイルを作成することです。



 ee /etc/ctl.conf
      
      





作成したファイルに行を追加します。



 auth-group group1 { chap "user" "password1234" } portal-group pg0 { discovery-auth-group group1 listen 192.168.1.106:3260 } target iqn.iscsi:target1 { alias "Example target" auth-group group1 portal-group pg0 lun 0 { path /dev/md0 size 10G } }
      
      





chap行で、必要な名前とパスワード(少なくとも12文字)を指定します。 役職

ターゲット行では、必ずiqnで開始する必要があります。 listen行で、現在のサーバーのIPアドレスを指定します。 パス行で、ディスクへのパスを指定します。

物理ディスクを使用する場合は仮想ハードディスクがここに示され、それを指定し、仮想ハードディスクを使用する場合は先に進みます。 仮想ハードディスク用のファイルを作成するディレクトリに移動して、コマンドを実行します。



 dd if=/dev/zero of=disk bs=1k count=10m
      
      





countパラメーターはギガバイト数に責任があります。この場合、異なる数値を指定すると10ギガバイトのファイルが作成されます。この場合、ctl.confでLUN 0パラメーターを変更する必要があります。 データ処理にかかる時間は比較的わずかです。 プロセスが完了すると、ディスクファイルが現在のフォルダーに作成され、コマンドで仮想ハードディスクを作成するためにのみ残ります。



 mdconfig -a -t vnode -f disk
      
      





このコマンドを実行した後、仮想ディスクの名前が表示されます(私の場合-md0)。名前が異なる場合は、ctl.confのLUN 0パラメーターも変更する必要があります。 再起動後にこのドライブが消えないようにするには、次のコマンドを実行する必要があります。



 sysrc mdconfig_md0="-a -t vnode -f disk"
      
      





または、ファイルへのパスを指定します。



 sysrc mdconfig_md0="-a -t vnode -f /home/user/disk"
      
      





ワンタッチ左-ファイアウォールがあります。 メインシステムと同様に、ファイルを作成します。



 ee /etc/firewall.sc
      
      





行を追加します。



 ipfw -q -f flush c="ipfw -q add " $c 00110 allow tcp from any to me 22,3260 setup keep-state $c 00140 allow tcp from me to any 443,80,21,53,3260 setup keep-state $c 00143 allow icmp from me to any keep-state $c 00144 allow udp from me to any 53 keep-state $c 40533 deny all from any to any frag $c 40534 deny all from any to any established $c 40535 deny all from any to any
      
      





変更を保存したら、次を入力します。



 sysrc firewall_enable="YES" sysrc firewall_script="/etc/firewall.sc" service ipfw start
      
      





これでiscsiサーバーの構成が完了しました。次に、Jailを直接構成します。



パート2.刑務所の構成



FreeBSD 9以降、Jail設定は別のファイル/etc/jail.confに移動しました。 このファイルを作成し、必要な変更を加えて、コマンドを入力しましょう。



 ee /etc/jail.conf
      
      





このファイルには次の行を入力する必要があります。



  allow.raw_sockets = 1; exec.clean; exec.start = "/bin/sh /etc/rc"; exec.stop = "/bin/sh /etc/rc.shutdown"; mount.devfs; allow.set_hostname = 1; allow.sysvipc = 1; jail1 { host.hostname = "jail"; path = "/jails/1/"; interface = "em0"; ip4.addr = 192.168.1.105; }
      
      





変更を保存したら、Jail環境の構築を開始できます。 このファイルによると、jail1という名前の単一のJailが使用されます。追加のJailを使用する必要がある場合は、ファイルの外観を次のように変更します。



 allow.raw_sockets = 1; exec.clean; exec.start = "/bin/sh /etc/rc"; exec.stop = "/bin/sh /etc/rc.shutdown"; mount.devfs; allow.set_hostname = 1; allow.sysvipc = 1; jail1 { host.hostname = "jail"; path = "/jails/1/"; interface = "em0"; ip4.addr = 192.168.1.105; } jail2 { host.hostname = "jail"; path = "/jails/2/"; interface = "em0"; ip4.addr = 192.168.1.107; }
      
      





この出版物では、単一の刑務所の作成について説明します。 次のコマンドを使用して、将来の刑務所用のディレクトリを作成します。



 mkdir -p /jails/1
      
      





環境を作成するには、「ソース」が必要です。システムのインストール中にそれらをインストールするか、Subversionを使用するのが最も簡単です(かなり不快なプロセス)。 環境を作成するには、次のコマンドを使用して/ usr / srcディレクトリに移動します。



 cd /usr/src
      
      





環境を作成するには、次のコマンドを入力します。



 make -j4 world DESTDIR=/jails/1
      
      





このプロセスは非常に長く、Intel Core i5 3550プロセッサーがシステムにインストールされているため、環境の作成には約1時間かかりました。 -j4パラメーターは、環境コマンドの作成に使用されます;数字は、プロセッサー内のコアの数を示します;より多く、より高速です。 環境が作成されたら、次のコマンドを使用して構成ファイルをjailに追加する必要があります。



 make distribution DESTDIR=/jails/1
      
      





これで、環境の作成が完了しました。 次のコマンドを入力します。



 /etc/rc.d/jail start
      
      





sshが無効になっているため、sshを介して新しく作成されたJailに接続する可能性はありません。 jailを入力するには、次のコマンドを実行します。



 jexec jail1
      
      





最初に行うことは、DNSサーバーを追加することです。



 ee /etc/resolv.conf
      
      





作成したファイルに次の行を追加します。



 nameserver 8.8.8.8
      
      





アカウントを追加(wheelグループに追加)し、rootパスワードを作成し、sshを実行します。これはすべてコマンドで実行できます。



 adduser sysrc sshd_enable="YES" service sshd start passwd root
      
      





真夜中の司令官をインストールすることをお勧めします:



 pkg install mc
      
      





mcのインストール中に、python、perlなどの多くの一般的な依存関係が追いつきます。 これらの操作を実行した後、exitコマンドで指定されたjailを終了する必要があります。 次に、刑務所を停止します。



 /etc/rc.d/jail stop
      
      





5つの刑務所を作成する必要がある状況を想像してください。このようなタスクには多くの時間がかかりますが、幸いなことに、この刑務所の内容でアーカイブを作成し、ファイルのすべての権限を保存できます。 この状況では、tarアーカイバが役立ちます。 jailでディレクトリに行きましょう:



 cd /jails/1
      
      





次のコマンドを実行します。



 tar -zcvpf jail.tar *
      
      





アーカイブを作成したら、別のディレクトリに移動する必要があります(このディレクトリは削除されます)。



 mv jail.tar /jail.tar
      
      





/ jailsディレクトリは、「不変」フラグがすべてのファイルから削除されるまで削除できません。



 chflags -R noschg /jails rm -rf /jails/
      
      





何かが消えない場合は、システムを再起動してrm -rfコマンドを再度実行するだけです。 仮想ハードディスクの作成を開始し、ディスク用のファイルを作成しましょう。



 dd if=/dev/zero of=disk bs=1k count=10m
      
      





そして、仮想ディスク自体を直接:



 mdconfig -a -t vnode -f disk
      
      





自動ディスク作成を追加します。



 sysrc mdconfig_md0="-a -t vnode -f disk"
      
      





作成したディスクの名前(名前が異なる場合)と、仮想ディスクのファイルへのパスを指定します。 次のステップは、iscsiを介してドライブを自動的に接続することです。 ドライブに正しく接続するには、構成ファイルを作成する必要があります。



 ee /etc/iscsi.conf
      
      





このファイルに次の変更を加えます。



 iscsi_disk{ authmethod=CHAP chapIName=user1 chapSecret=password1234 initiatorname=nxl TargetName=iqn.iscsi:target1 TargetAddress=192.168.1.106:3260,1 LoginTimeout=10 AuthTimeout=10 IdleTimeout=10 ConnFailTimeout=10 AbortTimeout=10 ResetTimeout=10 }
      
      





ctl.confファイルの設定がこの資料に従って設定されている場合、接続は正しく行われます。 iscsiを介してディスクを自動的に接続できる唯一の方法は、スクリプトをrc.dに配置することによってのみ見つかりました。 このスクリプトを作成します。



 ee /etc/rc.d/iscsi.sc
      
      





次の行を追加します。



 iscontrol -c /etc/iscsi.conf -n iscsi_disk zfs mount jails/1 /etc/rc.d/jail start
      
      





別のjailを作成した場合、このスクリプトに追加する必要があるという事実を考慮する必要があります(たとえば、zfs mount jails / 2)。 最初の行はiscsiを介してディスクを接続し、2行目はファイルシステムをマウントします(ローカルハードドライブが「落ちる」場合)、3行目はjailを開始します。 ファイルを実行可能にするだけです。



 chmod +x /etc/rc.d/iscsi.sc
      
      





このスクリプトを実行するか、システムを再起動すると、リモートハードドライブを操作できるようになります。 私の場合、ディスクの名前はda1ですが、使用する名前を使用する必要があります。 次の2つのディスクからzfsプールを作成します。



 zpool create jails mirror md0 da1
      
      





チームから推測できるように、zfsプールはミラーリングされます。

jailのセクションを作成します。



 zfs create jails/1
      
      





このディレクトリに5ギガバイトの制限を割り当てます。



 zfs set quota=5g jails/1
      
      





アーカイブをjailから/ jails / 1ディレクトリにコピーして、このディレクトリに移動します。



 cp /jail.tar /jails/1 cd /jails/1
      
      





このアーカイブを解凍して削除します。



 tar -zxvpf jail.tar rm jail.tar
      
      





刑務所を実行する:



 /etc/rc.d/jail start
      
      





これらの操作の後、SSHを介してjailに接続し、サーバーに必要な役割をインストールできます。 刑務所の制限を設定するためにのみ残っています。 rctlを構成するには、構成ファイルを追加するだけです。



 ee /etc/rctl.conf
      
      





このファイルに次の行を追加します。



 jail:jail1:memoryuse:deny=1073741824 jail:jail1:readbps:throttle=4097152 jail:jail1:writebps:throttle=4097152 jail:jail1:pcpu:deny=50
      
      





1行目はメモリの使用を1ギガバイトに制限し、2行目と3行目はディスクへの読み書きの使用を4メガバイトに制限し、4行目は各コアの使用を50%に制限します。 これは制限の完全なリストではありません;ソースのリストでは、FreeBSDウェブサイトへのリンクを示します。 このファイルを保存した後、rctlを再起動する必要があります。



 service rctl restart
      
      





制限は文字通り数秒で有効になります。



オプショナル



これを終了することは可能ですが、障害が発生するのはハードドライブではなく、サーバー自体(たとえば、書き込み)であるような状況が発生する可能性があります。 このような場合、リモートサーバーにあるディスクを使用できますが、使用することはできません。最初に行う必要があるのは、ctldサービスを停止してzfsを有効にすることです。



 service ctld stop sysrc zfs_enable="YES" /etc/rc.d/zfs start
      
      





この後、次のコマンドを入力します。



 zpool import
      
      





このコマンドを実行すると、インポート可能なすべてのプール(この場合はjailsプール)が画面に表示され、ディスク名がmd0で表示されます。 このプールをマウントするには、次のコマンドを実行する必要があります。



 zpool import -f jails jails
      
      





必ず-fを指定してください。指定しないと、zpoolはこのプールが別のサーバーに属していることを誓います。 必要に応じて、このプールを使用してこのサーバーでjailを構成することもできます。これにより、ダウンタイムが最小限に抑えられます。 このドライブをiscsiで再び使用するには、このプールを無効にする必要があります。



 zpool export jails
      
      





また、ctldを実行します。



 service ctld start
      
      





これを行うことができます。



この出版物の執筆に大いに役立ったソースのリスト:

Michael Lucas FreeBSD。 詳細ガイド。

www.freebsd.org/cgi/man.cgi?query=rctl&sektion=8

www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/disks-adding.html

docs.oracle.com/cd/E19253-01/820-0836/gavwn/index.html

www.freebsd.org/cgi/man.cgi?query=ctl.conf&sektion=5&apropos=0&manpath=FreeBSD+11.1-RELEASE+and+Ports



All Articles