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

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

我实际上有两种应用场景:

  1. 多座桌面:两个网络连接都带有互联网网关,每个帐户上有两个帐户执行带宽密集型任务。我想将它们分开,这样一个帐户仅使用 eth0,第二个帐户仅使用 eth1。

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

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

答案1

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

答案2

你会想要使用 iptables所有者模块,也许还有一些巧妙的数据包修改。

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

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

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

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

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

答案3

对于第一点,我不确定这是否可行。您想根据用户的用户 ID 进行一些路由操作。上次检查时我没有看到这种可能性。

对于第二点,您想要使用的不是 iptables,而是 iproute2(http://lartc.org/howto/ 和http://www.policyrouting.org/iproute2.doc.html以获得完整的文档)。它是 ifconfig/route 命令的替代品,因为它们被认为已过时。 iproute2 允许您根据数据包的来源路由数据包。那就是你想要的

相关内容