Solaris 11.3でのゾーンの構成

はじめに


コンテナ仮想化の最初の紹介は、FreeBSDの刑務所でした。このアプローチは、安全な環境でさまざまなサービスを分離します。 刑務所の欠点は、 ゾーン Solarisとは異なり、独自のネットワークサブシステムを作成する方法がないことです。 この出版物では、独自のネットワークサブシステムを使用したゾーンの作成とゾーンの作成について説明します。

ファイアウォール


「ファイアウォール」として、OpenBSDのパケットフィルターが使用されます。 パケットフィルターを使用して、独自のネットワークサブシステムを持つゾーンからのNATが実装され、グローバルゾーンのネットワーク制限が実装されます。 パケットフィルターをインストールして実行するには、次のコマンドを実行します。

pkg install firewall svcadm enable firewall 

次に、将来のルールでファイルを開きます。

 nano /etc/firewall/pf.conf 

nanoエディターで、次の行を追加します。

 table <good> {192.168.1.105,192.168.1.106} table <nat> {192.168.0.0/24} pass quick on lo0 from any to any no state pass quick on vnic0 from any to any pass out quick on net0 from <nat> to any nat-to (net0) pass in quick on net0 proto tcp from any to 192.168.1.105 port 80 rdr-to 192.168.0.2 pass in quick on net0 proto tcp from any to <good> port=22 flags S/SA modulate state pass out quick on net0 proto tcp from <good> to any port {80,443,21,53} flags S/SA modulate state pass out quick on net0 proto udp from <good> to any port=53 keep state pass out quick on net0 proto icmp from <good> to any block from any to any fragment block from any to any block all 

パケットフィルターで使用するファイルを指定します。

 pfctl -f /etc/firewall/pf.conf 

このルールファイルには、IPアドレスのリストを持つ2つのテーブルがあります。

 table <good> {192.168.1.105,192.168.1.106} table <nat> {192.168.0.0/24} 

適切なテーブルには、グローバルゾーンと独自のネットワークサブシステムを持たないゾーンのIPアドレスが一覧表示されます。そのようなゾーンを複数使用する場合は、IPアドレスのリストをコンマで区切って指定します。 これらのIPアドレスに対して発信トラフィックが許可され、sshを介して接続することも可能になります。 たとえば、Webサーバーを大域ゾーン、またはネットワークサブシステムのないゾーンに編成する場合、この場合、次の行を追加する必要があります。

 pass in quick on net0 proto tcp from any to 192.168.1.106 port=80 flags S/SA modulate state 

またはポートのグループ:

 pass in quick on net0 proto tcp from any to 192.168.1.106 port {80, 443, 21,22} flags S/SA modulate state 

このような場合、http、https、ftp、sshを介して接続することができます。

natテーブルは、独自のネットワークサブシステムを持つゾーンのサブネットを示します。そのようなネットワークを複数計画する場合は、それらをコンマで区切って指定します。 以下の行では、natテーブルのすべてのサブネットのnet0を介して「ネッティング」が実行されます。

 pass out quick on net0 from <nat> to any nat-to (net0) 

独自のネットワークサブシステムを持つゾーンはDMZとして使用できますが、このために必要なポートを転送する必要があります。次の行は、Webサーバーのポートをゾーン80に転送します。

 pass in quick on net0 proto tcp from any to 192.168.1.105 port 80 rdr-to 192.168.0.2 

次の行にも注意する必要があります。

 pass quick on vnic0 from any to any 

この行により、vnic0仮想インターフェイス上のすべてのトラフィックが許可され、このインターフェイスはゲートウェイとして機能します。 このインターフェースのIPアドレスは192.168.0.1です。このインターフェースは大域ゾーンでアクティブになるため、ルールファイルで指定する必要があります。 異なるサブネット用に複数のゲートウェイを計画する場合、この場合、仮想インターフェースの名前で同様の行を追加する必要があります。 たとえば、別のサブネット192.168.2.0/24を計画し、アダプターvnic5 ip(これを行う方法については次の章で説明します)にアドレス192.168.2.1を割り当てた場合、行は次のようになります。

 pass quick on vnic5 from any to any 

非大域ゾーン用に作成された仮想インターフェースを指定する必要はありません。

ゾーン作成


仮想インターフェイスを作成してこの章を開始できます。また、パケットがインターフェイスnet0とvnic0の間を通過できるようにする必要があります。

 dladm create-vnic -l net0 vnic0 dladm create-vnic -l net0 vnic1 ipadm set-ifprop -p forwarding=on -m ipv4 net0 ipadm set-ifprop -p forwarding=on -m ipv4 vnic0 

作成後、vnic0がIPアドレスを作成する必要があります。

 ipadm create-ip vnic0 ipadm create-addr -T static -a 192.168.0.1/24 vnic0/v4 

もちろん、さらにいくつかのサブネットを作成する必要がない限り、これはすべて仮想インターフェイスで行われます。

次のステップは、ゾーンを保存するためのzfsプールを作成し、イメージファイルからプールを作成することです。

 mkfile 10g /disk 

このコマンドは、サイズが10ギガバイト(必要なサイズを指定)のファイルを作成し、コマンドでプールを作成します:

 zpool create zones /disk 

将来のゾーン用に2つのセクションを作成し、各クォータを5ギガバイトに割り当てましょう。

 zfs create zones/zone1 zfs create zones/zone2 zfs set quota=5g zones/zone1 zfs set quota=5g zones/zone2 

この記事の執筆時点では、Solaris 11.4はベータ版でしたが、このバージョンではzfsパーティションの読み取りと書き込みを制限する機能(バージョン11.3には適用されません)が追加されました。

 zfs set writelimit=50mb zones/zone1 zfs set readlimit=50mb zones/zone2 

ゾーンの作成に直接進み、最初に独自のネットワークサブシステムなしでゾーンを作成し、次のコマンドを入力します。

 zonecfg -z zone1 

createコマンドで基本パラメーターを作成した後、次のステップはanetパラメーター(ネットワーク名、MACアドレス、mtuなどを含む)を削除することです。

 remove anet 

次に、将来のゾーンのパスを示し、ゾーンの自動起動とIPアドレスのタイプを設定します。

 set zonepath=/zones/zone1 set autoboot=true set ip-type=shared 

次に、ゾーンのネットワークを作成する必要があります。

 add net 

次の手順は、ゾーンの物理インターフェイスとIPアドレスを指定し、ネットワーク設定を終了する(終了)ことです。

 set physical=net0 set address=192.168.1.106/24 end 

変更を保存し、コマンドでzonecfgを終了します。

 commit exit 

ゾーンの設定は、コマンドの後に発生します。

  zoneadm -z zone1 install 

インターネットへのアクセス速度が十分に大きい場合、プロセス全体の所要時間は5分以内です。 ゾーンのインストール後、ゾーンを起動して初期設定(ホスト名、DNS、ドメイン検索、ルートのパスワード、アカウントの作成)を実行する必要があります。設定はシステムのインストール時と同じ方法で行われます。 次のコマンドを実行します(ゾーンと初期セットアップを開始します):

 zoneadm -z zone1 boot zlogin -C zone1 

「セットアップウィザード」が表示されるまで待ちます。 将来的には、次のコマンドを使用してゾーンに接続できます。

 zlogin zone1 

これで、ゾーンのセットアップとインストールが完了しました。 独自のネットワークサブシステムを使用してゾーンを設定することは、通常のゾーンを作成することとそれほど変わりません。IPアドレスのタイプを指定し、仮想アダプターvnic1(IPアドレスが作成されなかった)を指定するだけで、ゾーンネットワークのIPアドレス、IPアドレスも作成しないでくださいゾーンに初めて接続するときに作成されます(zlogin -C zone2)。 この資料によると、すべてが正しく機能するためには、IPアドレス192.168.0.2を指定する必要があります。

 zonecfg -z zone2 create remove anet set zonepath=/zones/zone2 set autoboot=true set ip-type=exclusive add net set physical=vnic1 end commit exit zoneadm -z zone2 install zoneadm -z zone2 boot zlogin -C zone2 

初期セットアップが完了したら、Apache、Nano、およびパケットフィルターをインストールし、Apacheおよびパケットフィルターも実行します

 pkg install apache-24 pkg install firewall pkg install nano svcadm enable apache24 svcadm enable firewall 

pf.confを編集します。

 nano /etc/firewall/pf.conf 

nanoに次の行を追加します。

 ip=192.168.0.2 pass in quick on vnic1 proto tcp from any to $ip port 80 flags S/SA modulate state pass out quick on vnic1 proto tcp from $ip to any port {80,443,21,53} flags S/SA modulate state pass out quick on vnic1 proto udp from $ip to any port=53 keep state pass out quick on vnic1 proto icmp from $ip to any block from any to any fragment block from any to any block all 

パケットフィルターで使用するファイルを指定します。

 pfctl -f /etc/firewall/pf.conf 

この例では、異なるIPアドレスを指定した場合、変数$ ipが使用され、最初の行を正しいアドレスに変更するだけです。

オプショナル


最後の章では、ゾーンの制限、フォルダのマウント、および拡張されたゾーンのアクセス許可に焦点を当てます。 大域ゾーンから特定のディレクトリをマウントする必要があるとします。これには、必要なゾーンを選択します。

 zonecfg -z zone1 

次に、ファイルシステムを追加します。

 add fs 

大域ゾーンのディレクトリ(たとえば、/ testディレクトリ)を指定します。

 set special=/test 

マウントする場所を指定します。

 set dir=/usr/test 

ファイルシステムタイプはループバックです。

 set type=lofs 

ディレクトリのアクセス許可を読み取り専用に設定します(必要に応じて、書き込みにrwを指定するか、このパラメーターをまったく追加しません)。

 add options [ro,nodevices] 

ファイルシステム設定を終了し、変更を保存します。

 end commit exit 

zfsセクションをマウントすることもできます。

 add dataset set name=rpool/export/home end commit 

ゾーンを再起動します。

 zoneadm -z zone1 reboot 

次に、RAM、スワップ、およびプロセッサの使用を制限し、必要なゾーンを選択します。

 zonecfg -z zone1 

メモリ制限を追加します。

 add capped-memory 

RAMを1ギガバイトに制限し、500メガバイトにスワップします。

 set physical=1024m set swap=500m end commit 

各プロセッサコアの使用を30%制限します。

 add capped-cpu set ncpus=.30 end commit 

最後に、デフォルトの特権ゾーンを追加します。すべての特権のリストは、次のコマンドを実行して表示できます。

 ppriv -l -v 

このガイドでデフォルトで使用されている(および必要に応じて追加できる)特権を理解することができます。 次のコマンドで特権を追加できます(zonecfgから)。

 set limitpriv="default,sys_time" 

このガイドで示されているように、この行はデフォルトで特権を設定し、非大域ゾーンからシステム時間を変更することもできます。 私の意見では、少数の特権を持つゾーンは機能がより制限され、したがってより保護されるため、ゾーンに追加の特権を追加しない方がよいと考えています。

おわりに


この出版物からわかるように、ゾーンは非常に簡単に構成できますが、同時に、「許可されていないすべて」ポリシーに構成されたパケットフィルターと組み合わせて、高度な保護を提供します(特に、独自のネットワークサブシステムを持つゾーン)。 構成と展開にかかる時間は最小限です。

この出版物を書くのを助けたソースのリスト。

ゾーン

パケットフィルター

Source: https://habr.com/ru/post/J349146/


All Articles