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

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

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
NEW,其后的应答包等等数据都是 ESTABLISHED

使用缺省操作的包的超时值都是相同的,600秒,也就是10分钟。当然,这个值能够通过/proc/sys/net/ipv4/netfilter/ip_ct_generic_timeout更改,以便适应您的通信量,尤其是在耗时较多、流量巨大的情况下,比如使用卫星等。


4.8. 复杂协议和连接跟踪

有些协议比其他协议更复杂,这里复杂的意思是指连接跟踪机制很难正确地跟踪他们,比如,ICQ、IRC 和FTP,他们都在数据包的数据域里携带某些信息,这些信息用于建立其他的连接。因此,需要一些特别的 helper来完成工作。

下面以FTP作为例子。FTP协议先建立一个单独的连接——FTP控制会话。我们通过这个连接发布命令,其他的端口就会打开以便传输和这个命令相关的数据。这些连接的建立方法有两种:主动模式和被动模式。先看看主动模式,FTP客户端发送端口和IP地址信息给服务器端,然后,客户端打开这个端口,服务器端从他自己的20端口(FTP-Data端口号)建立和这个端口的连接,接着就能够使用这个连接发送数据了。

问题在于防火墙不知道这些额外的连接(相对于控制会话而言),因为这些连接在建立时的磋商信息都在协议数据包的数据域内,而不是在可分析的协议头里。因此,防火墙就不知道是不是该放这些从服务器到客户机的连接过关。

解决的办法是为连接跟踪模块增加一个特别的helper,以便能检测到那些信息。这样,那些从FTP服务器到客户机的连接就能够被跟踪了,状态是RELATED,过程如下图所示:

被动FTP工作方式下,data连接的建立过程和主动FTP的相反。客户机告诉服务器需要某些数据,服务器就把地址和端口发回给客户机,客户机据此建立连接接受数据。假如FTP服务器在防火墙后面,或您对用户限制的比较严格,只允许他们访问HTTP和FTP,而封闭了其他任何端口,为了让在Internet是的客户机能访问到FTP,也需要增加上面提到的helper。下面是被动模式下data连接的建立过程:

有些conntrack helper已包含在内核中,在写这篇文章时,FTP和IRC已有了相应的conntrack helper。假如在内核里没有您想要的helper,能够到iptables用户空间的patch-o-matic目录中看看,那里有很多的helper,比如针对ntalk或H.323协议的等等。假如没找到,更有几个选择:能够查查iptables的 CVS,或联系Netfilter-devel问问有没有您要的。还不行的话,只有您自己写了,我能够给您介绍一篇好文章,Rusty Russell's Unreliable Netfilter Hacking HOW-TO,连接放在附录里其他资源和链接

Conntrack helper即能够被静态地编译进内核,也能够作为模块,但要用下面的命令装载:

modprobe ip_conntrack_*

   

注意连接跟踪并不处理NAT,因此要对连接做NAT就需要增加相应的模块。比如,您想NAT并跟踪FTP连接,除了FTP的相应模块,还要有NAT的模块。任何的NAT helper名字都是以ip_nat_开头的,这是个命名习惯:FTP NAT helper叫做ip_nat_ftp,IRC的相应模块就是ip_nat_irc。conntrack helper 的命名也遵循相同的习惯:针对IRC的conntrack helper叫ip_conntrack_irc,FTP的叫作ip_conntrack_ftp。


Chapter 5. 规则的保存和恢复

iptables提供了两个很有用的工具用来处理大规则集: iptables-saveiptables-restore,他们把规则存入一个和标准脚本代码只有细微查别的特别格式的文档中,或从中恢复规则。


5.1. 速度

使用iptables-saveiptables-restore的一个最重要的原因是,他们能在相当程度上提高装载、保存规则的速度。使用脚本更改规则的问题是,改变每个规则都要调运命令iptables,而每一次调用iptables,他首先要把Netfilter内核空间中的整个规则集都提取出来,然后再插入或附加,或做其他的改变,最后,再把新的规则集从他的内存空间插入到内核空间中。这会花费很多时间。

为了解决这个问题,能够使用命令iptables-saverestore iptables-save用来把规则集保存到一个特别格式的文本文档里,而iptables-restore是用来把这个文档重新装入内核空间的。这两个命令最好的地方在于一次调用就能够装载和保存规则集,而不象脚本中每个规则都要调用一次iptables。 iptables-save运行一次就能够把整个规则集从内核里提取出来,并保存到文档里,而iptables-restore每次装入一个规则表。换句话说,对于一个很大的规则集,假如用脚本来配置,那这些规则就会反反复复地被卸载、安装很多次,而我们现在能够把整个规则集一次就保存下来,安装时则是一次一个表,这可是节省了大量的时间。

假如您的工作对象是一组巨大的规则,这两个工具是明显的选择。当然,他们也有不足之处,下面的章节会周详说明。


5.2. restore的不足之处

iptables-restore能替代任何的脚本来配置规则吗?不,到现在为止不行,很可能永远都不行。iptables-restore的主要不足是不能用来做复杂的规则集。例如,我们想在电脑启动时获取连接的动态分配的IP地址,然后用在脚本里。这一点,用iptables-restore来实现,或多或少是不可能的。

一个可能的解决办法是写一个小脚本来获取那个IP地址,并在iptables-restore调用的配置文档中配置相应的关键字,然后用获取的IP值替换关键字。您能够把更改后的配置文档存到一个临时文档中,再由 iptables-restore使用他。然而这会带来很多问题,并且您不能用iptables-save来保存带关键字的配置文档。此法较笨。

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