vCenter Server Management の Firewall でアクセス制御を試す

概要

vCenter Server Appliance (VCSA) に標準搭載されている簡易ファイアウォール機能を使い、特定 IP からのアクセスを拒否する設定を実際に投入してみる。GUI での操作から、裏側で生成される iptables ルール、そして通信方向ごとの挙動を確認した。

1. VAMI ファイアウォールとは

vCenter は簡易的なアクセス制御機能を搭載しており、特定の IP アドレスやサブネットからのアクセスを許可・拒否できます。設定は vCenter Server Management Interface(VAMI、https://<appliance>:5480)の Firewall メニューから行います。[1]

これは環境内にファイアウォールを持たないフラットなネットワークでも、vCenterへのアクセスを制御できるという、セキュリティ観点では意外と有用な機能です。踏み台(ジャンプホスト)や管理セグメントからのみアクセスを許し、それ以外を遮断する、といった用途に使えます。[2]

ポート単位の制御はできない

この機能はあくまでネットワーク層(送信元 IP/サブネット)でのフィルタです。「443 だけ許可」「22 だけ拒否」といったポート単位の制御はできず、ルールはその NIC に届くすべてのトラフィックに一律で適用されます。SSH だけ絞りたい、GUI は全体公開したい、といった要件は VAMI 単体では実現できないため、外部 L4 ファイアウォールや NSX 側で行う必要があります。[3]

2. VAMI GUI での設定手順

VAMI の Firewall 画面では、ルールを上から順に評価します。今回は例として、送信元 192.168.80.253/32 からのアクセスを拒否(Reject)するルールを 1 件投入しました。

  1. ①ブラウザで https://<appliance-IP-or-FQDN>:5480 にアクセスし、root でログイン(vCenter SSO の SystemConfiguration.Administrators グループのメンバーである必要があります)。
  2. ②左メニューの Firewall を開き、ADD をクリック。
  3. ③ルールを指定する。
    Network Interface: nic0 / IP Address: 192.168.80.253 / Subnet Prefix Length: 32(単一 IP の場合)/ Action: Reject
  4. SAVE をクリックして保存。必要に応じて REORDER でルールの評価順を調整。

Action には Accept(許可)/Ignore(黙って破棄=DROP 相当)/Reject(拒否応答を返す)/Return(既定ルールに委ねる)の 4 種類があります。[1]


図 1: VAMI GUI の Firewall 画面。192.168.80.253/32 に対する Reject ルールを 1 件登録した状態

3. iptables への反映内容

VCSA は Linux ベースであり、VAMI で設定した内容は最終的に OS の iptables ルールとして書き込まれます。SSH で VCSA にログインし iptables -L を実行すると、以下のように該当 IP を拒否するルールが確認できます(抜粋・要点にコメントを付与)。

root@sb-e560f-vcsa [ ~ ]# iptables -L

Chain INPUT (policy DROP)              # 既定は DROP(明示的に許可された通信のみ通す)
target      prot opt source        destination
ACCEPT      all  --  anywhere      anywhere
DROP        all  --  anywhere      anywhere      ctstate INVALID
ACCEPT      all  --  anywhere      anywhere      ctstate RELATED,ESTABLISHED  # 戻り通信は許可
inbound     all  --  anywhere      anywhere      # ユーザー定義ルールへ分岐
port_filter all  --  anywhere      anywhere
...

Chain FORWARD (policy DROP)

Chain OUTPUT (policy ACCEPT)           # 送信(自ホスト発)は既定 ACCEPT
target        prot opt source     destination
ACCEPT        all  --  anywhere   anywhere      ctstate RELATED,ESTABLISHED
output_remote all  --  anywhere   anywhere
output_local_443 tcp -- anywhere   anywhere     tcp dpt:https  # 443 宛は UID 別に制限

Chain inbound (1 references)           # ← VAMI で作った拒否ルールはここ
target  prot opt source           destination
REJECT  all  --  192.168.80.253   anywhere      reject-with icmp-port-unreachable
RETURN  all  --  anywhere         anywhere

Chain log_reject (18 references)
LOG     all  --  anywhere  anywhere  LOG level debug prefix "iptables rejected by VSR "
REJECT  all  --  anywhere  anywhere  reject-with icmp-port-unreachable

Chain output_local_443 (1 references) # 443 宛 outbound を許可する UID の一覧
ACCEPT  all  --  anywhere  anywhere  owner UID match envoy
ACCEPT  all  --  anywhere  anywhere  owner UID match vpxd
ACCEPT  all  --  anywhere  anywhere  owner UID match content-library
ACCEPT  all  --  anywhere  anywhere  owner UID match vsphere-ui
...   (vmcam / lookupsvc / trustmanagement / sso-user / updatemgr / root ほか)
log_reject all -- anywhere anywhere  # 上記 UID 以外は log_reject へ

ポイントは次のとおりです。VAMI のルールは inbound チェインに REJECT ... reject-with icmp-port-unreachable として追加されます。INPUT チェインの既定ポリシーが DROPOUTPUTACCEPT になっている点が、次章の挙動を理解する鍵になります。[4]

⚠ iptables を手動で編集・有効化しない

ルールはあくまで VAMI 経由で管理します。iptables サービスをコマンドラインから手動で有効化すると、vCenter のサービスは起動していても Web UI にアクセスできなくなる事象が報告されています。[5]

4. 通信の挙動

この iptables に設定された該当 IP(192.168.80.253)に対する通信の挙動は、方向によって異なります。既定ポリシー(INPUT=DROP/OUTPUT=ACCEPT)と、追加された REJECT ルールの組み合わせで、次のように整理できます。

通信方向結果理由
192.168.80.253 → このホスト の新規通信拒否inbound チェインの送信元 IP 一致ルール(REJECT)にマッチ
このホスト → 192.168.80.253 の新規通信概ね許可OUTPUT の既定ポリシーが ACCEPT のため
このホスト → 192.168.80.253 の一部通信拒否あり特定 UID / 443 宛通信の制限(output_local_443 で許可 UID 以外は log_reject 行き)
このホスト発通信の戻り通信許可ctstate RELATED,ESTABLISHED にマッチするため

つまり、拒否ルールは「その IP から VCSA へ向かう新規のインバウンド通信」を止めるものです。VCSA 自身がその IP へ発信するアウトバウンドは、既定で許可されたままである点に注意が必要です(443 宛など一部は UID ベースで別途制限されます)。

5. 拒否時の応答(ICMP port-unreachable)

Action が Reject の場合、拒否された通信に対して VCSA は ICMP port-unreachable(type 3 / code 3)を返します。これは iptables の reject-with icmp-port-unreachable の挙動によるものです。[6]

Reject と Ignore(DROP)の違い

Reject は「拒否した」という ICMP 応答を返すため、送信元にはポートが閉じていることが即座に伝わります。一方 Ignore(DROP 相当)はパケットを黙って破棄し、何も返しません。応答有無でスキャン耐性やタイムアウト挙動が変わるため、要件に応じて使い分けます。

6. 使う前に押さえる注意点

手軽な機能ですが、設定ミスがそのまま「vCenter への締め出し」に直結します。実運用に投入する前に、以下の確認が重要です。

ルールは上から順に評価される

vCenter はルールを上から順に処理し、最初にマッチしたものを適用します。「特定 IP/サブネットだけ許可し、それ以外を拒否」する場合は、Allow ルールを先に、Reject ルールを後に配置する必要があります。順序が逆だと許可したい相手まで拒否されます。[7]

⚠ 締め出しを防ぐ
  • Reject ルールを入れる前に、管理端末・踏み台の IP を許可する Allow ルールを先に作成する。
  • 「全拒否」を意図して 0.0.0.0/0 Reject を入れる場合、ESXi ホストの管理 IP・vSAN VMkernel・DNS/NTP・バックアップ/監視・vCenter HA 等をすべて許可リストに含める。含め忘れると連携が壊れます。[8]
  • サブネットプレフィックス長の指定ミス(例: /24 のつもりで /0)で全遮断してしまう事故が多いので、保存前に必ず確認する。

作業前にスナップショットを取得する

設定変更前にオフラインスナップショットの取得が推奨されます。Enhanced Linked Mode (ELM) 構成の場合は、ELM 内のすべての vCenter を停止したうえでスナップショットを取得します。[9]

複数 NIC 環境ではインターフェースごとに設定

VCSA が管理用(nic0)・vSAN・vSphere HA 用など複数の NIC を持つ場合、rhttpproxy や vpxd が待ち受ける各インターフェースに対して許可/拒否ルールを適用する必要があります。[8]

7. ロックアウト時の復旧

誤って自分の IP を拒否し VAMI にアクセスできなくなった場合でも、VM コンソール経由で復旧できます。手順の概略は次のとおりです。[10]

  1. vSphere Client などから VCSA VM のコンソールを開く(VAMI がダメでもコンソールは使える)。
  2. Alt + F1 でコンソールログインし、root でログイン。必要なら Troubleshooting Mode から Bash Shell を有効化。
  3. appliance shell で全ファイアウォールルールを削除:
    applianceshcom.vmware.appliance.version1.networking.firewall.addr.inbound.delete --all true
  4. 削除を確認(...inbound.list で出力が空になればOK)。VAMI へ再アクセスできるようになる。
補足: iptables を直接クリアする場合

ホームラボ等でより低レベルに戻したい場合は、コンソールから iptables -F / iptables -X と各チェインの既定ポリシーを ACCEPT に戻す方法もあります。ただし本番環境では前述の appliance shell 経由の削除が安全です。

8. まとめ

VAMI の Firewall 機能は、GUI から数クリックで vCenter への到達 IP を絞れる手軽なアクセス制御です。実体は VCSA 内の iptablesinbound チェインの REJECT ルール)であり、拒否時には ICMP port-unreachable を返します。挙動は方向依存で、止まるのは「相手→VCSA の新規インバウンド」であり、VCSA からのアウトバウンドは既定で許可されたままです。

一方で、ポート単位の制御ができない・ルール順序が結果を左右する・設定ミスで自分を締め出しやすい、という制約もあります。運用では「スナップショット取得 → Allow を先に → Reject を後に → 保存前に IP とプレフィックスを再確認」を徹底し、ポート単位の要件は外部ファイアウォールや NSX 側で補完するのが安全です。

コメント

このブログの人気の投稿

vSwitchにSTPが不要な理由

vSAN OSA更改時の考慮事項

ESXi に DNS サーバを何個まで登録できるか