强大的代理调度器代理Privoxy

2010年10月18日 | 分类: 代理工具 | 标签: , , , , ,

大家都知道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”文件,加入

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文件,那个别人要做的事了。

来源:七星庐 原文:强大的代理调度器代理Privoxy

 

使用Privoxy实现通用选择性代理功能

所谓选择性代理,就是对特定的URL采取特定的代理方案。拿翻墙来说,如果是墙内的网站,我们当然不想翻出去再翻进来上了,太费劲,而且还未必翻得进来。

AutoProxy在Firefox用户中很流行,就是因为它提供了针对GFW的智能代理选择功能。这是一个伟大的扩展,而与扩展本身同样伟大的,是这个项目维护的GFWList。这个列表用一些简单的规则列出了无数当前被墙的网址。

但是AutoProxy的通用性是比较受限的,据我所知,除了Firefox以外,就只有Chrome是被支持的。于是就有人写了一个叫 AutoProxy2Pac的工具,将AutoProxy的GFWList规则转换成PAC。由于主流浏览器都支持PAC,GFWList的通用性大大提 升。

但是仍然有一个问题,就是除了浏览器之外呢?一般的软件支持HTTP代理一般不会有问题,但是给它一个PAC,它的反应最多就是:“虾米?”

解决的办法,就是把选择性代理的任务交给代理服务器。准确地说,这是一个二级代理。打个比方,这就像是网购,亲们向店主妹妹下单就是了,至于店主妹 妹从哪里进货亲们是不管的。但店主妹妹就要考虑了,这匹马国内有,又是特产,必须从国内进货;那只鸟却不一样,国内绝种,得找国外的朋友代买才行。

这个店主妹妹的名字叫Privoxy。

Privoxy的好处是它支持HTTP和SOCKS的上游代理,并且允许用户使用灵活的规则配置选择性地使用代理。另外非常棒的一点是,当上游代理 为SOCKS4a/SOCKS5的时候,它会要求上游代理进行DNS解析,从而有效避免DNS污染。这一点也是PAC本身无法实现的。

那么首先简单介绍一下Privoxy的使用。注意以下提到的文件路径适用于Linux,其他系统请参考Privoxy用户手册。一个简单的例子:

{+forward-override{forward-socks5 127.0.0.1:7127 .}}
.youtube.com

这段规则是说,对于youtube.com及其子域名使用位于127.0.0.1:7127的SOCKS5代理,比如SSH、Tor等。将上面这段代码写到/etc/privoxy/gfw.action,然后编辑配置文件/etc/privoxy/config,加上:

actionfiles gfw.action

现在启动privoxy服务:

# /etc/init.d/privoxy start

Privoxy的默认监听地址是127.0.0.1:8118,现在打开浏览器,把这个地址设置为HTTP代理的地址,接着访问YouTube试试。

不出意外的话,YouTube现在是通过代理访问的,而其他被墙网站是上不去的。很自然的,这个时候我们就想到了GFWList。

AutoProxy2Privoxy是一个将AutoProxy的规则转换成Privoxy规则的Shell脚本。即使你不能运行这个脚本,你仍然可以从这里下载成品gfw.action。记住修改第一行的代理地址,然后复制到/etc/privoxy/gfw.action

至此,店主妹妹学徒毕业,正式接任。

原文http://cckpg.blogspot.com/2011/06/privoxy.html

  1. flz
    2015年10月11日22:33

    请问是否可以支持多端口代理?比如开启两个端口,一个为全局,一个使用action切换?

    • iGFW
      2016年7月12日15:42

      建议看一下官方文档

  2. 2014年12月29日20:13

    actionfiles gfw.action
    这一段应该是
    actionsfile gfw.action

    望博主修正一下。

  3. 旭日
    2011年9月11日21:58

    找到原始文件 这个值得好好研究!!1

  4. 匿名
    2011年9月11日15:40

    AutoProxy2Privoxy把AutoProxy规则转换成Privoxy格式 https://github.com/cckpg/autoproxy2privoxy

  5. 匿名
    2010年10月18日11:11

    原来这么搞的,成了,谢谢!