强大的代理调度器代理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 .
这一行的意思是
- “forward-socks5”表示使用父代理了,这个代理是socks5代理。
- “/”表示转发地址开头是“/”的请求,因为http的header中地址肯定开头是“/”,它是部分匹配,所以这个“/”就表示所有http数据了。
- “127.0.0.1:9050”这个就是父代理的地址。
- 最后那个点,意思是父代理直接处理数据了。如果不是点而是个代理地址,那么父代理要把数据再转发到这个代理地址,这样组成一个代理链,穿过N层,防跨省必修技术!
具体的用法可看手册,Forwarding语法在这里,而网址表达式语法在这里。
不一定是“forward-socks5”,如果父代理也是个http代理,比如gappproxy,关键字是”forward”(注意最后不用那个点),可以写任意多行,协议可以不同,网址可以不同,代理也可以不同。新建一个名为“config”文件,加入
forward-socks5 .youtube.com 127.0.0.1:8080 .
forward-socks5 .ytimg.com 127.0.0.1:8080 .
forward .twitter.com 127.0.0.1:8000
forward .blogspot.com 127.0.0.1:8000
forward feedproxy.google.com 127.0.0.1:8000
很简单,发给“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文件,那个别人要做的事了。
转自 http://qixinglu.com/archives/powerful_filter_proxy_privoxy
没有评论:
发表评论