2013-01-31 42 views
4

我想禁止所有用戶訪問IP 1.2.3.4,除了「neta」組成員。這是我爲此創建的一個新組。iptables --gid-owner只適用於用戶的主要組

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。

我加了根到該組XX:

usermod -a -G xx root 

但根還是無法訪問此IP.If我添加的主要用戶羣(根,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規則。

[email protected]:~# 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 

我希望能夠(DIS)允許訪問這個IP通過添加/從這個「NETA」組中刪除用戶,而不是添加iptables規則爲每一位用戶。

回答

3

好吧,說實話,我知道很少有關於linux和iptables來確定我的理論,但是因爲我想在這裏爲VPN做同樣的事情。

我認爲這場比賽是用從報文從起源和過程做一個Linux進程沒有得到分配一個用戶的所有羣體,而是一個過程與一個 uid和一個 GID運行。

這意味着您必須使用此特定組明確執行命令,否則命令/進程將使用用戶的默認組執行。


寫這個我有一個想法,看看是否有這種可能性。 我使用組VPN來限制對某個IP範圍的訪問。這從來沒有奏效。現在我用下面的命令測試它的工作原理:

sg vpn -c "ssh [email protected]" 

所以我希望我的理論是正確的。

1

舊的帖子,但在我已經遇到了Ubuntu 16.04.3 LTS服務器的確切問題。

Ubuntu的執行iptables通過netfilter的擴展檢查當前網絡數據包的所有者,並僅查詢該用戶的主要組ID。它不會深入挖掘並獲得所有組成員身份。只有主要的組與--gid-owner的值進行比較。它沒有更進一步。

如果他/她將所有相關用戶名的主/默認用戶組更改爲「neta」,OP將嘗試完成的操作將會起作用。那些用戶將被規則捕獲。