esxcliでESXiファイアウォールをマスターする:手動管理から自動化への移行

VMware tutorial - IT technology blog
VMware tutorial - IT technology blog

ESXiファイアウォールへのアプローチ:Web UIに惑わされてはいけない

数十台のホストで構成されるクラスターを管理している場合、vSphere Clientを使用して1台ずつファイアウォールを設定するのは、まるで「スプーンで土を掘る」ようなものです。これは、数百台の仮想マシンを効率的に分類・管理する際と同様、GUI操作の限界を感じる場面です。グラフィカルユーザーインターフェース(GUI)は初心者には直感的ですが、システムが拡張されるにつれ、繰り返しのクリック操作は設定ミスの原因となり、時間を浪費します。

ESXiのファイアウォールには独自のメカニズムがあります。これはサービスに基づいたステートレス(stateless)なフィルタリングです。Linuxのiptablesとは異なり、任意のルールを自由に追加することはできず、既存のルールセット(Ruleset)に基づいて操作する必要があります。

  • vSphere Client: 素早い確認や1〜2個の個別のルール修正に適しています。
  • esxcli: 自動化のための究極のツールです。SSHやスクリプトを介して、絶対的な精度で一括設定を行うことができます。

なぜプロフェッショナルはesxcliを選ぶのか?

スピードと一貫性のメリット

esxcliの最大の利点は、再利用性にあります。Web UIにログインしてメニューを探すのに5分かける代わりに、コマンドを1行貼り付けるだけで3秒で済みます。本番環境(production)では、これらのコマンドを.shファイルに保存したり、AnsibleによるVMware vSphereの自動化を取り入れたりするのが一般的です。新しいホストを追加する際、スクリプトを実行するだけで既存システムと100%一致する設定が保証され、手動操作によるミスを完全に排除できます。

構文のハードル

唯一の欠点は、構文がかなり長く、無機質であることです。ruleset-idの1文字を打ち間違えるだけでエラーが発生し、最悪の場合、誤ってSSHポートをブロックしてホストから締め出されるリスクもあります。ESXiのファイアウォールはデフォルトで非常に厳格であり、CiscoやFortinetのように自由にルールを作成するのではなく、定義されたサービスIDに従う必要があります。

esxcliによるファイアウォール設定の実践

まずは、ホストのSSHを有効にし、ターミナルからアクセスしてください。以下は、停電時のVMware ESXiグレースフルシャットダウンと同様に、私が普段適用している標準的な手順です。

1. ファイアウォールの「健康状態」を確認する

変更を加える前に、システムの現在のステータスを確認しましょう。

esxcli network firewall get

通常、Default ActionDROPEnabledtrueであるべきです。ファイアウォールが無効になっている場合、ホストはセキュリティリスクにさらされています。すぐに有効にしましょう:

esxcli network firewall set --enabled true

2. ルールセット(サービス一覧)の管理

ESXi上のすべてのサービス(SSH、vMotion、Web Accessなど)はルールセットの中にあります。すべてを一覧表示するには、次のコマンドを使用します。

esxcli network firewall ruleset list

NameEnabledの列が表示されます。sshServervpxa(vCenter用)などの重要なIDに注目してください。

3. 瞬時にサービスポートを開閉する

例えば、リモートメンテナンスのためにSSHサービスを有効にする必要がある場合は、次のようにします。

# SSHサービスを有効にする
esxcli network firewall ruleset set --enabled true --ruleset-id=sshServer

# Web Accessを無効にする(ホストIP経由のvSphere Clientアクセスをブロック)
esxcli network firewall ruleset set --enabled false --ruleset-id=webAccess

4. アクセスIPの制限:極めて重要なセキュリティレイヤー

これはホストを保護するために最も重要な部分です。デフォルトでは、ポートを開放するとESXiは全世界に対して公開されます。ホストがパブリックIPを持っている場合や、安全でない内部ネットワークにある場合、これは非常に危険です。VMware vSphereでNative Key ProviderとVM Encryptionを設定する方法を参考に、セキュリティをさらに強化することを検討してください。

私は常に「ホワイトリスト」の原則を適用しています。例えば、管理用ワークステーション(192.168.1.50)と管理用VLANセグメント(10.10.10.0/24)のみにSSHアクセスを許可する場合を考えます。

# ステップ1:すべてのIPからのアクセス権をロックする
esxcli network firewall ruleset set --allowed-all false --ruleset-id=sshServer

# ステップ2:許可するIPを指定する
esxcli network firewall ruleset allowedip add --ip-address=192.168.1.50 --ruleset-id=sshServer
esxcli network firewall ruleset allowedip add --ip-address=10.10.10.0/24 --ruleset-id=sshServer

# ホワイトリストを再確認する
esxcli network firewall ruleset allowedip list --ruleset-id=sshServer

5. カスタムポートの問題 (Custom Port)

esxcliを使用して任意のポート(例:8080)を作成することはできません。ESXiのファイアウォールは/etc/vmware/firewall/にあるXMLファイルから設定を読み込みます。サードパーティ製アプリケーションをインストールする場合は、ここに新しいXMLファイルを作成する必要があります。ただし、注意してください。これらのファイルは、カスタムVIBとしてパッケージ化しない限り、ホストの再起動時にすべて消失します。

運用現場からの教訓

長年VMwareシステムを管理してきた経験から、リスクを回避するための3つの黄金律を導き出しました。

  • 自分自身を締め出さない: --allowed-all falseを適用する前に、使用しているIPが許可リストに追加されていることを必ず確認してください。
  • 並行テスト: 常に実行中のSSHセッションを維持し、別のマシンから新しいセッションを開いてルールを確認してください。間違っていた場合でも、古いセッションから修正が可能です。
  • 制御された自動化: esxcliコマンドをBashスクリプトにまとめましょう。これにより、セキュリティ手順を忘れることなく、10台のホストを1台の時と同じ速さで展開できます。

esxcliをマスターすることは、業務を楽にするだけでなく、VMware ESXiをActive Directoryにドメイン参加させる方法のような知識と合わせ、システム管理のスキルを証明することにもつながります。安全なシステム構築を!

Share: