ESXiのファイアウォールの許可設定をPoserCLIで変更してみます。
ためした環境は、下記です。
- ESXi 5.0
- vCenter 5.0
- PowerCLI 5.1 R2
PowerCLIでは、ESXiのファイアウォールの有効化/無効化であれば
Set-VMHostFirewallException で設定できるのですが、
細かい許可NWアドレスやIPアドレスの指定はできません。
そこで、スクリプトを作ってみました。
set_esxi_fw.ps1
# 設定変更するルールセット名を指定
$ruleset_name = $args[0]
# リストからESXiの一覧を読み込む
$hvs = Get-Content $args[1]
# CSVから通信許可するネットワーク(IP)を読み込む
$rules = Import-Csv $args[2]
# 通信許可するネットワーク(IP)数を指定している。
$rule_num = $rules.Count
# FW設定の準備
$spec = New-Object VMware.Vim.HostFirewallRulesetRulesetSpec
$spec.allowedHosts = New-Object VMware.Vim.HostFirewallRulesetIpList
$spec.allowedHosts.ipNetwork = New-Object VMware.Vim.HostFirewallRulesetIpNetwork[]($rule_num)
$cnt = 0
$rules | sort | % {
$spec.allowedHosts.ipNetwork[$cnt] = New-Object VMware.Vim.HostFirewallRulesetIpNetwork
$spec.allowedHosts.ipNetwork[$cnt].network = $_.network
$spec.allowedHosts.ipNetwork[$cnt].prefixLength = $_.prefixLength
$cnt = $cnt + 1
}
$spec.allowedHosts.allIp = $false
# ESXiにFW設定
$hvs | sort | % {
$fw = Get-View (Get-VMHost $_ | Get-View).ConfigManager.FirewallSystem
$fw.UpdateRuleset($ruleset_name, $spec)
}
別ファイルとして、設定対象のESXi のリスト(hvs.txt)と、
FWルールセットに対して許可するNWのリスト(rules.txt)を用意しておきます。
ESXiのリスト(hvs.txt)の例。
sc-esxi501
sc-esxi502
許可するNWのリスト(rules.txt)の例。ヘッダとして network,prefixLength を書いておきます。
NWアドレスと、サブネットマスクの長さをCSV(「,」で区切って)で記載します。
network,prefixLength
192.168.0.0,24
192.168.4.0,24
172.16.50.0,24
PowerCLIでvCenterに接続して、この3つのファイルで下記のように実行します。
実行方法:
.\set_esxi_fw.ps1 <FWルールセットのKey> <ESXiのリストファイル> <許可NWのリストファイル>
ここで指定できる「FWルールセットのKey」は、
- PowerCLIでESXiファイアウォールの構造をみてみる。
の「ルールセットには下記があります。」というあたりを参照ください・・・
PowerCLI> .\set_esxi_fw.ps1 "sshServer" "hvs.txt" "rules.txt"
うまくいくと、PowerCLIのプロンプトには特に標準出力ありませんが、
vSphere Clientのタスクには設定変更されたことが表示されます。
ファイアウォールのプロパティでも、
「許可されたIPアドレス」にrules.txtで記載した設定が反映されていることが確認できます。
以上、ESXiファイアウォールの設定をPowerCLIで変更してみる話でした。