問題の紹介
午前2時、スマートフォンの画面が「Critical network issue detected on internal services.」という真っ赤な警告で突然明るくなりました。この感覚、ITエンジニアの皆さんならご存知でしょう。Proxmoxノードに数回sshした後、すぐに何らかの開発VMが暴走しているか、さらに悪いことにデータ漏洩の危険があることに気づきました。
私のホームラボにはProxmox VE上に12のVMとコンテナがあり、本番環境に導入する前にあらゆるものを試す「遊び場」としています。しかし、ここでのネットワークセグメントの管理、分離、セキュリティは常に大きな課題です。明確なシステムがなければ、すべてが収拾のつかない混乱状態に陥る可能性があります。
このような時、私はハイパーバイザーのデフォルトファイアウォールだけに頼るよりも、もっと本格的な解決策が必要だと悟りました。ProxmoxやKVMには基本的なネットワーク機能がありますが、トラフィックの分割や深いアクセス制御のニーズを満たすには不十分です。
また、専用のファイアウォール/ルーター機器のようにVPNゲートウェイを導入することも難しいでしょう。データベースサーバー、ウェブサーバー、開発マシンがすべて同じフラットなネットワーク上にあり、明確な境界がない状況を想像してみてください。開発マシンでの小さな設定ミスがデータベースに影響を与えたり、さらに悪いことに招かれざる客に扉を開いてしまう可能性があります。
その時、私はOPNsenseやpfSenseに目を向け始めました。これらは強力なオープンソースのファイアウォール/ルーターソリューションで、仮想化環境内で堅固な仮想ファイアウォールに変えることができます。目標は外部からのリスクを阻止するだけではありません。これらのソリューションは、仮想システム内に個別の「セキュリティゾーン」を作成するのにも役立ちます。
これにより、各アプリケーション、各サービスが適切に保護されることが保証されます。最も重要なのは、それらの間のデータフローを制御できることです。これはまるで、自分の手で仮想の「城」のために多層要塞を設計し、構築するようなものです。
核となる概念
具体的な設定手順に入る前に、いくつかの基本的な概念を理解しておく必要があります。これらは私が自分のシステムを構築し始めたときに理解するのに苦労したものであり、皆さんの頭痛の種を減らすのに役立つと信じています。
OPNsenseとpfSenseとは?
これらは、FreeBSDをベースに構築された2つの強力なオープンソースのファイアウォール/ルーターOSで、仮想マシンをプロフェッショナルなネットワークデバイスに変えます。ファイアウォール、ルーティング、VPNゲートウェイ、ロードバランシング、IDS/IPSなどの機能を提供します。私はこれらを使用して、仮想マシンとインターネット間のネットワークフローを管理しています。私はモダンなインターフェースのためOPNsenseを少し好みますが、pfSenseも非常に安定しています。
なぜKVM/Proxmoxで仮想ファイアウォール/ルーターが必要なのか?
ハイパーバイザーや個々のVMのデフォルトファイアウォールに依存するだけでは不十分です。仮想ファイアウォールは以下の点で役立ちます。
- ネットワークセグメンテーション: VMを個別のゾーン(Web、データベース、開発)に分割します。ファイアウォールは唯一の交差点であり、すべてのトラフィックが検査されます。
- 詳細な制御: 特定のルールを作成します。例:Web VMは特定のIPからポート3306でのみDBにアクセスできます。
- 一元管理: 各VM上で管理する代わりに、一箇所でファイアウォールを管理します。
- 高度な機能: 包括的なセキュリティのためのVPN、IDS/IPS。
KVM/Proxmoxにおける仮想ネットワークコンポーネント
仮想ファイアウォールを機能させるには、以下を理解する必要があります。
- Linux Bridge (Proxmoxでは
vmbrX、KVMではbrX/virtual network): VMが接続する「仮想スイッチ」。WANとLANを分離するために複数のブリッジを作成します。 - Virtual Network Interface Card (vNIC): 各VMにはvNICがあり、ブリッジに接続されます。仮想ファイアウォールには、WAN用とLAN用に少なくとも2つのvNICが必要です。
これらを明確に理解することで、設定プロセスがよりスムーズになります。
詳細な実践
さて、理論は十分です。今こそ現実に向き合う時です。これらのアイデアを、円滑に機能するセキュアな仮想ネットワークシステムに変える方法です。午前2時の感覚を思い出し、ここでは絶対的な正確さが必要です。
1. ハイパーバイザーでのネットワーク環境の準備
Proxmoxホスト上に仮想ネットワークの「ポート」を作成する必要があります。
目的:
- WANネットワーク: インターネットへの接続。通常は
vmbr0(物理ネットワークカードeno1とのブリッジ)。 - LANネットワーク: VM用の内部ネットワーク、
vmbr1(完全に仮想で、物理的に接続されていません)。
Proxmox VEホスト上(/etc/network/interfacesを編集):
# File: /etc/network/interfaces
# ... (既存のvmbr0設定があれば) ...
auto vmbr0 # WANネットワーク
iface vmbr0 inet static
address 192.168.1.10/24 # WAN上のProxmoxホストIP
gateway 192.168.1.1
bridge-ports eno1 # 'eno1'をお使いの物理カードに置き換えてください
bridge-stp off
bridge-fd 0
auto vmbr1 # 仮想LANネットワーク
iface vmbr1 inet static
address 10.0.0.1/24 # LAN上のProxmoxホストの任意のIP
bridge-ports none
bridge-stp off
bridge-fd 0
適用: systemctl restart networking
2. OPNsense/pfSense用の仮想マシンの作成
Proxmox上に新しいVMを以下の設定で作成します。
- OSタイプ: Other (FreeBSD 64-bit)
- CPU: 1-2コア、RAM: 1GB-2GB、ディスク: 8GB-16GB
- ネットワークデバイス:
- Net0 (WAN): ブリッジ
vmbr0、モデルVirtIO。 - Net1 (LAN): ブリッジ
vmbr1、モデルVirtIO。
- Net0 (WAN): ブリッジ
Proxmox CLIでのqm createの使用:
VMID=101 # 任意のID
ISO_PATH=/var/lib/vz/template/iso/OPNsense-24.1.amd64.iso
STORAGE=local-lvm
qm create $VMID --name opnsense-fw --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0 --net1 virtio,bridge=vmbr1 --ostype other
qm set $VMID --scsi0 $STORAGE:8,format=qcow2
qm set $VMID --ide2 $STORAGE:iso/$ISO_PATH,media=cdrom
qm set $VMID --boot order=ide2;scsi0 --serial0 socket --vga qxl # シリアルコンソールは非常に便利です
qm start $VMID
3. OPNsense/pfSenseのインストールと基本設定
ISOから通常通りインストールします。再起動後、コンソールから:
- インターフェースの割り当て:
vtnet0をWANに、vtnet1をLANに割り当てます。 - IP設定:
- WAN: 外部ネットワークからのDHCPまたはStatic IP。
- LAN: 固定IPを必ず設定してください。例:
10.0.0.1/24。これはクライアントVMのゲートウェイとなります。
- Web GUIへのアクセス: PCから
https://10.0.0.1にアクセスし、ログインします(root/設定したパスワード)。
4. 仮想ルーティングとファイアウォールルールの設定
ここでセキュリティを形作ります。
a. LAN用のDHCPサーバー設定
Services -> DHCPv4 -> [LAN]に移動します。DHCPを有効にし、IP範囲を設定します(例: 10.0.0.100-200)。DNSは10.0.0.1を指すことができます。
b. 高度なルールによるネットワークセグメンテーション(例: Webとデータベース)
Web VM(IP: 10.0.0.10)とDB VM(IP: 10.0.0.20)があると仮定します。要件: Webはポート3306でDBにアクセスできますが、他のVMはアクセスできません。
-
エイリアスの作成 (Firewall -> Aliases):
Web_Server_IP(10.0.0.10)、DB_Server_IP(10.0.0.20)、MySQL_Port(3306)。 -
LANインターフェースでのファイアウォールルールの作成 (Firewall -> Rules -> LAN): (ルールは上から順に実行されます)
- ルール 1: WebからDBへの許可
- アクション:
Pass、インターフェース:LAN、プロトコル:TCP - 送信元:
Web_Server_IP - 宛先:
DB_Server_IP、宛先ポート:MySQL_Port
- アクション:
- ルール 2: 他のVMからDB MySQLへのブロック
- アクション:
Block、インターフェース:LAN、プロトコル:TCP - 送信元:
LAN net(またはany) - 宛先:
DB_Server_IP、宛先ポート:MySQL_Port - 注意: ルール2はルール1のすぐ下に配置する必要があります。
- アクション:
- ルール 3: デフォルトのLANすべて許可
- アクション:
Pass、インターフェース:LAN、プロトコル:Any - 送信元:
LAN net、宛先:Any - このルールは、すべてのブロック/制限ルールの下に配置されます。
- アクション:
編集後、常に
Apply changesをクリックしてください。 - ルール 1: WebからDBへの許可
5. クライアント仮想マシンの設定
他のVMは、仮想ファイアウォールをゲートウェイとして使用するように設定する必要があります。
- ネットワーク: ネットワークカードを
vmbr1(仮想LANネットワーク)に割り当てます。 - ゲートウェイ: ゲートウェイをOPNsense/pfSenseのLAN IP(
10.0.0.1)に設定します。 - DNS: DNSを
10.0.0.1またはパブリックDNSに設定します。
VM Ubuntuクライアントでの例(/etc/netplan/*.yamlを編集):
network:
ethernets:
eth0:
dhcp4: no
addresses: [10.0.0.10/24] # 静的IP
routes:
- to: default
via: 10.0.0.1 # OPNsense/pfSenseゲートウェイ
nameservers:
addresses: [10.0.0.1, 8.8.8.8]
version: 2
適用: sudo netplan apply
これにより、クライアントVMのすべてのトラフィックはOPNsense/pfSenseを通過し、設定したすべてのルールが適用されます。これで、強力で柔軟なセキュリティレイヤーの構築に成功しました。
結論
これで、警告に悩まされた長い夜から、強固な仮想ファイアウォール/ルーターシステムを自らの手で構築するまで、仮想ネットワークセキュリティの問題を「解決」しました。個人的には、ProxmoxホームラボにOPNsenseを導入して以来、ぐっすり眠れるようになっただけでなく、新しいサービスを試す際にも非常に安心感を得られるようになりました。
KVM/Proxmox環境でOPNsense/pfSenseを使った仮想ファイアウォールとルーティングを設定することは、単にセキュリティレイヤーを追加するだけではありません。システム内のデータフローについて、より包括的な視点と深い制御を可能にします。リスクを軽減するためのネットワークセグメンテーションから、正当なトラフィックのみが通過することを保証するための詳細なルールの設定まで、すべてがあなたの手の届くところにあります。
これは大きな進歩です。これにより、ホームラボでの最も「クレイジー」なアイデアにも対応できる、強力かつ安全な仮想インフラを構築できます。さらに重要なのは、本番環境の重要なアプリケーションも保護できることです。OPNsense/pfSenseのVPN、IDS/IPSなどの他の機能も引き続き探索し、システムを最適化してください!

