我可以将用户(及其应用)限制在一个网络接口上吗?

Oli*_*Oli 15 linux networking users routing iptables

我实际上有两个场景来应用这个:

  1. Multiseat Desktop:两个网络连接都与互联网网关和两个帐户在每个网络上执行带宽密集型任务。我想把它们分开,这样一个帐户只使用 eth0,第二个帐户只使用 eth1。

  2. 服务器:我在服务器上有两个 IP,我想确保邮件用户只从第二个 IP(eth0:1 别名)发送电子邮件

第二个可能是 IPTabled(我只是不知道如何)通过该接口路由电子邮件流量,但第一个将处理各种流量,因此需要基于用户。如果有基于用户的解决方案,我可以在两个地方都应用它。

Wim*_*nen 7

您可以在物理机上设置两个虚拟机,并设置网络接口桥接,以便一个 VM 使用 eth0,另一个 VM 使用 eth1。请参阅有关桥接网络虚拟盒文档部分


小智 6

您将需要使用 iptables所有者模块,也许还需要一些巧妙的数据包处理。

owner 此模块尝试为本地生成的数据包匹配数据包创建者的各种特征。它仅在 OUTPUT 链中有效,即便如此,某些数据包(例如 ICMP ping 响应)可能没有所有者,因此永远不会匹配。

--uid-owner userid 如果数据包是由具有给定有效(数字)用户 ID 的进程创建的,则匹配。

--gid-owner groupid 如果数据包是由具有给定有效(数字)组 ID 的进程创建的,则匹配。

--pid-owner processid 如果数据包是由具有给定进程 ID 的进程创建的,则匹配。

--sid-owner sessionid 如果数据包是由给定会话组中的进程创建的,则匹配。

  • 作为在所有者匹配方面做了大量工作的人,我可以说这不会总是产生预期的结果。即,并非所有数据包都有您期望的所有者。ICMP 和 ESP 是由内核(或根)拥有的类型,而不管原始应用程序如何,并且不会*由 `-m owner` 匹配。它对 TCP 和 UDP 相当可靠,但其他类型则不太可靠。实现这一 100% 的*唯一*可靠方法是使用虚拟机或容器。 (3认同)