iptables 匹配补充组的输出规则

iptables 匹配补充组的输出规则

iptables 实用程序允许根据进程的 uid 或 gid 来匹配规则,如下所示:

sudo iptables -A OUTPUT -m owner --uid-owner root -j ACCEPT

我还想添加一条规则,允许名为“netaccess”的组的所有成员使用出站流量。我尝试了以下操作:

sudo groupadd -r netaccess # This created the group with gid 999
sudo usermod -aG netaccess <myUser>
sudo iptables -A OUTPUT -m owner --gid-owner netaccess -j ACCEPT

但是,我的出站流量仍然被阻止。我已经验证了 iptables 规则是在最终 REJECT 规则之上创建的,所以这不是问题所在。相反,似乎在使用iptables -m owner--gid-owner选项时,它会比较进程的确切 gid,而不是检查 gid 是否在所有者的补充组列表中(如 /etc/group 中定义)。我通过查看此页面(Ctrl+F 表示“所有者”)发现了这一点:http://ipset.netfilter.org/iptables-extensions.man.html

有没有办法使用 iptables 将规则与补充组的所有成员匹配?我希望以下内容能够正常工作:

sudo iptables -A OUTPUT -m owner --gid-member netaccess -j ACCEPT

我在 Ubuntu 14.04 上运行并且有 iptables v1.4.21。

答案1

添加了对补充组的支持ea6cc2fd2019年:

netfilter:xt_owner:添加补充组选项

XT_OWNER_SUPPL_GROUPS 标志导致使用 XT_OWNER_GID 指定的 GID
也需要在流程的补充组中进行检查。

f_cred->group_info 在其生存期内无法修改,并且 f_cred
保存对它的引用,因此使用起来很安全。

签名人:Lukasz Pawelczyk
签字人:Pablo Neira Ayuso

相应的 iptables 功能记录在iptables-extensions(8)

--suppl-groups
       Causes group(s) specified with --gid-owner to be also checked in
       the supplementary groups of a process.

要完成您想做的事情,您可以使用以下命令:

iptables -A OUTPUT -m owner --gid-owner netaccess --suppl-groups -j ACCEPT

相关内容