0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

# libvirt環境におけるiptables構成の読み解きと整理

Posted at

はじめに

KVM仮想化環境を構築する際、libvirtが自動生成するiptablesルールに戸惑うことがあります。
本記事では、iptables -L -n および iptables -t nat -L -n の出力をもとに、iptablesの構造とlibvirtのネットワーク制御について整理します。


iptablesの基本構造

iptablesはLinuxの通信制御を担うツールで、以下のような構造を持ちます:

🔹 テーブル(tables)

テーブル名 目的
filter 通信の許可・拒否(基本)
nat IPやポートの変換(NAT)
mangle パケットの詳細変更(TTLなど)
raw conntrack前の処理(高度な用途)

🔸 チェイン(chains)

チェイン名 意味
INPUT 外部 → ホスト(受信)
OUTPUT ホスト → 外部(送信)
FORWARD ホストを経由する通信(VMなど)
PREROUTING 通信が届く前の処理(nat用)
POSTROUTING 通信が出ていく直前の処理(nat用)

libvirtによるiptablesルールの自動生成

libvirtが仮想ネットワーク(例:virbr0)を作成すると、以下のようなチェインが追加されます:

  • LIBVIRT_INP / LIBVIRT_OUT:DNS・DHCP通信の許可
  • LIBVIRT_FWO / LIBVIRT_FWI:VMと外部ネットワークの通信制御
  • LIBVIRT_FWX:VM同士の通信許可
  • LIBVIRT_PRT:NAT変換(MASQUERADE)

実際のiptablesルールの読み解き

🔹 filterテーブル

Chain INPUT
→ LIBVIRT_INP: DNS(53), DHCP(67)の受信許可

Chain OUTPUT
→ LIBVIRT_OUT: DNS(53), DHCP(68)の送信許可

Chain FORWARD
→ LIBVIRT_FWX: VM間通信を許可
→ LIBVIRT_FWO: VM → 外部通信を許可(172.16.1.0/24)
→ LIBVIRT_FWI: 外部 → VM通信は応答のみ許可(RELATED,ESTABLISHED)

🔹 natテーブル
Chain POSTROUTING
→ LIBVIRT_PRT: VMのIPをホストIPに変換(MASQUERADE)

Chain LIBVIRT_PRT
→ RETURN: マルチキャスト・ブロードキャストは変換対象外
→ MASQUERADE: VM → 外部通信をSNATで変換

通信の流れとセキュリティ設計

VMが外部へ通信 → FORWARD → LIBVIRT_FWO → 許可

通信が外へ出る → POSTROUTING → LIBVIRT_PRT → MASQUERADE

外部からの応答 → LIBVIRT_FWI が RELATED,ESTABLISHED を許可

VM間通信 → LIBVIRT_FWX が許可

この構成により、VMは外部と通信可能でありつつ、不要な外部からの接続は拒否される設計になっています。

まとめ

iptablesは「テーブル」と「チェイン」で構成される通信制御の仕組み

libvirtは仮想ネットワークに必要なルールを自動生成してくれる

DNS・DHCP・NAT・VM間通信など、用途ごとにチェインが分かれている

セキュリティと利便性を両立した構成になっている

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?