【问题标题】:iptables --gid-owner works only for user's main groupiptables --gid-owner 仅适用于用户的主组
【发布时间】:2013-01-15 15:23:54
【问题描述】:

我正在尝试禁用除“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”组中添加/删除用户而不是为每个用户添加 iptables 规则来允许访问此 IP。

【问题讨论】:

    标签: firewall iptables owner


    【解决方案1】:

    好吧,老实说,我对 linux 和 iptables 知之甚少,以确保我的理论,但既然我想为 VPN 做同样的事情,我们就去吧。

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

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


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

    sg vpn -c "ssh user@10.15.1.1"
    

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

    【讨论】:

      【解决方案2】:

      旧帖子,但由于我在 Ubuntu 16.04.3 LTS 服务器中遇到了这个确切的问题,所以加入了。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-15
        • 2015-05-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多