この投稿は、下記のつづきです。
NSX API での 分散 FW 設定を体験してみる。Part 5 (HOL-SDC-1603 Module 3 より)
NSX の分散ファイアウォール(DFW)を、API で設定してみます。
手順では、ラボ(HOL-SDC-1603)の vCenter Server Appliance「vcsa-01a」の curl コマンドで、
NSX Manager 「192.168.110.15」 に API を実行しています。
手順の流れ。
- Security Group の作成。
- Service の作成。
- オブジェクト ID の確認。
- デフォルトの FW ルールを Allow → Block に変更。
- FW ルール セクションの作成。
- セクションに FW ルールを作成。 ★ここ
FW ルール セクションに FW ルールを追加して、通信が許可されたことを確認してみます。
FW ルール セクションに FW ルールを作成。
FW ルールごとに、XML ファイルを作成します。
XML で指定している 各オブジェクトの ID は、以前の投稿(下記)で確認ずみのものです。
NSX API での 分散 FW 設定を体験してみる。Part 3 (HOL-SDC-1603 Module 3 より)
「EXT to Web」 ルール
NSX 環境の外部から、Web 層ネットワークの VM に SSH と HTTPS の通信を許可します。
- ソース: 任意
- ターゲット: Security Group 「Web-tier」
- サービス: SSH、HTTPS
- 操作: 許可
「EXT to Web」 ルール用の XML ファイル(dfw-rule-ext2web.txt)
cat <<EOF > dfw-rule-ext2web.txt
<rule id="0" disabled="false" logged="false">
<name>EXT to Web</name>
<action>allow</action>
<appliedToList>
<appliedTo>
<name>DISTRIBUTED_FIREWALL</name>
<value>DISTRIBUTED_FIREWALL</value>
<type>DISTRIBUTED_FIREWALL</type>
</appliedTo>
</appliedToList>
<destinations excluded="false">
<destination>
<name>Web-tier</name>
<value>securitygroup-10</value>
<type>SecurityGroup</type>
</destination>
</destinations>
<services>
<service>
<name>SSH</name>
<value>application-305</value>
<type>Application</type>
</service>
<service>
<name>HTTPS</name>
<value>application-67</value>
<type>Application</type>
</service>
</services>
</rule>
EOF
「Web to App」ルール
Web 層ネットワークの VM から、 App 層ネットワークの論理スイッチに接続されている VM に、
MyApp サービス(TCP 8443 番ポート)の通信を許可します。
- ソース: Security Group 「Web-tier」
- ターゲット:論理スイッチ 「App_Tier_01」
- サービス: サービス 「MyApp」
- 操作: 許可
「Web to App」 ルール用の XML ファイル(dfw-rule-web2app.txt)
cat <<EOF > dfw-rule-web2app.txt
<rule id="0" disabled="false" logged="false">
<name>Web to App</name>
<action>allow</action>
<appliedToList>
<appliedTo>
<name>DISTRIBUTED_FIREWALL</name>
<value>DISTRIBUTED_FIREWALL</value>
<type>DISTRIBUTED_FIREWALL</type>
</appliedTo>
</appliedToList>
<sources excluded="false">
<source>
<name>Web-tier</name>
<value>securitygroup-10</value>
<type>SecurityGroup</type>
</source>
</sources>
<destinations excluded="false">
<destination>
<name>App_Tier_01</name>
<value>virtualwire-3</value>
<type>VirtualWire</type>
</destination>
</destinations>
<services>
<service>
<name>MyApp</name>
<value>application-371</value>
<type>Application</type>
</service>
</services>
</rule>
EOF
「App to Database」ルール
App 層ネットワークの論理スイッチに接続されている VM から DB 層ネットワークの論理スイッチに接続されている VM に、
MySQL サービスの通信を許可します。
- ソース: 論理スイッチ「App_Tier_01」
- ターゲット:論理スイッチ「DB_Tier_01」
- サービス: サービス「MySQL」
- 操作: 許可
「App to Database」 ルール用の XML ファイル(dfw-rule-app2db.txt)
cat <<EOF > dfw-rule-app2db.txt
<rule id="0" disabled="false" logged="false">
<name>App to Database</name>
<action>allow</action>
<appliedToList>
<appliedTo>
<name>DISTRIBUTED_FIREWALL</name>
<value>DISTRIBUTED_FIREWALL</value>
<type>DISTRIBUTED_FIREWALL</type>
</appliedTo>
</appliedToList>
<sources excluded="false">
<source>
<name>App_Tier_01</name>
<value>virtualwire-3</value>
<type>VirtualWire</type>
</source>
</sources>
<destinations excluded="false">
<destination>
<name>DB_Tier_01</name>
<value>virtualwire-4</value>
<type>VirtualWire</type>
</destination>
</destinations>
<services>
<service>
<name>MySQL</name>
<value>application-23</value>
<type>Application</type>
</service>
</services>
</rule>
EOF
作成された FW ルールは、既存ルールの一番上に配置されるので、
今回は、ルールが下記の順になるように、作成順序を工夫しています。
FW ルールの順序。
- EXT to Web
- Web to App
- App to Database
FW ルールの作成順序。
- App to Database
- Web to App
- EXT to Web
※ただし今回の FW ルールでは、FW ルールセクション内で順序が異なっても問題になりません。
「App to Database」 ルールの作成
FW ルール セッション ID 1005 の ETag を取得して・・・
ETAG=`curl -k -I -s -u admin:VMware1! -X GET https://192.168.110.15/api/4.0/firewall/globalroot-0/config/layer3sections/1005 | grep ETag | awk '{print $2}'`
FW ルールを作成します。
cat dfw-rule-app2db.txt | curl -k -s -u admin:VMware1! -X POST -H "Content-type: text/xml" -H "If-Match: $ETAG" -d @- https://192.168.110.15/api/4.0/firewall/globalroot-0/config/layer3sections/1005/rules
「Web to App」ルールの作成
同様にセクションの Etag を取得しなおして・・・
ETAG=`curl -k -I -s -u admin:VMware1! -X GET https://192.168.110.15/api/4.0/firewall/globalroot-0/config/layer3sections/1005 | grep ETag | awk '{print $2}'`
FW ルールを作成します。
cat dfw-rule-web2app.txt | curl -k -s -u admin:VMware1! -X POST -H "Content-type: text/xml" -H "If-Match: $ETAG" -d @- https://192.168.110.15/api/4.0/firewall/globalroot-0/config/layer3sections/1005/rules
「EXT to Web」ルールの作成
同様にセクションの Etag を取得しなおして・・・・
ETAG=`curl -k -I -s -u admin:VMware1! -X GET https://192.168.110.15/api/4.0/firewall/globalroot-0/config/layer3sections/1005 | grep ETag | awk '{print $2}'`
FW ルールを作成します。
cat dfw-rule-ext2web.txt | curl -k -s -u admin:VMware1! -X POST -H "Content-type: text/xml" -H "If-Match: $ETAG" -d @- https://192.168.110.15/api/4.0/firewall/globalroot-0/config/layer3sections/1005/rules
このような感じで実行します。
確認
Web Client からでも、FW ルールが作成されていることが確認できます。
Web テストページが表示可能になったことを確認します。
Web サーバ「web-01a」 にSSH アクセスが可能になったことを確認します。
ちなみに、マイクロセグメンテーションを意識した FW ルール設定なので、
この状態では Web 層のネットワークに所属する VM 同士(web-01a と web-02a) でも
不要な通信は許可されていません。
このような感じで、Web Client で設定できる FW 設定は、NSX API でも可能です。
XML で設定値を指定しているので複雑に見えるかもしれませんが、
API 実行時に変更が必要な設定値は、ある程度、環境によって限定されるはずです。
今回は XML ファイルを手作業で作成したり、ID を grep で探したりしていますが、
ちゃんとツールを作成すれば手作業より安全に NSX の FW 設定を管理できそうです。
以上、NSX API で DFW を設定してみる話でした。