bridge接続している仮想マシンのnetworkをホストOSのiptablesで制御

あんましやることないだろうけど、出来たのでメモ。設定はホストOSで。eth0をbr0でbridgeしている場合の例。

まずprocの値を変更

# echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
# echo 1 > /proc/sys/net/bridge/bridge-nf-call-arptables

次にiptables のphysdev モジュールを使う。

## 仮想ホスト 192.168.0.10 への sshをDROP
# iptables -A FORWARD -m physdev --physdev-is-in eth0 --protocol tcp --destination 192.168.0.10 --destination-port 22 --jump DROP
## 仮想ホスト 192.168.0.10 からのsshをDROP
# iptables -A FORWARD -m physdev --physdev-is-out eth0 --protocol tcp --source 192.168.0.10 --destination-port 22 --jump DROP

こんな感じで。ただ、ホストOSの仮想マシンの通信はiptablesでは止められなかった。

追記

こんなことしなくても、libvirt 標準のnwfilterで出来るやん。