情况:
我最近发现以下 shell 脚本,它与 iptables 配合使用,阻止所有进出 Linux 操作系统的互联网访问,除了在团体称为internet
:
代码:
这听起来可能很复杂,但其实很简单。首先,创建“internet”组,如下所示:
sudo groupadd internet
然后,将其保存到脚本中:
#!/bin/sh
# Firewall apps - only allow apps run from "internet" group to run
# clear previous rules
sudo iptables -F
# accept packets for internet group
sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT
# also allow local connections
sudo iptables -A OUTPUT -p tcp -d 127.0.0.1 -j ACCEPT
sudo iptables -A OUTPUT -p tcp -d 192.168.0.1/24 -j ACCEPT
# reject packets for other users
sudo iptables -A OUTPUT -p tcp -j REJECT
# open a shell with internet access
sudo -g internet -s
来源: https://plus.google.com/+TobyKurien/posts/YZhZJCZmGgm
问题:
以下对所发生事件的解释正确吗?
sudo groupadd internet
一个叫internet的团体成立了sudo iptables -F
清除 iptables 中所有当前规则sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT
我遇到了这个问题...-A OUTPUT
告诉终端附加/添加规则,然后根据文档-p
是“要检查的规则或数据包的协议”,所以-p tcp
似乎放置了一条仅反映TCP协议协议,但是如果我想在 youtube/twitch 上观看流媒体怎么办?是否udp
需要包含在内,如果需要,我将如何包含它?然后是 -m (用于匹配)。我阅读了文档,但不确定它的作用。现在,我不知道这
-m owner --gid-owner internet -j
意味着什么。来自评论# accept packets for internet group
我了解代码的作用,但我想了解每个元素在做什么才能得出该结论。
答案1
你的解释是正确的。
如果您希望整个事情也适用于 UDP 数据包,您必须再次添加相同的规则集,但使用-p udp
而不是-p tcp
.或者只是忽略此选项并将规则应用于所有数据包(尽管 ICMP 数据包可能存在一些问题,因此仅添加两种规则可能更安全)。但是,您首先需要 TCP使用权例如 Youtube,因此即使来自 Youtube 的流式传输使用 UDP,您也无法观看流式传输,因为您永远不会走到这一步。
该选项-m
选择要使用的匹配类型。您可以匹配许多不同的标准,甚至还可以man iptables-extensions
使用匹配的模块对 iptables () 进行扩展。这里,-m owner
选择按数据包的所有权进行匹配,并--gid-owner
指定匹配组所有权。因此,这两个选项一起意味着“此规则仅适用于从组中某人发送的数据包internet
”。
选项-j
(最初是“jump”)指定规则匹配时要执行的操作。你可以跳到不同的链,也可以ACCEPT
(停止处理规则并发送这个数据包),也可以REJECT
(停止处理规则并忽略这个数据包)。
接下来的两条规则允许将数据包 ( ACCEPT
) 发送至特殊目的地 ( -d
),无论发送应用程序位于哪个组,最后一条规则将丢弃所有REJECT
与前面的规则不匹配的数据包 ( )。因此,最后一条规则执行了实际的阻止操作。
iptables
互联网上有很多教程,如果您想了解更多详细信息,请在谷歌上搜索一下,然后选择您喜欢的一个。我过去发现一些有用的随机链接: