手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

Iptables 指南 1.1.19(中文版)(二)

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
/proc/sys/net/ipv4/ip_conntrack_max里查看、配置。


4.3. 数据包在用户空间的状态

就象前面说的,包的状态依据IP所包含的协议不同而不同,但在内核外部,也就是用户空间里,只有4种状态:NEWESTABLISHEDRELATEDINVALID。他们主要是和状态匹配一起使用。下面就简要地介绍以下这几种状态:

Table 4-1. 数据包在用户空间的状态

State(状态)Explanation(注释)
NEWNEW说明这个包是我们看到的第一个包。意思就是,这是conntrack模块看到的某个连接第一个包,他即将被匹配了。比如,我们看到一个SYN 包,是我们所留意的连接的第一个包,就要匹配他。第一个包也可能不是SYN包,但他仍会被认为是NEW状态。这样做有时会导致一些问题,但对某些情况是有很大的帮助的。例如,在我们想恢复某条从其他的防火墙丢失的连接时,或某个连接已超时,但实际上并未关闭时。
ESTABLISHEDESTABLISHED已注意到两个方向上的数据传输,而且会继续匹配这个连接的包。处于ESTABLISHED状态的连接是很容易理解的。只要发送并接到应答,连接就是ESTABLISHED的了。一个连接要从NEW变为ESTABLISHED,只需要接到应答包即可,不管这个包是发往防火墙的,还是要由防火墙转发的。ICMP的错误和重定向等信息包也被看作是ESTABLISHED,只要他们是我们所发出的信息的应答。
RELATEDRELATED是个比较麻烦的状态。当一个连接和某个已处于ESTABLISHED状态的连接有关系时,就被认为是RELATED的了。换句话说,一个连接要想是RELATED的,首先要有一个ESTABLISHED的连接。这个ESTABLISHED连接再产生一个主连接之外的连接,这个新的连接就是RELATED的了,当然前提是conntrack模块要能理解RELATED。ftp是个很好的例子,FTP-data 连接就是和FTP-control有RELATED的。更有其他的例子,比如,通过IRC的DCC连接。有了这个状态,ICMP应答、FTP传输、DCC等才能穿过防火墙正常工作。注意,大部分更有一些UDP协议都依赖这个机制。这些协议是很复杂的,他们把连接信息放在数据包里,并且需要这些信息能被正确理解。
INVALIDINVALID说明数据包不能被识别属于哪个连接或没有任何状态。有几个原因能够产生这种情况,比如,内存溢出,收到不知属于哪个连接的ICMP 错误信息。一般地,我们DROP这个状态的任何东西。

这些状态能够一起使用,以便匹配数据包。这能够使我们的防火墙很强壮和有效。以前,我们经常打开1024以上的任何端口来放行应答的数据。现在,有了状态机制,就不需再这样了。因为我们能够只开放那些有应答数据的端口,其他的都能够关闭。这样就安全多了。


4.4. TCP 连接

本节和下面的几节,我们来周详讨论这些状态,连同在TCP、UDP和ICMP这三种基本的协议里怎样操作他们。当然,也会讨论其他协议的情况。我们还是从TCP入手,因为他本身就是个带状态的协议,并且具备很多关于iptables状态机制的周详信息。

一个TCP连接是经过三次握手协商连接信息才建立起来的。整个会话由一个SYN包开始,然后是个 SYN/ACK包,最后是个ACK包,此时,会话才建立成功,能够发送数据。最大的问题在于连接跟踪怎样控制这个过程。其实很简单。

默认情况下,连接跟踪基本上对任何的连接类型做同样的操作。看看下面的图片,我们就能明白在连接的不同阶段,流是处于什么状态的。就如您看到的,连接跟踪的代码不是从用户的观点来看待TCP连接建立的流程的。连接跟踪一看到SYN包,就认为这个连接是NEW状态,一看到返回的SYN/ACK包,就认为连接是 ESTABLISHED状态。假如您仔细想想第二步,应该能理解为什么。有了这个特别处理,NEW和ESTABLISHED包就能够发送出本地网络,且只有ESTABLISHED的连接才能有回应信息。假如把整个建立连接的过程中传输的数据包都看作NEW,那么三次握手所用的包都是NEW状态的,这样我们就不能阻塞从外部到本地网络的连接了。因为即使连接是从外向内的,但他使用的包也是NEW状态的,而且为了其他连接能正常传输,我们不得不允许NEW状态的包返回并进入防火墙。更复杂的是,针对TCP连接内核使用了很多内部状态,他们的定义在 RFC 793 - Transmission Control Protocol的21-23页。但好在我们在用户空间用不到。后面我们会周详地介绍这些内容。

正如您看到的,以用户的观点来看,这是很简单的。但是,从内核的角度看这一块更有点困难的。我们来看一个例子。认真考虑一下在/proc/net/ip_conntrack里,连接的状态是如何改变的。

tcp      6 117 SYN_SENT src=192.168.1.5 dst=192.168.1.35 sport=1031      dport=23 [UNREPLIED] src=192.168.1.35 dst=192.168.1.5 sport=23      dport=1031 use=1

   

从上面的记录能够看出,SYN_SENT状态被配置了,这说明连接已发出一个SYN包,但应答还没发送过来,这可从[UNREPLIED]标志看出。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!