NSX for vSphere 6.2.4 の分散ファイアウォール(DFW)は、マルチテナント機能を持っていません。
DFW で設定する FW ルールは、デフォルトでは NSX Manager で管理する DFW 環境すべてに適用されます。
そこで、DFW ルールの「適用先」を指定することでルールの適用先をしぼり、マルチテナントっぽくしてみました。
※vForum 2016 Tokyo の SDDCブースあたりで聞いた話を、実際にためしてみました・・・
完成イメージ。
いきなりですが、最初に DFW ルールの完成イメージです。
- テナントを2つあるものとします。(tenant01 と tenant02)
- テナントごとに、DFW ルールのセクション(dfw-tenant-01 と dfw-tenant-02)を作成してみました。
- セクションに含まれるルールには、必ず「適用先」にセキュリティグループを含めます。
それぞれのセキュリティグループには、テナント内の全 VM を含むようにします。
FW ルールは上から評価されるため、別テナントの FW ルールのが適用されてしまわないように
かならず「適用先」を設定するようにします。 - Default でブロックするルールは、デフォルト セクションで設定することができますが、
わかりやすいのであえてテナントごとに追加してみました。
テナント / VM 構成について。
今回の構成では、2つテナントを用意してみました。
DFW の機能には関係ありませんが、わかりやすくテナントごとにフォルダ分けしてあります。
セキュリティグループで管理しやすいように、VMの名前を工夫しています。
- tenant01 の VM → t01-~
- tenant02 の VM → t02-~
セキュリティグループの構成について。
テナントごとに、テナント内の全 VM を含むセキュリティグループを作成してみました。
それぞれのセキュリティグループには、3台の VM が含まれています。
今回はテナントごとに VM 名の先頭文字列を決めてあるので、
セキュリティグループの「動的メンバーシップの定義」 で、
「仮想マシン名」 の 「先頭が」 「t01-」(tenant02では、「t02-」) と設定しています。
これで、命名規則どおりの VM であれば、セキュリティグループに自動追加されるようになります。
DFW ルールの「適用先」 の設定について。
例として、tenant02 の DFW ルールの1つに、セキュリティグループ 「secgr-tenant-02」 を設定してみます。
DFW ルールの適用先は、デフォルトでは「Distributed Firewall」 となっています。
ここに、セキュリティグループを設定してみます。
編集ボタンをクリックすると、
「Distributed Firewall がインストールされているすべてのクラスタにこのルールを適用します。」にチェックが入っています。
このチェックを外すと適用先のオブジェクトタイプが選択できるようになるので、
「Security Group」 を選択します。
セキュリティグループを選択しました。
「変更の発行」 をクリックすると、DFW のルールが反映されます。
テナントごとに DFW ルールの適用先が揃えて、下記のような感じにします。
ここで表示されている「ルール ID」は、あとで DFW の適用状態の確認で使用します。
ちなみに、セキュリティグループのリンクをクリックすると、所属している VM を確認することができます。
DFW ルールの適用状態を確認してみる。
DFW ルールが適用されているか、ESXi に SSH ログインして見てみます。
summarize-dvfilter コマンドで VM (vNIC)ごとの DVFilter の名前を確認して、
それをもとに vsipioctl コマンドでルールを確認します。
まず、tenant01 に含まれる、t01-web01 という VM のDFW ルールを見てみます。
vNIC は 2つありますが、片方を確認すれば十分とおもわれるので eth0 のに設定されたルールを見てみます。
[root@hv-i21:~] summarize-dvfilter | grep t01-web01 -A5
world 7733173 vmm0:t01-web01 vcUuid:'50 09 f2 fe 1b 1d 2d e5-f8 33 8c 17 4f d0 91 2e'
port 50331775 t01-web01.eth0
vNic slot 2
name: nic-7733173-eth0-vmware-sfw.2
agentName: vmware-sfw
state: IOChain Attached
vmState: Detached
--
port 50331776 t01-web01.eth1
vNic slot 2
name: nic-7733173-eth1-vmware-sfw.2
agentName: vmware-sfw
state: IOChain Attached
vmState: Detached
[root@hv-i21:~]
フィルタ名をもとに、DFW ルールを確認します。
今回設定したルールは ID が 1008 ~ 1013 なので、赤字の部分のみが関係します。
tenant01 むけに設定したルール (1009、1011、1012) だけが設定されていることが分かります。
[root@hv-i21:~] vsipioctl getrules -f nic-7733173-eth0-vmware-sfw.2
ruleset domain-c7 {
# Filter rules
rule 1009 at 1 inout protocol any from any to addrset ip-virtualwire-26 accept;
rule 1011 at 2 inout protocol any from addrset ip-virtualwire-25 to addrset ip-virtualwire-25 accept;
rule 1012 at 3 inout protocol any from any to any drop;
rule 1007 at 4 inout protocol udp from addrset ip-securitygroup-10 to addrset ip-vm-465 port 67 accept;
rule 1006 at 5 inout inet protocol udp from addrset ip-securitygroup-10 to any port 67 reject;
rule 1005 at 6 in inet protocol udp from any to addrset ip-vm-465 port 67 reject;
rule 1003 at 7 inout protocol ipv6-icmp icmptype 136 from any to any accept;
rule 1003 at 8 inout protocol ipv6-icmp icmptype 135 from any to any accept;
rule 1002 at 9 inout protocol udp from any to any port 68 accept;
rule 1002 at 10 inout protocol udp from any to any port 67 accept;
rule 1001 at 11 inout protocol any from any to any accept;
}
ruleset domain-c7_L2 {
# Filter rules
rule 1004 at 1 inout ethertype any from any to any accept;
}
[root@hv-i21:~]
次に、tenant02 に含まれる、t02-web01 という VM のDFW ルールを見てみます。
こちらも vNIC が 2つありますが、eth0 のに設定されたルールだけ見てみます。
[root@hv-i23:~] summarize-dvfilter | grep t02-web01 -A5
world 7676381 vmm0:t02-web01 vcUuid:'50 09 46 a8 08 76 3f da-7c 6e ec 30 3b 28 67 c0'
port 50331717 t02-web01.eth0
vNic slot 2
name: nic-7676381-eth0-vmware-sfw.2
agentName: vmware-sfw
state: IOChain Attached
vmState: Detached
--
port 50331718 t02-web01.eth1
vNic slot 2
name: nic-7676381-eth1-vmware-sfw.2
agentName: vmware-sfw
state: IOChain Attached
vmState: Detached
[root@hv-i23:~]
フィルタ名をもとに、DFW ルールを確認します。
tenant01 むけに設定したルール (1008、1010、1013) だけが設定されていることが分かります。
[root@hv-i23:~] vsipioctl getrules -f nic-7676381-eth0-vmware-sfw.2
ruleset domain-c7 {
# Filter rules
rule 1008 at 1 inout protocol any from any to addrset ip-virtualwire-26 accept;
rule 1010 at 2 inout protocol any from addrset ip-virtualwire-27 to addrset ip-virtualwire-27 accept;
rule 1013 at 3 inout protocol any from any to any drop;
rule 1007 at 4 inout protocol udp from addrset ip-securitygroup-10 to addrset ip-vm-465 port 67 accept;
rule 1006 at 5 inout inet protocol udp from addrset ip-securitygroup-10 to any port 67 reject;
rule 1005 at 6 in inet protocol udp from any to addrset ip-vm-465 port 67 reject;
rule 1003 at 7 inout protocol ipv6-icmp icmptype 136 from any to any accept;
rule 1003 at 8 inout protocol ipv6-icmp icmptype 135 from any to any accept;
rule 1002 at 9 inout protocol udp from any to any port 68 accept;
rule 1002 at 10 inout protocol udp from any to any port 67 accept;
rule 1001 at 11 inout protocol any from any to any accept;
}
ruleset domain-c7_L2 {
# Filter rules
rule 1004 at 1 inout ethertype any from any to any accept;
}
[root@hv-i23:~]
DFW をマルチテナント環境っぽく使用することは可能ですが、
このような感じで、オブジェクト名やグルーピングなどで工夫が必要そうです。
以上、DFW ルールをマルチテナントっぽく設定してみる話でした。