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