Networking
如何禁用 QEMU 訪客對主機埠的訪問
我正在使用以下命令來執行 QEMU VM:
qemu-system-x86_64 -enable-kvm -m 1024 -smp 2 -hda disk.qcow2
預設情況下,客戶作業系統可以訪問網際網路,但也可以訪問主機作業系統上的開放埠。如何防止來賓作業系統訪問主機埠(但不限制其網際網路訪問)?
如果您沒有高級 iptables 操作的經驗和 Linux 如何過濾本地程序流量的概述,這看起來有些問題。
在您的模式下,qemu 執行一個模擬的 NAT:所有來自 guest 的對 NIC 的呼叫都將被 qemu 程序本身轉換為 socket/connect/send/recv 呼叫。這意味著連接是由機器本身從 127.0.0.1 建立的。此時,您可以以另一個使用者身份執行 qemu,並通過添加
owner
匹配項來過濾該使用者:iptables -I OUTPUT -o lo -m owner --uid-owner username -m multiport --dports ports -j DROP
where
username
是您要過濾的使用者名,並且ports
是您希望為該機器禁用的埠的逗號分隔列表。要以其他使用者身份執行 qemu,您需要通過類似工具執行它,或者使用或sudo
以使用者身份登錄。su``login
沒有這個,你最終會過濾自己,所以如果你要添加一個通用規則來過濾埠,你也將被阻止訪問這些埠。
另一種方法是改變 qemu 進行網路的方式。過濾流量的一個好方法是將 qemu 綁定到虛擬乙太網設備:
- 啟用數據包轉發。
- 安裝
tunctl
,添加所有者是您的虛擬網路介面:
tunctl -u yourname -t qemu
(記得將此命令添加
rc.local
到使其永久化之類的東西)
- 配置 qemu 介面(使用
ip
/ifconfig
或其他作業系統提供的工具)為其分配一個免費的 /24 子網。該子網也需要在您的客戶作業系統中設置。然後執行 qemu-net tap,ifname=qemu,script=off
。再次配置來賓作業系統網路。然後,您可以輕鬆過濾由
qemu
虛擬介面表示的來賓作業系統流量:iptables -I FORWARD -i qemu -m multiport --dports ports -j DROP
應該管用。
但是 NAT 停止工作。如果您需要讓 NAT 再次工作,您應該添加一條規則來修補從您的機器發出的 IP 地址。如果您有
eth0
所有流量流向的介面,請為其啟用 NAT:iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE