这几天,俱乐部几个成员在做sf的性能测试,sf是一个开源的ftp搜索引擎。
昨天晚上的时候,他们都说sf爬数据有问题,一直爬不下任何数据,我就纳闷了,以前的时候,sf是可以爬数据的,难道是我最近改otter的时候,设定了一些规则,Drop掉了ftp的数据包。
普通的ftp客户端,无论是ftp、lftp、gftp都能够访问ftp站点,但是sf的测试程序却不行。总是提示出错,而且错误代码每一次还不一样。
拿出自己的行头,wireshark。抓包,抓下数据包看一下,到底是出了什么问题。
我看了一下普通的客户端的数据包
.........
c->s:PASV
........
c->s:LIST
........
客户端采用的是被动模式。
这里就要解释一下主动模式跟被动模式了。所谓的主动模式跟被动模式,都是数据连接,都是针对于服务器而言的。
主动模式:客户端指定ip和端口,服务器来主动连接客户端,服务器处于主动
被动模式:服务器指定端口,然后由客户端连接服务器,服务器处于被动
主动模式的数据一般是:
......
c->s:PORT xxx.xxx.xxx.xxx.xxx.xxx
......
c->s:LIST
......
关键就在于这个主动模式,是服务器来连接客户端,如果客户端有一个公网ip,还好办。但是如果这个客户端在局域网中,那么就会有些问题了。现在的防火墙,一般都屏蔽外部到内网的连接请求,所以一般PORT会出问题。
一旦出现这个问题后,一般的ftp客户端都支持修改ftp工作方式,将PORT改为PASV模式,这样就可以顺利的通过防火墙。
在现在的情况下,修改sf的代码,将ftp的工作方式改为PASV,也是可以的,但是我想还是不用改代码了,在防火墙上面做一下配置。
iptables这么强大的防火墙,不会连这个问题,都没有考虑到吧?
Google......
发现:
对于比较复杂的协议,如FTP和ICQ、IRC不易跟踪,内核有专门的模块来实现,对ftp而言
是ip_conntrack_ftp,只要modprobe
ip_conntrack_ftp,开始iptables就可以了,详见
tutorial.frozentux.net/cn/iptables-tutorial-cn-1.1.19.html
但是加载ip_conntrack_ftp之后还有问题,既然是模块的问题,我就modprobe ip_ Tab了一下列出了,iptables的模块,看到了一个ip_nat_ftp。
加载ip_nat_ftp之后,OK
总结:为了解决局域网ftp客户端的主动连接问题,加载ip_conntrack_ftp和ip_nat_ftp。
阅读(1527) | 评论(0) | 转发(0) |