use*_*179 6 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
Run Code Online (Sandbox Code Playgroud)
这将禁止所有用户访问 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
Run Code Online (Sandbox Code Playgroud)
除了用户 xx 之外的所有人都无法访问 1.2.3.4。
我将 root 添加到这个组 xx:
usermod -a -G xx root
Run Code Online (Sandbox Code Playgroud)
但是 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
Run Code Online (Sandbox Code Playgroud)
但没有区别。一切都在被拒绝。
没有其他 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
Run Code Online (Sandbox Code Playgroud)
我希望能够(禁止)通过从这个“neta”组中添加/删除用户而不是为每个用户添加 iptables 规则来允许访问这个 IP。
小智 5
好吧,老实说,我对 linux 和 iptables 知之甚少,以确保我的理论,但因为我想在这里对 VPN 做同样的事情。
我假设匹配是使用数据包来源的进程完成的,并且 linux 进程不会分配用户的所有组,而是一个进程以一个uid 和一个gid 运行。
这意味着您必须使用此特定组显式执行命令,否则将使用用户的默认组执行命令/进程。
写到这里我有了一个想法,看看是否有这种可能性。我使用组 VPN 限制了对某个 IP 范围的访问。这从来没有奏效。现在我使用以下命令进行了测试,并且可以正常工作:
sg vpn -c "ssh user@10.15.1.1"
Run Code Online (Sandbox Code Playgroud)
所以我希望我的理论是正确的。
| 归档时间: |
|
| 查看次数: |
5305 次 |
| 最近记录: |