ここからは、NSX の分散ファイアウォール(DFW)を PowerNSX で操作してみます。
今回は下記のラボを利用します。
HOL-1803-02-NET - VMware NSX - Distributed Firewall and Micro-Segmentation
http://labs.hol.vmware.com/HOL/catalogs/lab/3662
今回は、いわゆる3層構成(Web / App / DB)アプリケーションを意識した
分散ファイアウォール ルールを、PowerNSX で作成してみます。
※HOL-1803-02-NET の、モジュール1のシナリオです。
※一番下のファイアウォール ルール「Default Rule」の Action は、あらかじめ Block にしておきます。
はじめに PowerShell を起動して、NSX Manager と vCenter に接続しておきます。
Connect-NsxServer -vCenterServer vcsa-01a.corp.local -Username administrator@corp.local -Password VMware1!
ファイアウォール セクションとセキュリティ グループの作成。
ファイアウォール セクションを作成して、そこにファイアウォール ルールを追加します。
ファイアウォール セクション「3-tier App」を作成します。
New-NsxFirewallSection -Name "3-tier App"
VM「web-01a」と「web-02a」が含まれるセキュリティ グループを作成します。
対象の VM は下記の 2台です。
$vms = Get-VM web-0[12]a.*
$vms
セキュリティグループ「Web-tier」を作成します。
あとでファイアウォールルールの指定で利用するため、ここで変数に入れておきます。
$web_sg = New-NsxSecurityGroup -Name Web-tier -IncludeMember $vms
$web_sg
外部 → Web 層のファイアウォール ルール作成。
Web 層の VM では、HTTPS と SSH サービスの通信を許可します。
特定のサービスを含めるとエラーになってしまうので、
今回は下記のような条件で 2つのサービスに絞っています。
$service_web = @()
$service_web += Get-NsxService -Name HTTPS | where {$_.isUniversal -eq "false"}
$service_web += Get-NsxService -Name SSH | where {$_.isUniversal -eq "false"}
$service_web
外部から Web 層へ通信を許可するルールを作成します。
Get-NsxFirewallSection -Name "3-tier App" | New-NsxFirewallRule -Name "Ext to Web" -Position Bottom -Destination $web_sg -Service $service_web -Action allow
Web 層 → App 層のファイアウォール ルール作成。
App 層のネットワークは「App_Tier_Logical_Switch」です。
$app_nw = Get-NsxLogicalSwitch -Name App_Tier_Logical_Switch
$app_nw
App サービスを定義しておきます。
$service_app = New-NsxService -Name MyApp -Protocol TCP -port 8443
$service_app
Web 層から App 層へ通信を許可するルールを作成します。
ファイアウォール セクションはルールを追加するたびにオブジェクトの再取得が必要なので
変数格納せずに、都度 Get-NsxFirewallSection で取得しています。
Get-NsxFirewallSection -Name "3-tier App" | New-NsxFirewallRule -Name "Web to App" -Position Bottom -Source $web_sg -Destination $app_nw -Service $service_app -Action allow
App 層 → DB 層のファイアウォール ルール作成。
DB 層のネットワークは「DB_Tier_Logical_Switch」です。
$db_nw = Get-NsxLogicalSwitch -Name DB_Tier_Logical_Switch
$db_nw
DB 層の VM では、このラボでは HTTP を許可します。
$service_db = Get-NsxService -Name HTTP | where {$_.isUniversal -eq "false"}
$service_db
App 層から DB 層へ通信を許可するルールを作成します。
Get-NsxFirewallSection -Name "3-tier App" | New-NsxFirewallRule -Name "App to Database" -Position Bottom -Source $app_nw -Destination $db_nw -Service $service_db -Action allow
これで「3-tier App」セクションには 3つのルールが作成されました。
Get-NsxFirewallSection -Name "3-tier App" | Get-NsxFirewallRule
vSphere Web Client からもルール追加されたことが確認できます。
さらに一番下のファイアウォール ルール「Default Rule」の Action を Block にすることで、
シナリオどおりデフォルト ルールで ping がブロックされつつ、
「Customer DB App」ページが表示できることが確認できるはずです。
ちなみに現行バージョンの NSX は基本機能でマルチテナント対応しているわけではないので、
実環境では、各ルールの「Applied To(適用先)」で環境やアプリケーションごとに
ルールの適用先を制御することになるかなと思います。
つづく!