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


15

实际上,我有两种情况可以应用:

  1. Multiseat Desktop:具有Internet网关的两个网络连接,以及两个帐户,每个帐户分别执行带宽密集型任务。我想将它们拆分为一个帐户仅使用eth0,第二个帐户仅使用eth1。

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

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

Answers:


6

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

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

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

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

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

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


您可以使用iptables设置标记,然后可以在路由表中使用该标记。请参阅MARK和CONNMARK目标。在iproute中,其“ ip规则添加fwmark X ...”实际上,如果仅iproute2可以做到这一点,我不会感到惊讶...
derobert 2010年

3
作为在所有者匹配方面进行了大量工作的人,我可以说这不会总是产生期望的结果。即,并非所有数据包都具有您所期望的所有者。ICMP和ESP是内核(或根)拥有的类型,与原始应用程序无关,并且不会与匹配-m owner。使用TCP和UDP相当可靠,但其他类型则不太可靠。达到100%的唯一可靠方法是使用VM或容器。
bahamat 2012年


1

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.