Networking

QEMU:如何禁止客人訪問公共網際網路但保留他們對本地(samba)網路驅動器的訪問權限?

  • April 16, 2019

我正在使用QEMU/KVM各種機器的虛擬化。為了在來賓系統和主機系統之間共享文件,我在Samba主機上執行了一個 -server,它為來賓機器提供了一個網路驅動器。

所有客人都通過 QEMU 標準網橋接收他們的網路virbr0


我現在的問題是:

如何在阻止所有訪客訪問Samba網路驅動器的情況下禁止所有訪客訪問公共網際網路?

我最近需要阻止對虛擬機的 Internet 訪問(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

此配置允許虛擬機訪問 Internet(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

這實際上應該足以阻止對虛擬機的 Internet 訪問。如果您偏執,您可以直接從路由器阻止 samba 埠(使用路由器介面,或者如果您可以使用命令行防火牆對其進行 shell 訪問)。

引用自:https://unix.stackexchange.com/questions/418871