有没有办法在 Debian 中阻止某些程序连接到互联网(阻止传出连接的防火墙),例如,阻止在 wine 中运行的 Windows 程序打电话回家?
答案1
你可以使用Linux容器创建一个没有网络接口的环境。例如,如果我创建一个如下的配置文件:
# lxc.network.type = empty
然后启动一个 shell,如下所示:
# lxc-execute --name bash -f /tmp/lxc.conf /bin/bash
我会发现在这个 shell 中除了以下之外没有可用的网络设备lo
:
# ifconfig -a
lo Link encap:Local Loopback
LOOPBACK MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
请注意,您必须是 root 才能运行lxc-execute
,因此让它在您的桌面环境中运行wine
可能会很棘手。
显然还有一个sandbox
命令可作为 SELinux 的一部分。这是使用沙箱运行 Firefox 的示例。这需要您启用 selinux。
答案2
一种更简单的方法是以不同用户身份运行 WINE 程序并设置 netfilter 来丢弃来自该用户的数据包。
例如,其中“wineusername”是您的 Wine 用户,em1 是您的网络接口:
iptables -A OUTPUT -o em1 -m owner --uid-owner wineusername -j DROP
iptables -A FORWARD -o em1 -m owner --uid-owner wineusername -j DROP
iptables -A INPUT -o em1 -m owner --uid-owner wineusername -j DROP