今天看到这个叫做socket的iptables 模块挺有意思的,但是没有找到太多的资料;想了想翻译一下文档,应该可以作为理解一下这个模块的作用的开始。
(然而发现并不能,所以又研究了一大堆相关的其他东西,就有了这一篇)
文档
socket
如果能通过分组执行socket搜索后,能够找到一个打开的TCP/UDP
socket,则会进行匹配。具体来说,这会匹配一条已建立(establshed)
的链接,或者非0绑定监听器(不是监听0.0.0.0或者::/非INADDR_ANY)
socket(比如说有可能是非本地地址)。搜索是通过TCP/UDP分组的元
组进行的,对于ICMP/ICMPv6错误分组来说,则是使用内嵌在内的原始
TCP/UDP头部中的元组。
--transparent
忽略非透明(non-transparent) sockets.
--nowildcard
不要忽略绑定在'任意'地址的sockets。默认情况下,不会
匹配0绑定监听器;因为在那种情况下,本地的服务可以
拦截本来会被转发的流量。因此,在匹配使用策略路由重
定向到本地的转发流量时,本选项有安全影响。当使用
socket 匹配器来实现绑定在非本地地址的完全透明代理
时,更推荐使用 --transparent 选项。
例如(假如被标记为1的分组会被发送到本地):
-t mangle -A PREROUTING -m socket --transparent -j MARK
--set-mark 1
--restore-skmark
将分组标记设置为匹配到的socket的标记。可以和 --transparent
以及 --nowildcard 选项组合使用来限制恢复分组标记时匹配的
sockets。
例如:一个打开了2个透明(IP_TRANSPARENT)的sockets,并
使用SO_MARK选项设置了一个标记。我们可以这样过滤匹配的分组:
-t mangle -I PREROUTING -m socket --transparent --restore-
skmark -j action
-t mangle -A action -m mark --mark 10 -j action2
-t mangle -A action -m mark --mark 11 -j action3