ゲスト マシンがインターネットにアクセスできないようにファイアウォール ルールを作成しようとしています。サーバー (Ubuntu サーバー 22.0、KVM を使用) には、ルーターに接続された物理接続 (enp34s0) とブリッジ インターフェイス (br0) があり、ゲストは br0 と同じネットワークにブリッジされたタップ デバイス (vnet0) を使用しています。vnet0 に適用しようとしたルールはどれも機能しませんでした。
たとえば、次のコマンドで ping を防止しようとしました。
iptables -I FORWARD -i vnet0 -o br0 -p icmp -j DROP
iptables -I FORWARD -o vnet0 -i br0 -p icmp -j DROP
iptables -I FORWARD -i vnet0 -o enp34s0 -p icmp -j DROP
iptables -I FORWARD -o enp34s0 -i br0 -p icmp -j DROP
それでも、ゲストとの間で ping を送信できます。(https を防ぐために -p tcp --dport 443 も試しました) 何か間違っているのでしょうか? TAP デバイスであることと関係があるかどうかはわかりませんが、Web 上で関連する情報は見つかりませんでした。
答え1
FORWARD
ICMP トラフィックをキャプチャするためのログ ルールをテーブルに追加すると...
iptables -I FORWARD -p icmp -j LOG --log-prefix 'FORWARD_ICMP '
...入力インターフェースは TAP デバイスではなくブリッジであることがわかります。
Sep 09 19:19:20 fizzgig kernel: FORWARD_ICMP IN=virbr0 OUT=wlp0s20f3
PHYSIN=vnet1 MAC=52:54:00:f7:70:2a:52:54:00:18:f8:12:08:00 SRC=192.168.122.210
DST=8.8.8.8 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=59668 DF PROTO=ICMP TYPE=8
CODE=0 ID=5 SEQ=1
つまり、ルールが-i vnet0
一致することは決してありません。
属性に TAP デバイスが表示されますPHYSIN
。physdev
次のようにモジュールを使用してこれを一致させることができます。
iptables -A FORWARD -m physdev --physdev-in vnet1 -j DROP
(反対方向のトラフィックを一致させる必要がある場合は、--physdev-out マッチもあります。)