免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8498 | 回复: 15
打印 上一主题 下一主题

iptables中的状态机制的触发在理解上的一些问题。[经前辈指点,已得到完美解决] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-17 00:07 |只看该作者 |倒序浏览
本帖最后由 kivis 于 2011-01-18 11:36 编辑

iptables中的状态(NEW,ESTABLISHED...)改变和设置在理解上的一些问题。

在学习linux下的iptables的时候,iptables指南1.1.9,1.2.2 ,里面在对状态机制讲解上,说到:
||All connection tracking is handled in the PREROUTING chain, except locally generated packets which are handled in

the OUTPUT chain. What this means is that iptables will do all recalculation of states and so on within the

PREROUTING chain. If we send the initial packet in a stream, the state gets set to NEW within the OUTPUT chain, and

when we receive a return packet, the state gets changed in the PREROUTING chain to ESTABLISHED, and so on. If the

first packet is not originated by ourself, the NEW state is set within the PREROUTING chain of course. So, all state

changes and calculations are done within the PREROUTING and OUTPUT chains of the nat table.摘自iptables指南-状态机制

-概述 部分||
特别是最后一句提到:So, all state changes and calculations are done within the PREROUTING and OUTPUT chains of the

nat table。"the nat tables"!!! 我的理解就是NEW状态,ESTABLISHED,等状态的形成都是在NAT的chains中进行改变和重新计算的

。然后我对状态机制在这句话的讲解进行了测试, 策略配置如下(CentOS5.5):
iptables -X
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -t raw -F
iptables -t raw -A PREROUTING -p icmp -m state --state NEW -j LOG --prefix="raw PREROUTING new:"
iptables -t mangle -A PREROUTING -p icmp -m state --state NEW -j LOG --prefix="mangle PREROUTING new:"
iptables -t nat -A PREROUTING -p icmp -m state --state NEW -j LOG --prefix="nat PREROUTING new:"
iptables -A INPUT -p icmp -m state --state NEW -j LOG --prefix="filter INPUT new:" #这条是额外添加的,只为记录包是否进入防火墙了。
(只针对进入防火墙的ICMP数据包进行记录)
数据包匹配顺序:raw表的PREROUTING链->mangle表的PREROUTING链->nat表的PREROUTING链->mangle表的INPUT链->filter表的INPUT

链。
然后在另外一台和此防火墙同在一个网络的客户机上进行测试:ping x.x.x.x -c 1
然后通过日志发现:日志中除了第一个raw表的PREROUTING链没有记录,mangle表的PREROUTING链,nat表的PREROUTING链,filter的

INPUT链对进入防火墙的ping包都进行了记录。
这个实验说明:进入防火墙的第一个ping包在进入mangle表的PREROUTING链就已经是NEW状态了,并且记录在了日志里面,
对比iptables指南中的概述介绍"So, all changes and calculations are done within the PREROUTING and OUTPUT chains of the nat table" "the nat table"。。NEW状态在nat表的PREROUTING链、OUTPUT链中才会被设置,对此很奇怪,难道iptables的指南有问题吗?还是我理解上面有些问题?希望chinaunix论坛的各位前辈给晚辈指点一下,提前在这里谢谢你们!!

ps:经 广告杀手 dreamice 的提示,对原文进行了改错。在这里谢谢前辈指点。

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
2 [报告]
发表于 2011-01-17 09:02 |只看该作者
你先要明白数据包在一条链上游程,特别说明:nat不是chain,而是table。
mangle,filter,nat是netfilter的三个table,每个table有很多的hook点,每个点上又可以包含很多的chain。
prerouting是数据包进入netfiler的第一个hook点,其中,默认情况下nat、mangle都包含了这个点。因此,数据包或者说一条连接进入netfiler,在prerouting点上被赋为NEW是毫无疑问的。

论坛徽章:
0
3 [报告]
发表于 2011-01-17 10:37 |只看该作者
回复 2# dreamice


   

回复 广告杀手dreamice 前辈 by kivis

谢谢前辈的指点,你的回复中说到的钩子一类的,说实话,我就听过而已,一点都不懂的,还有我上面写出来的raw表,mangle表,nat表中的记录,就是指那些表中PREROUTING链的记录,实在抱歉,第一次发帖,以后我会注意的。根据你的回复,我了解到:对

于进入防火墙的连接初始化数据包在mangle表的PREEROUTING链里面就已经被设置状态为NEW状态了,所以在我前面测试用的规则里面mangle表的PREROUTING链中才会记录下来匹配NEW状态的数据包。你说的默认情况下nat、mangle都包含了这个点,难道这两张表使用的是同一个PREROUTING链吗?我怎么觉得有点不可思议,各个表都有各自的链,应该不一样的阿,而指南中提到,"So, all state

changes and calculations are done within the PREROUTING and OUTPUT chains of the nat table" 状态设置和变化都是在nat表的PREROUTING链和OUTPUT链中进行,而不是mangle表中的PREROUTING链和OUTPUT链,我现在有点怀疑那个指南了,还望前辈指点迷津。
补充:raw表的PREROUTING链中却没有匹配到NEW状态的数据包(我的理解:raw是新加入专门对付状态机制的表,他是针对数据包的,而不是针对连接进行匹配的,不知道理解是否正确,请前辈指点)。

招聘 : 技术支持/维
论坛徽章:
0
4 [报告]
发表于 2011-01-17 10:41 |只看该作者
其实在 mangle,nat,filter 三个 table 的 prerouting 链之前,还有一个叫 conntrack 的机制,它只在两个链上起作用,prerouting 和 output。我的理解是:NEW 和 ESTABLISHED 等这些状态其实是 conntrack 机制在计算和匹配。

论坛徽章:
0
5 [报告]
发表于 2011-01-17 10:59 |只看该作者
回复 4# nagaregawa


   


回复 nagaregawa by kivis

先谢谢前辈,恩。我后来查看了一些其他资料也了解到是连接跟踪机制,也就是那个连接跟踪模块在起作用。可是根据你的回复,连接跟踪只在两个链上起用,是说的mangle表中的PREROUTING链、OUTPUT链,还是nat的PREROUTING链、OUTPUT链?我就在这里理解上和iptables的指南的理解有一些出入,难道是 链上有各个表?而不是各个表都有各自的链,只是名字有相同的地方??

招聘 : 技术支持/维
论坛徽章:
0
6 [报告]
发表于 2011-01-17 12:57 |只看该作者
回复 5# kivis


   
可是根据你的回复,连接跟踪只在两个链上起用,是说的mangle表中的PREROUTING链、OUTPUT链,还是nat的PREROUTING链、 OUTPUT链?我就在这里理解上和iptables的指南的理解有一些出入,难道是 链上有各个表?而不是各个表都有各自的链,只是名字有相同的地方??


是这样的,iptables 有 5 个链,prerouting,forward,input,ouptut,postrouting,不同的表负责不同的链,例如 prerouting 由两个表负责 mangle 和 nat。包进入 netfilter 之后,首先进入 prerouting 链,在进入 mangle 和 nat 表之前,conntrack 机制会起作用。所以既不是 mangle 的 prerouting 链也不是 nat 的 prerouting 链。同理 output 链也是。

评分

参与人数 1可用积分 +18 收起 理由
dreamice + 18 回答正确

查看全部评分

论坛徽章:
0
7 [报告]
发表于 2011-01-17 14:16 |只看该作者
回复 6# nagaregawa


   




回复 nagaregawa by kivis

如果按照你的意思的话,我这么理解对么:netfilter中的链就相当于一条绳子,而表的作用只是负责绳子的某一段功能(比如nat表负责的位于mangle表之后和filter表之前的那段绳子,而这段绳子只提供NAT功能),但是数据包必须都经过绳子。或者这么说。每个表都有自己的内置规则链,相当于拥有并且需要负责的一段绳子,这些绳子根据 包匹配的顺序和链的名字 被绑在了一起,成为一条绳子?还是每一段负责他们那一段的功能,只是他们的内置链,也就是那段绳子,被绑成了一条链。不知道上面我这样理解和你的意思接近吗?/(因为看其他教材发现都是说得netfilter规则由表组成,每个表都有自己内置的链,很难把这些想象成一连串的一个整体,所以上面我才有说到是进入mangle表的PREROUTING链,还是nat表的PREROUTING链)。

招聘 : 技术支持/维
论坛徽章:
0
8 [报告]
发表于 2011-01-17 18:58 |只看该作者
回复 6# nagaregawa


    不错,绳子的比喻很恰当

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
9 [报告]
发表于 2011-01-17 21:56 |只看该作者
回复 3# kivis


    是的,同一个链,nat和mangle都包含了prerouting,mangle表的作用是修改数据包,比如说打一个mark,修改数据包内容等,而nat表主要用作地址转换,prerouting点上,可以用作目的地址转换,这样可以改变其路由走向。
通常,mangle表可以作用于所有的五个hook点,而nat主要在prerouting,local in,local out,postrouting上。

论坛徽章:
0
10 [报告]
发表于 2011-01-17 22:15 |只看该作者
回复 9# dreamice


   

回复 dreamice by kivis

  前辈,根据你和nagaregawa两位前辈的指点,也就是说。整个netfilter防火墙统共就5条链,PREROUTING,INPUT,OUTPUT,FORWARD,POSTROUTING。而各个表只是作用于这五条链的不同位置上而已,,也就说,table只是为 链 服务的,相当于一条公路上警察设置的各种卡子而已。。。数据包只能是傻傻的顺着链走而已,还得通过卡子的检查?? 整个防火墙的运行过程就是这个样子的??
(和我前面对nagaregawa前辈指点理解上举的绳子的例子差不多阿。呵呵)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP