Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5760639
  • 博文数量: 675
  • 博客积分: 20301
  • 博客等级: 上将
  • 技术积分: 7671
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-31 16:15
文章分类

全部博文(675)

文章存档

2012年(1)

2011年(20)

2010年(14)

2009年(63)

2008年(118)

2007年(141)

2006年(318)

分类: LINUX

2007-04-15 20:26:58

这几天,俱乐部几个成员在做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) |
给主人留下些什么吧!~~