SJ blog
Qubes OS
Z

信頼度ランク

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

Qubes OS のネットワーク設定を理解する

Qubes OS の sys-net / sys-firewall の役割、ファイアウォールルールの設定、VMごとに異なるネットワーク経路を設定する方法を解説します。

一言結論

Qubes OSのネットワークはsys-net→sys-firewallの2層構造が基本で、特定のVMをオフラインにするにはqvm-prefs vault netvm ''と設定するだけであり、ネットワーク経路をVM単位で制御できるのが最大の利点だ。

Qubes OS のネットワーク構成

インターネット

sys-net(ネットワークカードを管理)

sys-firewall(ファイアウォール)

work / personal / untrusted(AppVM)

sys-net

  • 物理ネットワークカード(Wi-Fi / 有線)を管理
  • DHCP クライアントが動いている
  • インターネットに直接面しているため、最も攻撃を受けやすい
  • ここが侵害されても、sys-firewall が壁になる

sys-firewall

  • AppVM とインターネットの間のゲートウェイ
  • VM ごとのファイアウォールルールを適用する
  • ここを経由することで AppVM は直接インターネットに面しない

ネットワーク設定の確認

# dom0 ターミナルで
qvm-ls --all -O name,netvm,ip,dns

# 特定のVMのネットワーク設定
qvm-prefs work netvm
qvm-prefs work ip

VM ごとのネットワークを変更する

# ネットワークなしに変更(vault など)
qvm-prefs vault netvm ''

# sys-whonix 経由(Tor)に変更
qvm-prefs anonymous-work netvm sys-whonix

# 特定のVMにネットワークを提供する別VMを指定
qvm-prefs custom-vm netvm my-vpn-gateway

GUI からの変更: Qubes Manager → VM 選択 → SettingsBasicNetworking

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

AppVM ごとに接続できるホスト・ポートを制限できます。

Qubes Manager → VM 選択 → Firewall rules タブ

コマンドラインでのファイアウォール設定

# work VM に接続先を制限する例
qvm-firewall work list  # 現在のルール確認

# 特定のIPへの接続だけを許可(それ以外は拒否)
qvm-firewall work add allow dsthost=192.168.1.100 proto=tcp dstports=443
qvm-firewall work add deny  # デフォルト拒否

# ルールを削除
qvm-firewall work del 0  # 最初のルールを削除

ファイアウォールルールの例

# メールクライアント用VM: SMTPとIMAPだけ許可
allow proto=tcp dstports=465  # SMTP over SSL
allow proto=tcp dstports=993  # IMAP over SSL
deny                           # それ以外は拒否

# 開発用VM: GitHubだけ許可
allow dsthost=github.com proto=tcp dstports=443
allow dsthost=api.github.com proto=tcp dstports=443
deny

VPN の設定

VPN 専用 ProxyVM の作成

# VPN ゲートウェイ VM を作成
qvm-create --template fedora-40 --label green sys-vpn

# この VM を ネットワーク提供元に設定
qvm-prefs sys-vpn netvm sys-net

# sys-vpn を通じてインターネットに接続する VM を設定
qvm-prefs work netvm sys-vpn

OpenVPN の設定(sys-vpn 内で)

# sys-vpn のターミナルで
sudo dnf install -y openvpn

# VPN プロバイダの設定ファイルを配置
sudo cp vpn-config.ovpn /etc/openvpn/

# 接続
sudo openvpn /etc/openvpn/vpn-config.ovpn

Qubes OS では起動時に自動で VPN 接続させるスクリプトを /rw/config/rc.local に記述できます。

DNS 設定

# VM 内での DNS 確認
cat /etc/resolv.conf

# カスタムDNS(Qubes Firewall 経由)
# /rw/config/rc.local に追加
echo "nameserver 1.1.1.1" > /etc/resolv.conf

Tor 経由の匿名通信(Whonix)

# sys-whonix を経由する VM を設定
qvm-prefs anonymous-browser netvm sys-whonix

詳細は Whonix の記事で解説します。

ネットワークトラブルシューティング

# sys-net 内でネットワーク確認
qvm-run sys-net "ip addr show"
qvm-run sys-net "ping -c 3 8.8.8.8"

# AppVM 内でネットワーク確認
qvm-run work "curl -s https://httpbin.org/ip"

# ファイアウォールのログ確認
qvm-run sys-firewall "sudo journalctl -u qubes-firewall -n 50"

まとめ

Qubes OS のネットワーク設計の要点:

  • ネットワークを扱う VM(sys-net)は分離されている
  • VM ごとに異なるネットワーク経路を設定できる
  • ファイアウォールルールで接続先を制限できる
  • VPN や Tor を特定の VM だけに適用できる

この柔軟性が Qubes OS の大きな強みです。「この VM はこのネットワーク経路だけ使う」という設計が実現できます。