QEMU:如何禁止访客访问公共互联网,但保留他们对本地(samba)网络驱动器的访问?

QEMU:如何禁止访客访问公共互联网,但保留他们对本地(samba)网络驱动器的访问?

我用于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

这实际上应该足以阻止对虚拟机的互联网访问。如果你很偏执,你可以直接从路由器阻止 samba 端口(使用路由器接口,或者如果你有使用命令行防火墙的 shell 访问权限)。

相关内容