我在 Windows 主机下运行了一个 Linux 客户虚拟机。如果我将网络模式设置为 NAT,客户虚拟机可以访问互联网(我想要的),但也可以访问主机 LAN(我不想要)。
由于各种原因,我无法设置单独的网络仅供客人访问互联网。
我可以使用 Windows 防火墙或某些路由软件来允许我向访客提供互联网访问权限,但阻止所有其他访问吗?
编辑-我从virtualbox论坛获得了解决方案:使用带有Windows防火墙的NAT来阻止客户机。
我的错误是试图在主机上设置规则(程序 = 全部,本地 IP = 客户机 IP 范围)。规则实际上应该是(本地 IP = 全部,程序 = virtualbox.exe),因为 NAT 在到达防火墙之前已经发生
答案1
解决方案——向主机添加防火墙规则:阻止(本地 IP = 全部,程序 = virtualbox.exe,远程 IP = {您想要阻止的范围})
答案2
你说的是 Linux,所以我假设你已经安装了 IPtables。你只能允许端口 80(HTTP)、端口 443(HTTPS)和出站 DNS 上的入站/出站流量。使用时请自担风险,因为我没有测试过这些规则。此外,执行此操作时请确保你是物理机器。如果你是远程连接,你可能会断开连接,无法返回机器。
#delete all rules
iptables -F
#change default policy to drop everything
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
#add rules for port 80 and 443 to only allow this traffic
iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
#allow outbound DNS
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
#allow loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
列表规则:
iptables -L
答案3
为了向不受信任的客户虚拟机提供互联网访问,但不授予对本地网络的访问权限,我将设置第二个运行 Linux 的受信任的客户虚拟机,并将其配置为路由器和流量过滤器。
原始客户虚拟机将有一个连接到内部网络的网络适配器。路由器客户虚拟机将有两个网络适配器,其中第一个将连接到同一个内部网络,第二个将像往常一样通过桥接或 NAT 连接到主机网络。
路由器虚拟机将运行域名系统为原始客户虚拟机提供网络连接。为了确保来自不受信任的机器的数据包不会独立于网络协议到达 LAN 接口,我将操作路由策略数据库并创建专用路由表:
[root@trustedRouter]# echo 'nolan' >> /etc/iproute2/rt_tables
[root@trustedRouter]# ip rule add iif ${intIF} table nolan
[root@trustedRouter]# ip route show table main | grep -F " dev ${intiF} " | \
while read L; do ip route add table nolan ${L}; done
[root@trustedRouter]# ip route show table main | grep -E "^default " | \
while read L; do ip route add table nolan ${L}; done
${intIF}
上面的例子就是连接到不受信任的客户机的网卡。
为了安心,nftables
还将通过以下方式进行网络过滤:
[root@trustedRouter]# nft add chain inet filter FORWARD \
meta iifname ${intIF} ip daddr ${lanADDR4} counter DROP
[root@trustedRouter]# nft add chain inet filter FORWARD \
meta iifname ${intIF} ip6 daddr ${lanADDR6} counter DROP