SJ blog
Qubes OS
Z

信頼度ランク

S 公式ソース確認済み
A 成功実績多数・失敗例少数
B 賛否両論
C 動作未確認・セキュリティリスク高
Z 個人所感

Qubes OS のネットワーク分離設計 — 実践的なセキュリティアーキテクチャ

Qubes OS で仕事・個人・匿名通信・バンキングを完全分離するネットワーク設計の実例、VPN+Torの多段構成、sys-net複数化による物理ネットワーク分離を解説します。

一言結論

Qubes OSのネットワーク設計の真価はVMごとに異なる経路(直接・VPN・Tor)を割り当てられる点にあり、sys-vpnをProxyVMとして挟む構成にすればVPN漏洩時の被害範囲を特定のVMだけに限定できる。

なぜネットワーク分離が重要か

ひとつのネットワークスタックを全アプリで共有すると:

  • 全アプリが同じIPアドレスから通信される(追跡されやすい)
  • マルウェアが他のアプリの通信を盗聴できる可能性がある
  • VPN が漏洩するとすべての通信が露出する

Qubes OS では VM ごとに異なるネットワーク経路を設定できます。

基本的なネットワーク設計

インターネット

sys-net ←── 物理ネットワークカードを管理

sys-firewall ←── ファイアウォール

    ├── work(業務通信)
    ├── personal(個人通信)
    └── untrusted(信頼しない通信)

VPN を組み込んだ設計

インターネット

sys-net

sys-vpn ←── VPN クライアントが動く ProxyVM

sys-firewall-vpn ←── VPN 後のファイアウォール

    ├── work-vpn(VPN 経由の業務通信)
    └── personal-vpn(VPN 経由の個人通信)

sys-vpn の作成

# dom0 ターミナルで
qvm-create --template fedora-40 --label green sys-vpn
qvm-prefs sys-vpn provides_network true  # ネットワーク提供VMとして設定
qvm-prefs sys-vpn netvm sys-net

# VPN を使う VM の設定
qvm-prefs work netvm sys-vpn
# sys-vpn のターミナルで VPN を設定
sudo dnf install -y openvpn

# /rw/config/rc.local に VPN 起動を追加
echo "sudo openvpn /etc/openvpn/my-vpn.conf &" >> /rw/config/rc.local

Tor + VPN の多段構成

構成1: VPN の中に Tor(Tor over VPN)

インターネット → VPN → Tor
AppVM → sys-whonix → sys-vpn → sys-net → インターネット

利点: VPN プロバイダが Tor を使っていることを知らない
欠点: VPN プロバイダはあなたがTorを使っていることを見る

構成2: Tor の中に VPN(VPN over Tor)

インターネット → Tor → VPN
AppVM → sys-vpn-tor → sys-whonix → sys-net → インターネット

利点: 接続先がTorの出口ノードではなくVPNを見る
欠点: 設定が複雑

# VPN over Tor 設定(sys-vpn-tor)
qvm-create --template fedora-40 --label purple sys-vpn-tor
qvm-prefs sys-vpn-tor provides_network true
qvm-prefs sys-vpn-tor netvm sys-whonix  # Whonix 経由でVPN接続

# sys-vpn-tor を使う VM
qvm-prefs anonymous-work netvm sys-vpn-tor

物理ネットワークカードの分離

複数の NIC がある場合、完全に分離できます:

# dom0 ターミナルで NIC を確認
lspci | grep -i network

# 2つ目のNICを管理する sys-net2 を作成
qvm-create --template fedora-40 --label gray sys-net2
qvm-prefs sys-net2 provides_network true

# 2つ目のNICを sys-net2 にアタッチ
qvm-pci attach sys-net2 dom0:02_00.0 --persistent

これにより、業務用ネットワーク(有線)と個人用ネットワーク(Wi-Fi)を完全に分離できます。

バンキング専用の設計

# banking VM を作成(最高のセキュリティ設定)
qvm-create --template fedora-40 --label black banking

# ネットワークを最も信頼できる経路に
qvm-prefs banking netvm sys-firewall  # Tor を使わない

# ファイアウォールで銀行のドメインだけ許可
qvm-firewall banking add allow dsthost=mybank.co.jp proto=tcp dstports=443
qvm-firewall banking add deny  # それ以外は拒否

ファイアウォールのルール設計

メール専用VMのルール

qvm-firewall email list  # 現在のルール確認

# IMAP(993) と SMTP(587/465) だけ許可
qvm-firewall email add allow proto=tcp dstports=993
qvm-firewall email add allow proto=tcp dstports=587
qvm-firewall email add allow proto=tcp dstports=465
qvm-firewall email add deny

開発VM(GitHub だけ許可)

qvm-firewall dev add allow dsthost=github.com proto=tcp dstports=443
qvm-firewall dev add allow dsthost=github.com proto=tcp dstports=22  # SSH
qvm-firewall dev add allow dsthost=api.github.com proto=tcp dstports=443
qvm-firewall dev add deny

DNS over HTTPS(DoH)の設定

# AppVM のターミナルで
sudo dnf install -y dnscrypt-proxy

# /etc/dnscrypt-proxy/dnscrypt-proxy.toml を設定
# listen_addresses = ['127.0.0.1:53']
# server_names = ['cloudflare', 'google']

sudo systemctl enable dnscrypt-proxy
sudo systemctl start dnscrypt-proxy

ネットワーク設計のチェックリスト

用途推奨ネットワーク経路
銀行・金融sys-net → sys-firewall(直接、ファイアウォールで制限)
業務sys-net → sys-vpn → sys-firewall
個人ブラウジングsys-net → sys-firewall
匿名ブラウジングsys-whonix(Tor)
開発sys-net → sys-firewall(GitHubなど制限)
マルウェア解析sys-net → sys-firewall(または完全オフライン)
最重要データネットワークなし(vault)

まとめ

Qubes OS のネットワーク分離は「各VMがどのネットワーク経路を使うか」を個別に設定できる唯一の実用的なシステムです。

最初は複雑に見えますが、一度設定してしまえば自動的に隔離が機能します。セキュリティの要件に合わせて徐々に分離を増やしていくアプローチをお勧めします。