针对单个进程的 Linux 网络“监狱”

针对单个进程的 Linux 网络“监狱”

我需要针对网络特定的事情调整网络应用程序,例如:

  • 使其使用与 /etc/resolv.conf 中的默认 DNS 服务器不同的 DNS 服务器
  • 确保它不会尝试使用 tcp/udp 连接连接到某些主机/端口

我知道我可以通过修改 /etc/resolv.conf 并编写一些 iptables 规则来解决,但是对传出的 IP 数据包采用默认的 DENY 防火墙策略可能会导致服务器上运行的其他服务出现故障。

我知道我可以设置一个具有完整操作系统的虚拟机并在那里运行我的应用程序,但这似乎有点过头了。

是否有可能为单个应用程序(比如单个 Linux 进程)设置一个网络“监狱”,该监狱可以接受类似 iptables 的规则,以允许进出该特定应用程序的网络流量(比如 IP 数据包及以上)?也许可以通过一些动态加载的库来实现,这些库可以处理网络层,就像 tsocks 一样,但更细粒度?

答案1

尝试使用开放VZ容器。它比 chroot 提供更好的隔离,但开销比虚拟机少得多。容器可以拥有自己的文件系统、用户、IP 地址和 iptables 规则。由于容器不运行自己的内核,因此开销很小。

答案2

如果你可以以特定用户身份运行该应用程序,则可以使用

--uid-owner <user>

标志来匹配该特定用户。

相关内容