Tim*_*ean 4 networking kvm qemu
我使用以下命令来运行 QEMU VM:
qemu-system-x86_64 -enable-kvm -m 1024 -smp 2 -hda disk.qcow2
默认情况下,来宾操作系统可以访问互联网,但也可以访问主机操作系统上的开放端口。如何防止来宾操作系统访问主机端口(但不限制其互联网访问)?
小智 5
如果您没有高级 iptables 操作经验以及 Linux 如何过滤本地进程流量的概述,这看起来有些问题。
在您的模式下,qemu 运行模拟 NAT:来自 guest 虚拟机的所有对 NIC 的调用都将被 qemu 进程本身转换为套接字/连接/发送/接收调用。这意味着连接是由机器本身从 127.0.0.1 建立的。此时,您可以作为另一个用户运行 qemu,并通过添加owner匹配来过滤该用户:
iptables -I OUTPUT -o lo -m owner --uid-owner username -m multiport --dports ports -j DROP
Run Code Online (Sandbox Code Playgroud)
其中username是要过滤的用户名,ports是要为该计算机禁用的端口的逗号分隔列表。要以其他用户身份运行 qemu,您需要通过或 以用户身份使用或sudo登录等工具来运行它。sulogin
如果没有这个,您最终会过滤自己,因此如果您添加通用规则来过滤端口,您也将被阻止访问这些端口。
另一种方法是改变 qemu 的网络方式。过滤流量的一个好方法是将 qemu 绑定到虚拟以太网设备:
启用数据包转发。
安装tunctl,添加虚拟网络接口,所有者是你:
tunctl -u yourname -t qemu
(记得将此命令添加到诸如rc.local使其永久化的命令中)
ip/ifconfig或其他操作系统提供的工具)为其分配一个空闲的 /24 子网。该子网也需要在您的来宾操作系统中设置。然后使用 运行 qemu -net tap,ifname=qemu,script=off。再次配置来宾操作系统网络。然后您可以轻松过滤由虚拟接口表示的来宾操作系统流量qemu:
iptables -I FORWARD -i qemu -m multiport --dports ports -j DROP
Run Code Online (Sandbox Code Playgroud)
应该管用。
但 NAT 停止工作了。如果您需要使 NAT 再次工作,您应该添加一条规则来修补从您的计算机发出的 IP 地址。如果您有eth0所有流量都经过的接口,则为其启用 NAT:
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3731 次 |
| 最近记录: |