天天看点

iptables 状态机制

       下面我们就说说我一直在上面提到的关于那个ESTABLISHED,RELATED的规则是怎么回事,到底有

什么用处。

       说这个东西就要简单说一下网络的数据通讯的方式,我们知道,网络的访问是双向的,也就是说一个

Client与Server之间完成数据交换需要双方的发包与收包。在netfilter中,有几种状态,也就是new, 

established,related,invalid。

       当一个客户端,在本文例一中,内网的一台机器访问外网,我们设置了规则允许他出去,但是没有设置允许回来的规则阿,怎么完成访问呢?这就是netfilter的 状态机制 ,当一个lan用户通过这个linux访问外网的时候,它发送了一个请求包,这个包的状态是new,当外网回包的时候他的状态就是established,所以,linux知道,哦,这个包是我的内网的一台机器发出去的应答包,他就放行了。

       而外网试图对内发起一个新的连接的时候,他的状态是new,所以linux压根不去理会它。这就是我们为什么要加这一句的原因。

       还有那个related,他是一个关联状态,什么会用到呢?tftp,ftp都会用到,因为他们的传输机制决定了,它不像http访问那样,Client_IP: port-->server:80然后server:80-->Client_IP:port,ftp使用tcp21建立连接,使用20端口发送数据,其中又有两种方式,一种主动active mode,一种被动passive mode。主动模式下,client使用port命令告诉server我用哪一个端口接受数据,然后server主动发起对这个端口的请求。被动模式下,server使用port命令告诉客户端,它用那个端口监听,然后客户端发起对他的数据传输,所以这对于一个防火墙来说就是比较麻烦的事情,因为有可能会有new状态的数据包,但是它又是合理的请求,这个时候就用到这个related状态了,他就是一种关联,在linux中,有个叫 

ftp_conntrack的模块,它能识别port命令,然后对相应的端口进行放行。

文章出处:

原文:http://wwdhks.blog.51cto.com/839773/1154032

本文转自奇迹的少年博客51CTO博客,原文链接http://blog.51cto.com/raffaelexr/1710596如需转载请自行联系原作者

liliangchun

继续阅读