强大的代理调度器代理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文件,那个别人要做的事了。
来源:七星庐 原文:强大的代理调度器代理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
。
至此,店主妹妹学徒毕业,正式接任。
请问是否可以支持多端口代理?比如开启两个端口,一个为全局,一个使用action切换?
建议看一下官方文档
actionfiles gfw.action
这一段应该是
actionsfile gfw.action
望博主修正一下。
找到原始文件 这个值得好好研究!!1
感谢支持
AutoProxy2Privoxy把AutoProxy规则转换成Privoxy格式 https://github.com/cckpg/autoproxy2privoxy
原来这么搞的,成了,谢谢!