iptables配置conntrack的NOTRACK和TRACK

简介:
iptables本身没有TRACK target,以至于你不能指定需要被conntrack模块处理的数据包白名单,比如我想实现:除了来源IP是192.168.10.0/16网段的需要被track之外,其它的都不要track。
       当然,你可以通过下面的配置实现我的需求:
iptables -t raw -A PREROUTING ! -s 192.168.10.0/16 -j NOTRACK
...反向NOTRACK类似,-s换-d
如果更复杂一点呢?比如除了来源IP限制之外,还有协议,端口等。
       熟悉访问控制列表设计的都知道,ACL的“与”操作可以在单条规则中实现,而“或”操作则由多条规则实现,因此应用于上述随便复杂的需求,都是可以完成 的,甚至抛开“单条与/多条或”原则,仅仅是扩充ipset也可以很好配置出来任意复杂的规则满足任意复杂的需求。
       但是有没有一个更简单的办法?当然有,实现一个和NOTRACK对立的target,即TRACK target即可。它的实现就是清除已经附着在skb上的untracked conn。这样当我需要添加track白名单时,我可以这么做:
iptables -t raw -A PREROUTING -j NOTRACK
iptables -t raw -A PREROUTING $mt1 $mt2 ... -j TRACK # 单条的matches AND操作
...# 多条的 matches OR操作
iptables -t raw -A PREROUTING $mt''1 $mt''2 ... -j TRACK
OK,就这样,很简单。  

       不过iptables没有内置OR操作是完全符合ACL理念的,该理念中,如果想实现或,就配置多条规则,事实上大多数的鉴权系统都是如此的理念。看看C 语言的逻辑判断会发现同样的理念,如果是AND操作,逐条语句便和顺序无关,因为最终必须将每个语句全部计算一遍,如果是OR操作,计算效率就和顺序有关 了,只要到达“真”值,计算就可以结束了,当然内部细节还是和实现相关的。所以,对于AND操作,由于它是闭合的,一条语句就可以囊括进去,但是OR却是 不闭合的,你不知道计算将在哪里结束。


 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1605096


相关文章
|
10月前
|
网络协议 Docker 容器
dockerq启动报错(iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9876 -j DNAT --t
dockerq启动报错(iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9876 -j DNAT --t
179 0
|
Kubernetes Linux 网络安全
Netfilter和iptables介绍
在开始Kubernetes的网络之前我们先来学习Netfilter,Netfilter可能了解的人比较少,但是iptables用过 Linux的都应该知道。本文主要介绍Netfilter与iptables的原理。
|
网络协议 Linux 网络安全
netfilter和iptables的实现机制
随着计算机网络和Internet普及,计算机很久之前就开始遭受各种入侵了。因此为了阻止入侵,就产生了网络防火墙以及网络数据分析的需求。 而这个netfilter就是在linux系统中来实现防火墙功能。
2671 0
iptable和netfilter
https://www.cnblogs.com/ilinuxer/p/6364064.html https://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646466.html
910 0
|
存储 算法 网络架构
|
网络协议 网络安全