发新话题
打印

将迅雷拒于Linux服务器门外

将迅雷拒于Linux服务器门外

在Apache上屏蔽迅雷
在HTTP协议上识别迅雷是通过迅雷的用户代理(User Agent)字串来进行识别的。我对我自己的网页的IIS访问日志以及一个评分系统的评分记录里面记录的用户字串进行了分析,之后发现迅雷使用的几个用户代理应该是唯一的,在访问日志中,除了下载文件的记录,只发现了极少量使用了和迅雷相同的用户代理的记录,这可能是个别用户出于杂七杂八的目使用迅雷下载普通网页而留下的日志。
有了这个分析结果,就可以保证通过用户代理来识别迅雷不会误杀普通用户了。但通过用户代理来识别迅雷有一个问题,假如以后迅雷把自己的用户代理改成和IE的用户代理一样的话怎么办?没关系,至少到现在为止(09年国庆),我还没有发现迅雷做此举动,等迅雷有动作了再想对策也不迟。另外,这里还有一个“脏数据”的技巧(查看:http://www.gsea.com.cn/blog/post/245/),假如迅雷很不厚道地把自己伪装成IE的话,我们就只好也很不厚道地使用脏数据技巧先反击一下迅雷。虽然脏数据对屏蔽迅雷没有什么帮助,至少可以出出气,让非最新版迅雷用户下载不到准确的内容,就这点应该够迅雷受的了,用户体验大受打击,我想大多数用户都不会追着使用最新版的。
于是,我在废话里面说了,使用Apache的mod_rewrite模块就可以很轻易地屏蔽迅雷,因为这个模块的重写规则可以将用户代理作为判定条件。我们只要把用户代理和迅雷是一样的连接哀求重定向到一个错误页面,或者干脆直接返回403,就可以在HTTP协议上屏蔽迅雷了。
到目前为止,我们观察到的迅雷使用的用户代理有以下几个:
复制内容到剪贴板
代码:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; )
Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.0)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .net CLR 3.5.20706)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .net CLR 1.1.4322; .net CLR 2.0.50727)
放心,根据网页访问日志和评分系统的日志,这些用户代理应该都是迅雷特有的,在.htaccess文件里面把带有这些用户代理的哀求重定向到错误页面就可以了。
当然对于普通网页来说,是没有必要屏蔽迅雷的,所以我们只需要屏蔽访问大文件的哀求就可以了,于是.htaccess里面的内容就像下面这样:
复制内容到剪贴板
代码:
RewriteEngine On
#Anti Thunder
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4\.0\ \(compatible;\ MSIE\ 6\.0;\ Windows\ NT\ 5\.1\)$ [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4\.0\ \(compatible;\ MSIE\ 6\.0;\ Windows\ NT\ 5\.0\)$ [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5\.0\ \(compatible;\ MSIE\ 6\.0;\ Windows\ NT\ 5\.0\)$ [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4\.0\ \(compatible;\ MSIE\ 6\.0;\ Windows\ NT\ 5\.1;\ \)$ [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4\.0\ \(compatible;\ MSIE\ 6\.0;\ Windows\ NT\ 5\.0;\ \.net\ CLR\ 3\.5\.20706\)$ [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4\.0\ \(compatible;\ MSIE\ 6\.0;\ Windows\ NT\ 5\.1;\ SV1;\ \.net\ CLR\ 1\.1\.4322;\ \.net\ CLR\ 2\.0\.50727\)$ [NC]
RewriteRule ^.*\.(gif|jpg|bmp|zip|rar|exe|mp3|swf)$ / [NC,F]
假如你想制定更复杂的重写规则,可以参考Apache手册中mod_rewrite的部分,见:http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_rewrite.HTML
对于其他Web服务器软件,多多少少都能提供一些可将用户代理作为判定条件的网址重写模块或插件,参照上面Apache的设置技巧对这些软件进行设置,都能达到屏蔽迅雷的效果。
在FTP协议上反迅雷
在FTP上反迅雷就比较麻烦,这需要获得每一个FTP会话的会话唯一标识和客户端发送的每一条FTP指令。因为这样的需求很少见,所以Linux下的FTP软件很少有提供相应的接口供我们使用。不过还好,Linux下的FTP软件大多都是开源的,我们可以自己修改源码。于是我就写了libantixunlei,然后针对不同的FTP软件,就套用libantixunlei来修改其源码,然后编译安装就可以了。
因为要修改FTP服务器软件的源码,这对技术的要求就比较高了,不见得每个服务器治理员都会C语言,所以对大多数服务器治理员来说目前还是只能等待别人为FTP软件写插件(假如支持的话),或者发布经过修改的FTP服务器软件源码。
于是,假如你想为某个FTP软件加入反迅雷的功能,请访问http://code.google.com/p/libantixunlei 。假如对libantixunlei的用法不太清晰的话,请给我发邮件,我会告诉你FTP协议上屏蔽迅雷的原理和应该使用libantixunei的哪些接口来识别迅雷。
不过先不要失望,现在已经有了可以反迅雷的Linux上的FTP服务器软件了,在我写这篇文章的时候我已经给pure-ftpd 1.0.22版本成功地打上了反迅雷补丁,补丁文件请到:http://code.google.com/p/libantixunlei/downloads/list 去下载,下载回来以后给纯净的pure-ftpd-1.0.22版本打上这个补丁(使用patch命令),然后编译安装就支持反迅雷了。对于其他版本的pure-ftpd我没有试验过是否能使用这个补丁,不知道能否正常使用。另外在此提醒一下没有自己编译安装过软件的治理员,pureftpd的一些功能需要在./configure的时候加上一些参数才能使用,详细请看源码根目录下面的说明文件,偷懒的话可以 ./configure –with-everything,不过印象中官方并不推荐使用这个参数。

另外,因为我很懒,所以把一些特性写死在程序里面了,是否屏蔽使用迅雷的IP和屏蔽IP的时间是写死在程序里面的,要改变的话只能重新编译。这两个配置在libantixunlei.h文件里面可以修改。
附件: 您所在的用户组无法下载或查看附件

TOP

发新话题