QEMU/KVM
さまざまなマシンの仮想化に使用しています。ゲストシステムとホストシステム間でファイルを共有するために、Samba
ゲストシステムにネットワークドライブを提供するホスト上でサーバーを実行します。
すべてのゲストはQEMU標準ブリッジを介してネットワークを受信しますvirbr0
。
今私の質問は次のとおりです。
すべてのゲストのパブリックインターネットアクセスを禁止する方法いいえSamba
ネットワークドライブにアクセスできないようにブロックしますか?
答え1
最近、仮想マシン(kvm-qemu + virt-manager)へのインターネットアクセスをブロックする必要がありました。
仮想マシンを起動すると、ホストで次の iptables ルールを見つけることができます (まだ存在しない場合)。
$ iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o virbr0 -p udp -m udp --dport 68 -j ACCEPT
この構成により、仮想マシンはインターネットにアクセスできます(FORWARDルール)。したがって、FORWARDルールを削除するだけです。
$ iptables -L --list-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT udp -- anywhere anywhere udp dpt:domain
2 ACCEPT tcp -- anywhere anywhere tcp dpt:domain
3 ACCEPT udp -- anywhere anywhere udp dpt:bootps
4 ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere 192.168.122.0/24 ctstate RELATED,ESTABLISHED
2 ACCEPT all -- 192.168.122.0/24 anywhere
3 ACCEPT all -- anywhere anywhere
4 REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
5 REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT udp -- anywhere anywhere udp dpt:bootpc
$ iptables -D FORWARD 1
$ iptables -D FORWARD 2
$ iptables -D FORWARD 3
$ iptables -P FORWARD DROP
これは実際には仮想マシンへのインターネットアクセスをブロックするのに十分です。妄想がある場合は、ルータから直接サンバポートをブロックできます(ルータインターフェイスを使用するか、コマンドラインファイアウォールを使用してシェルアクセスがある場合)。