今回の VMware Aria Operations for Networks ブログは、以前に書いたセキュリティのユースケースに関連する VMware NSX 分散ファイアウォールのための機能に絞って解説します。
◆ 分散ファイアウォールのための Aria Operations for Networks
NSX の分散ファイアウォール (DFW) はご存知の通り、ESXi ではハイパーバイザーカーネルで処理され、vNIC レベルでワークロードをステートフルに保護するマイクロセグメンテーションを実現する機能です。
水平方向の移動(ラテラルムーブメント)の脅威に対策強化したい場合に非常に有効な機能ですが、トラフィックを正確に把握できていない場合にはどうしても緩く設定しがちだったり、従来のファイアウォールでは実現が難しかったセグメント内のセキュリティ強化に、どんなファイアウォールルールが適切か悩まれる方もいます。
実際に流れている実トラフィックからルール、つまり許可リストを作成できれば、いいと思いませんか?
そんな時に使えるのが Aria Operations for Networks (旧 vRealize Network Insight, vRNI) です。
下図はオンプレに展開する場合のアーキテクチャです。データソースとしての VMware vSphere の分散スイッチから IPFIX を使ってネットワークトラフィック情報を収集し、分析します。さらに VMware vCenter から取得した仮想マシンやタグ、その他のインベントリ情報をリンクし、推奨のファイアウォールルールを提示します。 NSX が導入済みの環境では、タグ、セグメント、セキュリティグループ等の情報もリンクします。
Aria Operations for Networks で収集・分析されると、セキュリティ計画のマイクロセグメント セクションでドーナツチャートのような可視化が表示されます。それぞれのグループはグループ化の基準で選択したもの、グループ間のラインはフローを表しており、どこからどこにどのようなフローが流れているのか確認できます。
グループ化の基準を変更すると、同じデータでも見え方が異なります。例えば、VLAN/VXLAN/オーバーレイ、アプリケーション、セキュリティグループで表示が違うことがわかるかと思います。
実はこの表示の情報から、NSX 分散ファイアウォールの推奨ルールを CSV、XML、YAML のいずれかとしてエクスポートすることが可能です。
XML としてエクスポートした場合、こちらで提供しているツール 、Python スクリプトを使って NSX Manager や VMware Cloud on AWS に直接インポートができます。グループ化の基準をアプリケーション 、(アプリケーションの)階層、セキュリティグループを使用した場合のみ、XML としてエクスポートが利用可能です。
ちなみに、YAML としてエクスポートは、グループ化の基準が Kubernetes サービス 、Kubernetes 名前空間を選択した場合のみ利用可能、CSV としてエクスポートはどんなグループ化の基準でも利用可能です。ルールのエクスポート機能は、VMware docs も参照ください。
◆ 手順
それでは実際に、Aria Operations for Networks でルールを XML としてエクスポートし、NSX Manager にインポートする手順を見てみましょう
1.事前準備
1-1:
ツールを利用する環境を準備します。
前提条件は、下記の通りです。
- Python 3.7 以降
- Requests、json、argparse、sys、glob、os、xml.dom、
xml.etree.Elementtree、getpass の Python ライブラリがインストールされていること - スクリプトが実行される端末からインターネットへの接続性
- VMware NSX へインポートする場合、HTTPS (443) 経由での NSX Manager
または VIP への接続性 - VMware Cloud on AWS へインポートする場合、HTTPS (443) 経由での
VMC SDDC への接続性
今回のこのブログは Python をインストールした Windows 端末を準備しました。
1-2:
ツール(スクリプト)をサイトからダウンロードし、解凍しておきます。
1-3:
コマンドプロンプトを起動し、ダウンロードした requirements.txt にあるとおり、以下のコマンドで必要な Python モジュールをインストールします。
# py -m pip install requests
# py -m pip install requests_toolbelt
2. エクスポート
2-1:
Aria Operations for Networks の UI にログインし、[ホーム] 画面のクイックリンクの [マイクロセグメントの計画] ① から、対象としたい範囲、期間、グループ化の基準 を選択 ② し、[分析] をクリックします。今回は NSX へファイアウォールルールをインポートしたいアプリケーションをグループ化の基準として選択します。
(アプリケーション機能については、以前のブログのユースケース 1 を参照ください)
(Aria Operations for Networks へデータソース追加直後は分析中で何も表示されないため、最低 2 時間お待ちください。)
ファイアウォールルールをエクスポートするために、右上にある 3 つのドットをクリックし、[ルールを XML としてエクスポート] ③ をクリックします。nsx-rules.zip という名前のファイルがダウンロードできます。
3.インポート
3-1:
事前準備した環境で、nsx-rules.zip を解凍すると、中身が確認できます。
nsx-rules/universal フォルダーに、ファイアウォールルールとサービスを定義する.xml ファイル、セキュリティグループ、セキュリティタグ、サービスなどを定義する .csv ファイルが確認できます。nsx-rules フォルダにも他の情報が作成されています。
3-2:
コマンドプロンプトを開き、Python スクリプトを実行します。
# py “Path-To-Python-Script” –rulefolder “Path-to-Rule-Folder” –appname “NSX-Policy-Name” –nsxturl “NSX-Manager-or-VIP-URL” –nsxtuser “NSX-Username” –securitygroupcsv “NSX-Security-Group-CSV”
コマンドラインオプションと今回の引数は次のとおりです。
実際に実行したスクリプトコマンドは下記の通りです。
# py vRNI_DFW_Rule_to_VMC_and_NSXT_Import.py –rulefolder “C:\Users\Administrator\Downloads\nsx-rules\universal” –appname 3Tier-WebApp –nsxturl “https://192.168.110.201/” –nsxtuser admin –securitygroupcsv “C:\Users\Administrator\Downloads\nsx-rules\exported-members.csv”
VMware Cloud on AWS 上の NSX へインポートする場合のオプションは、ヘルプオプションでご確認ください。ツールのサイトにデモ動画もあります。
# py “Path-To-Python-Script” –help
下記は少し戸惑ったツールの Tech tips!
- –nsxturl オプションを指定するときに最初は https:// で始まり、最後は / (スラッシュ) を入れないとエラーになります。
- IPメンバーシップでセキュリティグループを作成するには、–securitygroupcsv オプションで nsx-rules フォルダーの exported-members.csv ファイルパスを指定します。スクリプトを実行、このオプションが選択されるたびに、セキュリティグループは選択したファイルの IP で上書きされます。
- また、このスクリプトでセキュリティグループを作成する場合、IP アドレス、MAC アドレス、または Active Directory グループのみで構成されるグループが、適用先に使用できないという問題があるため、ファイアウォールルールはセキュリティグループではなく [分散ファイアウォール] に適用されます。変更が必要な場合は手動で変更してください。
4.確認
4-1:
NSX Manager の UI にログインして、[インベントリ] – [グループ] を確認するとセキュリティグループが作成されています。スクリプトで自動作成したセキュリティ グループ名には -vRNI-Import-Tier が追加されますので、それを使うとグループの検索が容易です。
それぞれのセキュリティグループを編集し、追加したい VM を追加します(つまり、作成されたグループへの VM メンバー追加は自動でありませんのでご注意ください)。
4-2:
[インベントリ] – [サービス] でサービスが作成されています。こちらも自動生成には、-vRNI-Import という名前がついています。
4-3:
[セキュリティ] – [分散ファイアウォール] で –appnameで指定したアプリケーション名がセクションとして、その中にインポートされたルールが作成されています。
作成されたルールはデフォルトで無効化の状態です。スクリプトのオプションで有効化を指定できますが、トラフィックが観察された場合でも、それが許可すべきとは限らないため、アプリケーション、その依存関係、およびファイアウォール要件を理解した上で、レビューおよび検証し、最終チェックをして問題なければ、有効化し、[発行] でルールを適用してください。
手順は以上です。
◆ 運用中の使用
以前のブログでも紹介済みですが、今回の内容に照らし合わせて運用中にも使える点を紹介します。
最近の脅威の状況からアプリケーションや基盤を守るために、個人的におすすめな NSX 分散ファイアウォールルールの設定とルールの並びは、下記の通りです(もちろん、設定ポリシーはご利用環境に依存しますので、ご確認の上で設定してください)。
- ブロックリストを設定
通信させたくない通信や IP がわかっている場合はまずドロップ。わからない場合、NSX Security ライセンスを購入済みでインターネット接続可能な場合は、悪意のある IP フィルタリング機能を使って、脅威と思われる IP への通信をドロップ。詳しくはこちらを参照ください。 - 許可リストを設定
通信が必要なトラフィックだけを許可。このブログで紹介したような方法を使って、アプリケーションに必要なルールを適用 - 暗黙のルールはブロックで設定
分散ファイアウォールの最後にデフォルトで設定されている任意トラフィックのルールはドロップまたは却下
これらを設定後、NSX 上ではルールがヒットしているかしていないか、数値に変化はあるかをルールごとに確認するか、必要な場合はログをルールごとに有効化する必要がありますが、Aria Operations for Networks では特別な設定なく、簡単に分析、可視化が可能です。
先ほどの手順 4 と同じ画面、Aria Operations for Networks の [マイクロセグメントの計画] で、[フロータイプ] を使って確認できます。
上記のおすすめの通り設定した場合、1. または 3. でブロックされたものはフロータイプで [ドロップされたフロー] を選択、2. で許可されたものは [保護対象の許可されたフロー] を選択すると表示することができます。グループの間のラインをクリックすると、それぞれ関連するフローの詳細まで確認できます。
またもし、適切なファイアウォールルールを適用できるまで、3. 暗黙のルールを許可で設定していた場合は、 [保護対象でないすべてのフロー] を選択すると確認できます。
◆ まとめ
NSX 分散ファイアウォールで多数のファイアウォールルール設定が必要な場合は今回の方法のようにツールを使って、またツールは使わなくてもルール設定と設定後の確認に、 Aria Operations for Networks が少しでもお役に立てば幸いです。