VyOS on KVM で透過ファイアウォールを作る

スポンサーリンク

グローバルなネットワークにつながったホスト上に、KVM で複数の VM を動かしているが、インターネットにそのまま晒すのは心許ないので VyOS を用いて透過 FW を構築する。

VyOS とは Vyatta からフォークしたオープンソースのソフトウェアルータのこと。


スポンサーリンク

前提

  • ホストの OS は Ubuntu Server 12.04.4 LTS を使う
  • VyOS には IP アドレスを振らず、透過 FW にする

構成図

構成図を次に示す。

構成図

]2 構成図

このように、ブリッジ br1vybr0 を VyOS でつなぎ、そこに透過 FW を設定する。ゲスト OS は vybr0 に接続する。

手順

ブリッジの設定

まずはホスト OS でブリッジの設定をする。

必要なパッケージを入れる。

$ sudo apt-get install bridge-utils

VyOS 用の仮想ブリッジ vybr0 を追加する。

$ sudo brctl addbr vybr0
$ sudo ip link set dev vybr0 up

/etc/network/interfaces を編集して、ブリッジの設定をする。

auto eth1
iface eth1 inet manual

auto br1
iface br1 inet manual
        bridge_ports eth1

auto vybr0
iface vybr0 inet manual
        pre-up brctl addbr $IFACE
        post-down brctl delbr $IFACE
        up ip link set dev $IFACE up
        down ip link set dev $IFACE down

ネットワークを再起動する。

$ sudo service networking restart

設定されたか確認する。

$ brctl show
bridge name     bridge id               STP enabled     interfaces
br1             8000.e41f138066bc       no              eth1
vybr0           8000.fe54006edfa5       no

virsh にブリッジを追加

追加した各ブリッジを libvirt で使えるようにする。

XML の設定ファイルを作成する。

$ sudo $EDITOR /var/lib/libvirt/network/br1.xml
<network>
  <name>br1</name>
  <forward mode='bridge'/>
  <bridge name='br1' />
</network>

 

$ sudo $EDITOR /var/lib/libvirt/network/vybr0.xml
<network>
  <name>vybr0</name>
  <forward mode='bridge'/>
  <bridge name='vybr0' />
</network>

libvirt に追加する。

$ sudo virsh net-define /var/lib/libvirt/network/br1.xml
$ sudo virsh net-define /var/lib/libvirt/network/vybr0.xml
$ sudo virsh net-autostart br1
$ sudo virsh net-autostart vybr0

追加されたか確認する。

$ sudo virsh net-list
Name                 State      Autostart
-----------------------------------------
br1                  active     yes
vybr0                active     yes

VyOS のインストール

KVM のゲストとして VyOS をインストールする。VM の NIC には br1vybr0 の2つをつないでおく。

iso イメージはミラーサイトから入手できる。インストールも特に難しいことはなく、iso から起動して次のコマンドを実行し、あとは指示に従って適宜設定していけば良い。

$ install image

以降 VyOS は libvirt の console からいじることにする。ログインした直後は操作モードになっているので、設定モードに切り替える。

$ configure
# 

もしネットワーク越しに設定したければ、新しい NIC を追加してホストのプライベート側のブリッジとつなぎ、IP アドレスを振って sshd を有効化しておけば良い。

# set interface ethernet eth2 address <IP_ADDRESS/MASK>
# set service ssh

ブリッジの設定

VyOS が用意できたので設定していく。

ブリッジを作成する。

# set interfaces bridge br0

ホストの vybr0 につながった eth0 と、ホストの br1 につながった eth1 をブリッジに接続する。

# set interfaces ethernet eth0 bridge-group bridge br0
# set interfaces ethernet eth1 bridge-group bridge br0

設定を反映させる。

# commit
# save

設定モードを抜けて、設定内容を確認する。

# exit
$ show bridge
bridge name     bridge id               STP enabled     interfaces
br0             0000.5254001f8d44       no              eth0
                                                        eth1

これでとりあえずホストの vybr0eth0 間が通信できるようになる。

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

ブリッジに対してルールを設定していく。VyOS には iptables で言うところの physdev 相当の機能がないようで、パケットの流入元デバイスを区別できないので、主に送信元 IP アドレスに基いてルールを作成する。

まず新しいルール名を作成して br0 に適用する。

$ configure
# set firewall name L2FW default-action drop
# set interfaces bridge br0 firewall in name L2FW

自ネットワークを定義する。

# set firewall group network-group DMZ-NET network 203.0.113.0/24

出のパケットは許可する。

# set firewall name L2FW rule 100 action accept
# set firewall name L2FW rule 100 source group network-group DMZ-NET

返ってきたパケットは許可する。

# set firewall name L2FW rule 110 action accept
# set firewall name L2FW rule 110 state established enable
# set firewall name L2FW rule 110 state related enable
# set firewall name L2FW rule 110 destination group network-group DMZ-NET

あとは必要に応じて、入のルールに穴を開けていく。

最後に設定を保存する。

# commit
# save

これで他の VM にファイアウォールをかけられるようになった。

参考ページ

コメント

タイトルとURLをコピーしました