iptables --gid-owner仅适用于用户的主要组

时间:2013-01-31 13:46:52

标签: firewall iptables owner

我正在尝试禁止除“neta”组成员以外的所有用户访问IP 1.2.3.4。这是我为此事创建的一个新组。

iptables -I OUTPUT -o eth0 -p tcp -d 1.2.3.4 -m owner ! --gid-owner neta -j REJECT

这会禁止所有用户访问1.2.3.4,即使他们是“neta”组的成员。

我有一个用户xx,他是组xx(主要组)和neta的成员。如果我将规则更改为:

iptables -I OUTPUT -o eth0 -p tcp -d 1.2.3.4 -m owner \! --gid-owner xx -j REJECT

除用户xx以外的所有人都无法访问1.2.3.4。

我将root添加到此组xx:

usermod -a -G xx root

但是root仍然无法访问此IP。如果我将主用户的组(root,xx)添加到规则中,一切都按预期工作。

我尝试将其拆分为两个规则以确保(并记录拒绝):

iptables -A OUTPUT -o eth0 -p tcp -d 1.2.3.4 -m owner --gid-owner neta -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -d 1.2.3.4 -m limit --limit 2/s --limit-burst 10 -j LOG
iptables -A OUTPUT -o eth0 -p tcp -d 1.2.3.4 -j REJECT

但没有区别。一切都被拒绝了。

没有其他iptables规则。

root@vm1:~# iptables -nvL
Chain INPUT (policy ACCEPT 19 packets, 1420 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 10 packets, 1720 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     tcp  --  *      eth0    0.0.0.0/0            1.2.3.4     owner GID match 1001 
    0     0 LOG        tcp  --  *      eth0    0.0.0.0/0            1.2.3.4     limit: avg 2/sec burst 10 LOG flags 0 level 4 
    0     0 REJECT     tcp  --  *      eth0    0.0.0.0/0            1.2.3.4     reject-with icmp-port-unreachable 

我希望能够(禁止)通过在此“neta”组中添加/删除用户来访问此IP,而不是为每个用户添加iptables规则。

2 个答案:

答案 0 :(得分:3)

好吧,老实说,我对linux和iptables知之甚少,以确定我的理论,但是因为我想在这里为VPN做同样的事情。

我假设匹配是使用数据包源自的进程完成的,并且linux进程没有分配用户的所有组,而是使用一个 uid运行进程一个 gid。

这意味着您必须使用此特定组显式执行命令,否则使用用户的默认组执行命令/进程。


写这篇文章我有一个想法,看看是否有这种可能性。 我使用VPN组限制对某个IP范围的访问。这从来没有奏效。现在我使用以下命令进行测试,它可以工作:

sg vpn -c "ssh user@10.15.1.1"

所以我希望我的理论是正确的。

答案 1 :(得分:1)

旧帖子,但因为我在Ubuntu 16.04.3 LTS服务器中遇到了这个确切的问题而引起了攻击。

Ubuntu通过netfilter实现 iptables 扩展,检查当前网络数据包的所有者,并仅查询该用户的主要组ID。它不会深入挖掘并获得所有组成员资格。仅将主要组与--gid-owner值进行比较。它看起来没有任何进展。

如果他/她将所有相关用户名的主要/默认用户组更改为“neta”,则OP尝试完成的操作将起作用。然后,规则将捕获这些用户。