Privoxy是一个轻量的代理服务器,没有缓存,简单易用,比起Squid使用上方便不少,Squid过于复杂不适合一般性的个人应用。
现在我需要把ssh的socks5代理转成http代理(因为有些情况只能用http代理)。并且可以让别人也使用这个代理,并且别人用的话我需要指定一些规则,我用是windows xp环境。
配置文件里面注释相当详细,最好关键配置的注释都看一遍。打开主配置
#不指定IP可以允许所有机器访问
listen-address :8118
#指定ACL可以更明确一些
permit-access 127.0.0.1
permit-access 192.168.2.0/24
#转发到ssh的sock5,最后有个点别丢了
forward-socks5 / 127.0.0.1:8001 .
现在代理就可以使用了,关键是我的socks是花钱的有流量限制,万一别人看视频忘了切代理那我就惨了(我这代理速度真可以看视频),所以别人用我需要指定一些固定的网址,当然自己用就没有限制了。
端口转发这一层可以设置,不符合条件的网址跳过代理直接连接,但是这样也占本机流量,所以在这一层限制也不太合适,我的转发规则如下:
forward-socks5 / 127.0.0.1:8001 . |
forward 192.168.*.*/ . |
forward 127.*.*.*/ . |
forward 10.*.*.*/ . |
往上推到ACL,看ACL的说明确实可以通过多行方式限制可访问网址(本质上也是基于主机),但是有这么一段话
# If Privoxy is using a forwarder (see forward below) for a |
# particular destination URL, the dst_addr that is examined is |
# the address of the forwarder and NOT the address of the ultimate |
# target. This is necessary because it may be impossible for the |
# local Privoxy to determine the IP address of the ultimate target |
# (that's often what gateways are used for). |
做了端口转发的话ACL就管不着了,所以ACL也搞不定。扫了一下官方文档,Privoxy有action和filter两个概念,action看了一下可以block,filter是对内容过滤。action的规则有点复杂,大概扫了一眼示例和demo用以下方式确实实现了,编辑User Actions,最后面加入
{ +block } |
/ |
{ -block } |
.ip138.com/* |
.google.com.hk/* |
.facebook.com/* |
.fbcdn.net/* |
测试了一下确实和想象的一样。比如访问一个非列表中的网址
我自己用代理不能有限制,这怎么实现?在ACL中根据来源IP读取不同的action配置不能实现,Privoxy可以同时监听多个端口,根据端口读取不同action不能实现,通过差文档和自己实践确认实现不了,如果谁知道怎么实现告诉我一声。
继续查文档发现windows下Privoxy可以做成服务,自己做了两个不同名字的服务,监听的端口也不一样,但是两个服务只能同时有一个启动(服务启动的时候privoxy.exe也会随之启动),应该是当时用了一个privoxy.exe安装服务的时候导致,就亲自测试了。
其实官方文档上也说了,privoxy可以同时启动多个实例,每个实例一份独立的配置文件,不过那说的是linux下,privoxy有多个参数可已使用,windows下只有安装和删除服务的参数可用。其实windows下privoxy可以同时启动多个实例,只需要把程序目录拷贝多份并修改配置文件即可,所以不同人不同配置的问题启动多个进程就解决了。解决问题的关键在于过程,因为我也第一次用privoxy很多东西不了解,以为这样的需求应该和squid一样应该是内部实现的,另外解决问题过程中还能发现其他很多东西。
Leave a reply