使用 IPTables 阻止网络访问

使用 IPTables 阻止网络访问

我尝试使用此命令阻止用户sandbox访问网络:

$ iptables -A OUTPUT -m owner --uid-owner sandbox -j DROP

然而,此后我仍然可以 ping 外部主机:

$ sudo -u sandbox ping 206.190.36.45
PING 206.190.36.45 (206.190.36.45) 56(84) bytes of data.
64 bytes from 206.190.36.45: icmp_req=1 ttl=49 time=802 ms
64 bytes from 206.190.36.45: icmp_req=2 ttl=49 time=791 ms

我究竟做错了什么?

更新

我的配置如下:

$ /sbin/iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere             owner UID match sandbox

更新

显然ping已经setuid root设置了。我只需要将其删除:

chmod u-s /bin/ping

答案1

如果ping您的系统上的 setuid 是 root,则它将root打开套接字并从中ping发送其 ICMP 回显请求。因此规则永远不会匹配。

(请注意,这在 EL6、Debian squeeze 等上是正确的。较新的发行版已删除 ping 的 setuid 位并将其替换为功能。在这些情况下,规则可能会匹配。)

答案2

您是否已确定已加载必要的 iptable 模块?

尝试

modprobe ipt_owner

在控制台上。

相关内容