2010年10月17日星期日

[GFW BLOG] 强大的代理调度器代理Privoxy

作者:muzuiget   来源:http://qixinglu.com/archives/powerful_filter_proxy_privoxy

大 家都知道Foxyproxy和Autoproxy这两个扩展,根据不同网址让Firefox选择代理。那么其它浏览器呢?使用PAC文件也可以达到类似的 效果,但linux下的chome/chromium很怨念不支持。那么非浏览器程序呢?比如播放器,下载程序,它们没有javascript引擎,只能 单独使用某个代理,而不能根据地址智能切换。

那么有没有这样的代理,它本身内置类似Foxyproxy和Autoproxy的功能,根据不同网址再使用另外相应代理,这样任意程序都能实现智能代理切换了。答案是肯定的,就是Privoxy

轻量级代理比较

很多人都知道Tor套件曾经的组合是Vidalia,Privoxy,后来用Polipo替换掉Privoxy,Privoxy效率真的不行?非也,这两个都算轻量级的代理,比较有名的还有一个3proxy,我都用过,感觉他们的设计目标不同

  • Polipo重点是缓存,配置超简单。
  • 3proxy重点是权限管理,它的权限可以设置的很详细,还支持SOCKS, FTP, POP3协议。
  • Privoxy重点是过滤,保护隐私,无比强大,因此配置较复杂。

因为Polipo重点是缓存,配置又简单,普通用户又用不着过滤器的,拿Polipo替换Privoxy理所当然。它们都支持父代理(或者叫 forward,二级代理,反向代理),把数据转发给另一代理,比如Tor就是socks5代理,某些程序不支持,开个http代理,相当于转发器,把 http协议的数据转成socks5协议,再传给Tor。

而Privoxy强大之处就是过滤,除了滤掉广告,屏蔽页面,它也可以根据相应条件转发给不同的代理。这就是我一直想找的程序,折腾一通才发现这样 的工具其实是远在天边,近在眼前,翻遍了它的手册终于发现我想要的功能。3proxy虽然也支持多个父代理,但它的用途只是负载均衡而不能按条件转发。

配置方法

安装就不用说了,ubuntu用户就是安装privoxy这个包,它可以作为服务启动,配置在“/etc/privoxy/”文件夹下,也可以指定配置文件独立运行,用普通用户帐号运行测试好配置后再copy过去,语法

privoxy --no-daemon configfile

还记得和Tor配合使用时,需要修改“/etc/priboxy/config”吧,需要手动加入如下一行

forward-socks5 / 127.0.0.1:9050 .

这一行的意思是

  1. “forward-socks5”表示使用父代理了,这个代理是socks5代理。
  2. “/”表示转发地址开头是“/”的请求,因为http的header中地址肯定开头是“/”,它是部分匹配,所以这个“/”就表示所有http数据了。
  3. “127.0.0.1:9050”这个就是父代理的地址。
  4. 最后那个点,意思是父代理直接处理数据了。如果不是点而是个代理地址,那么父代理要把数据再转发到这个代理地址,这样组成一个代理链,穿过N层,防跨省必修技术!

具体的用法可看手册,Forwarding语法在这里,而网址表达式语法在这里

不一定是“forward-socks5”,如果父代理也是个http代理,比如gappproxy,关键字是”forward”(注意最后不用那个点),可以写任意多行,协议可以不同,网址可以不同,代理也可以不同。新建一个名为“config”文件,加入

很简单,发给“youtube.com”和“ytimg.com”的包转发给“127.0.0.1:8080”这个socks5代理,Tor或者 ssh,“twitter.com”和“blogspot.com”发给“127.0.0.1:8000”这个http代理,gappproxy或其它。 你可以写任意行,最后运行

privoxy --no-daemon config

设置Chrome代理为“127.0.0.1:8118测试一下,其程序如wget、curl、smplayer也行,export出“http_proxy”环境变量就行了。这样做任意程序都实现了Foxyproxy和Autoproxy功能了!

使用action文件

“config”文件是Privoxy的主配置文件,但是修改代理地址是个问题,虽然可以用查找替换,还是比较麻烦,也不直观。我在上一篇文章说理想的设计是,一个规则包括一个代理对应一堆网址表达式,Privoxy可不可以做到这样呢?答案也是肯定的,我就是看了Privoxy的用法后改写pac文件。

Privoxy的方法就是使用action文件,都说Privoxy强在过滤,action文件就是Privoxy的过滤规则文件,作用是满足某些 条件执行相应动作。主配置文件中条件只能用网址,在action文件中可以设置更详细的条件,比如User Agent,其实Forwarding也是个动作之一。

重新编辑“config”文件,替换成这一行

actionsfile proxy.action

表示使用“proxy.action”这个文件为actionsfile。接着在同目录新建“proxy.action”,加入下面代码

{{alias}}
direct = +forward-override{forward .}
ssh = +forward-override{forward-socks5 localhost:8080 .}
gappproxy = +forward-override{forward localhost:8000}
 
{direct}
.google.com
.googleusercontent.com
.mozilla.com
 
{ssh}
.youtube.com
.ytimg.com
 
{gappproxy}
.twitter.com
.blogspot.com
feedproxy.google.com

语法一目了然吧,都不用多废话了,前面是定义alias动作,后面是alias名称跟对应的网址表达式,符合网址表达式就执行alias中的动作。

action文件的语法可看手册,而“forward-override”这个动作在这里。至于可不可以把gfwlist转换成privoxy的action文件,那个别人要做的事了。



--
Posted By GFW BLOG 功夫网 to GFW BLOG at 10/17/2010 08:50:00 AM

--
1、我们的订阅地址:http://feeds2.feedburner.com/chinagfwblog。2、发一封标题为GFW的邮件到fanqiang70ma@gmail.com,就可获取翻墙利器赛风新地址。附《数字时代》赠阅版。3、本站热烈欢迎各位朋友投稿或推荐文章,请发邮件至chinagfwblog[at]gmail.com。
停止订阅,请发邮件到
gfw-blog+unsubscribe@googlegroups.com

没有评论:

发表评论