2018年3月30日星期五

使用Privoxy建立代理中心,共享任意代理资源

无法查看这则摘要。请 点击此处查看博文。

如何用 Privoxy 辅助翻墙

如何用 Privoxy 辅助翻墙?

文章目录
★Privoxy 是啥?
★Privoxy 能干啥?
★Privoxy 【不能】干啥?
★下载和安装
★基本使用
★基本配置的语法
★如何辅助翻墙?
★结尾

★Privoxy 是啥?


  简而言之,Privoxy 是一款功能很强的,开源的,跨平台的 HTTP 代理工具。
  其官网链接在“这里”;其维基百科的词条在“这里”。


★Privoxy 能干啥?


  从表面上看,Privoxy 只是一个 HTTP 代理。但是它提供了非常强大的定制功能。利用这些定制功能,可以完成很多你意想不到的事情。
  简单列举一下,Privoxy 【至少】可以实现如下功能:
  1. 根据定制的规则,进行代理转发(链式代理)
  在咱们天朝,这个功能主要是用来辅助翻墙。
  先说明一下:此处提及的“链式代理”(洋文是“a chain of multiple proxies”),跟俺经常提及的“多重代理”,【不是】一回事儿。
  这个“链式代理”,有时候也可以称之为“代理转发”。它跟“端口转发”有点类似(关于“端口转发”,俺在前两年的博文《多台电脑如何共享翻墙通道》中有介绍,不清楚的同学可以去看一下)。差别在于,“端口转发”工作在 TCP 层面(传输层),而 Privoxy 的“代理转发”工作在传输层之上(通常是“应用层”)。
  这方面的功能,是本文重点要聊的。
  2. 根据定制的规则,修改 HTTP 页面的内容
  这个功能主要是用来优化网页。比如“去除广告,精简页面,美化布局”等等。
  (今天暂且不谈这方面的功能)
  3. 根据定制的规则,修改 HTTP Header 的字段
  Privoxy 既可以修改 HTTP Request 的 Header,也可以修改 HTTP Response 的 Header。
  这个功能有助于保护隐私。比如“禁用 cookie、限制 cookie 的生命周期、伪装 User Agent”等等。
  (今天暂且不谈这方面的功能)
  4. 根据定制的规则,对网络传输做一些优化
  比如“共享TCP连接”。
  (今天暂且不谈这方面的功能)

  刚才说的是功能特性,再来说一下其它的几个特性。
1. Privoxy 是完全开源的(采用的是 GPL 开源协议)
2. Privoxy 能够很好地跨平台(至少支持:Windows、Linux、Mac OS X、各种 Unix)
3. Privoxy 很轻量级(看看它的安装包就晓得,不到 1MB)
4. Privoxy 是老牌的(诞生于2001年),用户很多,口碑不错。因此,稳定性/可靠性等方面有保障。


★Privoxy 【不能】干啥?


  光靠 Privoxy 自己,是无法翻墙的——Privoxy 虽然能提供 HTTP 代理,但是 Privoxy 自己并【没有】对应的“代理服务器”。它仅仅是一款“客户端的代理工具”。
  所以,本文标题用的是“辅助翻墙”——意思是说,Privoxy 起的是“辅助作用”。


★下载和安装


  (考虑到大部分读者用的是 Windows,所以俺拿 Windows 环境来说事儿;至于用 Linux 的同学,主流发行版的软件包应该都包含了 Privoxy,无需上 Privoxy 官网就可以安装)
  用 Windows 的同学,到“官网首页”直接可以找到下载链接。点击下载链接,会跳转到 sourceforge.net 上。然后让你选操作系统。Windows 用户就选 Win32。
  选完 Win32,再选版本号。通常就选最新版本(截止俺写本文时,最新版本是 3.0.22)。话说 Privoxy 的版本跟其它软件不太一样——它在2002年就已经是 3.0.0 版本。这么多年,才升到 3.0.22,真够慢的。
  选完版本号,然后你可以下载“exe 格式”或“zip 格式”。如果是“exe 格式”,就是一个安装文件,双击就可以安装(安装过程很容易,俺就不详述了);如果你选“zip 格式”,就是一个【绿色免安装】的压缩包。你把这个 zip 随便解压到某个目录下,就可以用了。
  俺本人比较喜欢“绿色软件”,所以每次都下载“zip 格式”。


★基本使用


  Privoxy 默认安装好就可以使用了。它默认会开启 HTTP 代理,端口号是 8118,绑定在 127.0.0.1 这个地址。
  你把浏览器的 HTTP 代理作相应的设置,浏览器就会走 Privoxy 的 HTTP 代理。
  为了检验你的浏览器是否正确配置了 Privoxy 的代理,你可以在浏览器的地址栏输入 http://p.p/ 并回车。如果浏览器的页面上出现 Privoxy 的相关信息,说明你的浏览器已经走 Privoxy 的 HTTP 代理。


★基本配置的语法


  先介绍几个最基本的配置语法。难度不大,技术菜鸟应该也能看懂。
  如果你喜欢折腾并且稍微懂点 IT 技术,不满足于俺介绍的“基本配置”,可以自行查看 Privoxy 的官网文档,了解它的“高级配置”(比如:“Action”和“Filter”)。

◇配置文件说明


  前面说了——Privoxy 的定制功能超强,所以它的配置文件也不少。如果你是技术菜鸟,或者你只想了解“基本配置”,那么就只需要去编辑它的“主配置文件”。
  主配置文件
  对于 Windows 系统,主配置文件放置在跟 privoxy.exe 相同的目录下,文件名为 config.txt
  对于“Linux/Unix”,主配置文件放置在 /etc/privoxy 目录下,文件名为 config
  Privoxy 的配置文件,都是纯文本文件。如果某一行是以 井号 # 开头,说明这一行是注释。

◇如何定制 Privoxy 的“监听端口及绑定地址”


  先来说最最基本的配置——设定 Privoxy 的监听端口号和绑定的地址。
  介绍这个的目的,是让你先稍微熟悉一下——如何修改 Privoxy 的主配置文件。因为后面的定制,需要经常去修改它。
  Privoxy 的监听端口号,默认是 8118,默认绑定的地址是 127.0.0.1(这个地址代表“当前系统”)。由于默认是绑定在 127.0.0.1 这个地址,所以只有当前系统的软件才可以连接到 Privoxy 的监听端口。
  如果你希望其它操作系统的软件也可以连接到 Privoxy 的监听端口,可以修改绑定的地址,把 127.0.0.1 改为 0.0.0.0 表示绑定在“任意地址”。
  操作步骤如下:
  找到“主配置文件”,用你比较顺手的文本编辑器打开,在尾部增加如下一行
listen-address  0.0.0.0:8118
如果你不喜欢 8118 这个端口号,也可以换成别的。
  修改完之后,启动 Privoxy,然后在命令行使用 netstat 命令,就可以看到多出来一个 8118 的端口(关于 netstat 的使用,可以参见《多台电脑如何共享翻墙通道》)。

◇如何定制“HTTP 代理转发”


  刚才那个只是热身,下面来一个稍微复杂点的——“链式代理/代理转发”。
  关于“链式代理/代理转发”的概念,本文开头部分已经大致解释了。这里就不再重复罗嗦了。
  所谓的“HTTP 代理转发”就是说:Privoxy 把自己收到的 HTTP 请求转给另一个 HTTP 代理,再由该代理转到你最终访问的网站。
  大致示意图如下(今天偷个懒,只画了“基于字符的示意图”):
   |====>|       |====>|      |====>|
浏览器|     |Privoxy|     |HTTP代理|     |目标网站
   |<====|       |<====|      |<====|
示意图中的 ====> 表示 HTTP 请求
示意图中的 <==== 表示 HTTP 响应

  HTTP 代理转发的语法如下(把该语法添加在“主配置文件”尾部):
forward  target_pattern  http_proxy:port
语法解释:
  该命令分3段,各段之间用空格分开(可以用单个空格,也可以多个空格)
  第1段的 forward 是固定的,表示:这是 HTTP 转发
  第2段的 target_pattern 是个变量,表示:这次转发只针对特定模式的 HTTP 访问目标
  第3段的 http_proxy:port 也是变量,表示:要转发给某个 HTTP 代理(IP 冒号 端口)。如果“第3段”只写一个单独的小数点,表示直连(不走代理)。

  举例1
forward  /  127.0.0.1:8080
上述这句表示:
把所有的 HTTP 请求都转发给本机(127.0.0.1 表示本机)的 8080 端口
target_pattern 设置为“单个斜线”,表示匹配“所有的 URL 网址”

  举例2
forward  .google.com/  127.0.0.1:8080
上述这句表示:
如果 HTTP 请求是发送给 .google.com 这个域名的下级域名,那么就把该 HTTP 请求转发给本机(127.0.0.1 表示本机)的 8080 端口
.google.com 的写法,可以匹配如下这类域名:
www.google.com
mail.google.com
plus.google.com
(以此类推)
补充说明:
本例子中,target_pattern 变量是 .google.com/
这个写法表示:该变量只匹配域名,不匹配网页的路径。根据 Privoxy 的语法规则,最末尾的斜线可以省略。
因此,本例子也可以等价地写为:
forward  .google.com  127.0.0.1:8080

  举例3
forward-socks5 .onion localhost:9050 .
上述这句表示:
把顶级域名为 .onion 的 HTTP 请求都转发给本机(localhost 也可以用来表示本机,相当于 127.0.0.1)的 TOR SOCKS 端口
补充说明:
普通互联网的域名,顶级域名不会是 .onion
这个顶级域名,是专门用于 TOR 暗网的。因此,本例子就是用来转发 TOR 暗网的 HTTP 请求,让 Privoxy 把这类请求转给 TOR 的 SOCKS 端口。

◇如何定制“SOCKS 代理转发”


  所谓的“SOCKS 代理转发”,就是说:Privoxy 把自己收到的 HTTP 请求转给另一个 SOCKS 代理;如果需要的话,还可以由这个 SOCKS 代理再转给另一个 HTTP 代理。

  示意图1(先转发到 SOCKS 代理,然后转到目标站)
   |====>|       |====>|       |====>|
浏览器|     |Privoxy|     |SOCKS代理|     |目标网站
   |<====|       |<====|       |<====|
|此阶段是 |       |此阶段是 |       |此阶段是 |
   |HTTP |       |SOCKS|       |HTTP |

  示意图2(先转发到 SOCKS 代理,再转发到某个 HTTP 代理,最后才转到目标站)
   |====>|       |====>|       |====>|      |====>|
浏览器|     |Privoxy|     |SOCKS代理|     |HTTP代理|     |目标网站
   |<====|       |<====|       |<====|      |<====|
|此阶段是 |       |此阶段是 |       |此阶段是 |      |此阶段是 |
   |HTTP |       |SOCKS|       |HTTP |      |HTTP |


  SOCKS 代理转发,包括如下几种语法:
forward-socks4   target_pattern  socks_proxy:port  http_proxy:port
forward-socks4a  target_pattern  socks_proxy:port  http_proxy:port
forward-socks5   target_pattern  socks_proxy:port  http_proxy:port
forward-socks5t  target_pattern  socks_proxy:port  http_proxy:port
语法解释:
  该命令分4段,各段之间用空格分开(可以用单个空格,也可以多个空格)
  第1段是以 forward 开头的,表示 SOCKS 转发的类型。目前支持 4 种类型。
前面3种(forward-socks4 forward-socks4a forward-socks5)分别对应不同版本的 SOCKS 协议。
最后一种 forward-socks5t 比较特殊,是基于 SOCKS5 协议版本,但是加入针对 TOR 的扩展支持(优化了性能)。只有转发给 TOR 的 SOCKS 代理,才需要用这个类型。
  第2段的 target_pattern 是个变量,表示:这次转发只针对特定模式的 HTTP 访问目标
  第3段的 socks_proxy:port 也是变量,表示:要转发给某个 SOCKS 代理(IP 冒号 端口)
  第4段的 http_proxy:port 也是变量,表示:在经由前面的 SOCKS 代理之后,再转发给某个 HTTP 代理(IP 冒号 端口)
第4段如果写成一个单独的小数点,相当于“示意图1”;如果第4段填写了具体的 IP 和端口,相当于“示意图2”。

  举例1
  如果你本机安装了 TOR Browser 软件包,可以使用如下语法,把 Privoxy 收到的 HTTP 请求转发给 TOR Browser 内置的 SOCKS 代理。
forward-socks5  /  127.0.0.1:9150  .

  补充说明一下:
  TOR Browser 软件包开启的监听端口是 9150;如果你用的是 TOR 的其它软件包,需要把上述的 9150 端口号改为 9050
(关于 TOR 的不同软件包的差异,参见《“如何翻墙”系列:关于 TOR 的常见问题解答》)


★如何辅助翻墙?


◇跨系统共享 VPN 的翻墙通道


  VPN 翻墙,大伙儿应该都很熟悉了,俺就不再浪费口水解释了。
  VPN 翻墙的特点是——只要你系统中的 VPN 通道建立了,那么【整个系统】中的软件,(无需配置)自动就会走 VPN 通道。因此,VPN 有时候也被称为是“系统全局代理”。这是“VPN 式翻墙”相比“代理式翻墙”优越之处。
  但是 VPN 翻墙有一个缺点,就是不方便共享 VPN 的翻墙通道给【其它系统】。相比而言,“代理式翻墙”很容易跨系统共享翻墙通道。
  要想解决 VPN 翻墙的这个缺点,Privoxy 再次派上用场。配置步骤如下:
1.
把 Privoxy 跟 VPN 安装到同一个操作系统中。
2.
配置 Privoxy 的监听选项,把监听地址设置为 0.0.0.0(表示监听端口绑定到任意地址)
至于端口号,你可以直接用默认的 8118,也可以自己另选一个。
(如何修改 Privoxy 的监听选项,刚才已经提及)
3.
把 VPN 和 Privoxy 都运行起来。确保 VPN 处于联通状态。
4.
配置其它系统中的网络软件的 HTTP 代理。
HTTP 代理的“IP 地址”指向安装 Privoxy 的系统的 IP 地址。
HTTP 代理的“端口号”设置为 第2步 里面配置的端口号。

◇让“不支持 SOCKS 代理的软件”,使用 SOCKS 代理


  为了傻瓜化一些,举个例子来说明:
  假设你在电脑上安装了 TOR Browser 软件包,另外还安装了一个聊天工具。你想让这个聊天工具走 TOR 的线路(为了翻墙,或为了提高隐匿性)。但是你比较倒霉,你用的这款聊天工具,只支持 HTTP 代理,不支持 SOCKS 代理。而 TOR Browser 软件包,默认只提供 SOCKS 代理。这可咋办捏?
  这时候,Privoxy 就派上用场啦——使用前面提到 “SOCKS 代理转发”。
  你可以设置聊天工具的 HTTP 代理,指向 Privoxy;然后在 Privoxy 上做些简单的配置(如何配,刚才已经讲过),Privoxy 就可以把聊天工具的 HTTP 请求,转换为 SOCKS 请求,然后通过 TOR 的 SOCKS 代理,传输到聊天服务器。

◇根据“访问的网站”分流到不同的翻墙通道


  如今翻墙工具有很多,各有特色。比如基于 TOR 的双重代理(教程参见《如何隐藏你的踪迹,避免跨省追捕》),隐匿性很强,但是速度不够快;而 GAE 翻墙速度会比较快,但是安全性很不好。
  那么,如何充分利用不同翻墙工具的特长捏?你可以根据不同的上网情况,发挥不同翻墙软件的特长。
  比如说,观看 Youtube 视频的时候,就走 GAE 的翻墙通道(GoAgent 之类);而如果要在网上论坛发表敏感的政治言论,就走“双重代理”的通道。
  面对这种需求,Privoxy 的特长就体现出来啦。你可以编辑 Privoxy 的主配置文件,让不同网站的网络流量,走不同的翻墙通道。具体的配置语法,也就是本文前面提及的“HTTP 代理转发”和“SOCKS 代理转发”。因为大部分翻墙代理,提供的代理方式,无非就是 HTTP 和 SOCKS 两种。

  举例——设想如下的使用场景:
  假设你手头有一个 TOR,已经可以基于 meek 独立联网(meek 的使用可以参考《TOR 已复活——meek 流量混淆插件的安装、优化、原理》),专门用来上俺博客发表敏感的政治评论;
  另外,你手头还有一个 GAppProxy(GAE 翻墙),在本地开启了 8000 端口的 HTTP 代理,专门用来看 YouTube 视频;
  除了上述两个网站,其它网站你都是直接访问(直连)。
  那么,你可以使用如下配置,让 Privoxy 帮你进行分流。
forward  /  .
forward  .youtube.com  127.0.0.1:8000
forward-socks5  program-think.blogspot.com  127.0.0.1:9150  .
解释:
第1行表示:因为匹配的目标是 / 表示匹配“所有的网址”。所以这条可以看成是“默认规则”。(在 Privoxy 里面,“后面的规则”会覆盖“前面的规则”,所以“默认规则”总是写在开头)。
第2行表示:凡是 .youtube.com 的下级域名都走 127.0.0.1:8000 的 HTTP 代理。
第3行表示:访问 program-think.blogspot.com 站点都走 127.0.0.1:9150 的 SOCKS 代理。(提醒一下:此行末尾的小数点别漏看了)

◇跟“浏览器翻墙扩展”的对比


  (先插一句:很多同学习惯于称呼“代理插件”,其实更准确的叫法是“代理扩展”。关于 Plugin 和 Extension 的差别可以参见《如何保护隐私》系列的第2篇
  如果你是老读者,并且看过俺写的《翻墙入门教程》,应该对基于浏览器的“代理扩展”毫不陌生。比较知名的“代理扩展”包括 FoxyProxy 和 AutoProxy。
  表面上看,“浏览器的翻墙扩展”也可以达到跟 Privoxy 类似的效果。但是捏,“翻墙扩展”是依赖于具体的某款浏览器(假设你用的是 IE,那么就没法使用 FoxyProxy 和 AutoProxy)。而 Privoxy 跟浏览器的类型完全无关,可以跟【任何一款】浏览器结合——这就是 Privoxy 的优势之一。
  其次,“翻墙扩展”运行在浏览器内部。万一“翻墙扩展”有后门,会产生严重威胁(比如偷窥到你的密码输入)。而 Privoxy 是独立于浏览器的软件(独立的进程)。Privoxy 无法直接访问到浏览器进程的内存。如果你是个“安全控”,还可以把 Privoxy 和 浏览器 分别装到不同的虚拟机,实现“系统级隔离”。(没听说过“操作系统虚拟机”的同学,可以看俺写的系列《扫盲操作系统虚拟机》)


★结尾


  本来计划把 Privoxy 的各种功能都介绍一遍。发现篇幅会很长。所以就先介绍和“翻墙”相关的部分。如果大伙儿感兴趣,俺再介绍 Privoxy 的其它用途(隐私保护、屏蔽广告、页面优化)。
https://program-think.blogspot.com/2014/12/gfw-privoxy.html

Privoxy shadowsocks

Privoxy shadowsocks


shadowsocks 是一个 SOCKS5 代理,所以,它的用法跟 SSH 搭建 SOCKS 代理服务器差不多。至于谁好谁坏,谁快谁慢,环境不一样,我觉得很难有固定标准,所以还是靠自己的感受判断。

服务器端安装 shadowsocks

首先根据 shadownsocks 安装说明 在服务器(比如 VPS)上安装 shadowsocks 并配置、启用。

本地安装 shadowsocks

在本机上,我们还需要一个 shadowsocks 客户端。通常照服务器端一样安装,安装后 shadowsocks 提供有 sslocal 命令。
以我的 openSUSE 13.2 为例,安装完 shadowsocks-libev,根据服务器端的配置修改 /etc/shadowsocks/shadowsocks-libev-config.json 文件,然后执行 ss-local 命令(注意,libev 版本的命令比其他版本的 shadowsocks 命令多出中间一个连字符):
ss-local -c /etc/shadowsocks/shadowsocks-libev-config.json
运行的结果如下:
2014-11-12 09:49:44 INFO: initialize ciphers… aes-256-cfb
2014-11-12 09:49:44 INFO: server listening at port 1080.
说明本地 shadowsocks 服务器已经在 127.0.0.1:1080 上监听。

Privoxy 转发

接下来就是把 Privoxy 的流量转发到本机的 1080 端口。
打开 Privoxy 的 config 文件,添加如下规则:
forward-socks5 / 127.0.0.1:1080 .
规则的具体意义见 SSH 搭建 SOCKS 代理服务器一篇。
https://zfanw.com/blog/privoxy-shadowsocks.html

我的科学上网技巧

我的科学上网技巧

尽管也称互联网,但在国内,如若有以下一个或多个需求,你就不得不学习一下科学上网了:
  1. 访问的网站或服务被(GFW)墙;
  2. 网络提供商(ISP)劫持了网络流量;
  3. 需要匿名(隐藏真实 IP)的情况,如渗透测试;
  4. 躲避网络监控;
  5. 其他情况。
这里分享一下我的科学上网技巧,使用到的工具软件可能有 ShadowsocksLanternPrivoxyTor。根据不同的目的选择不同的工具。

一、绕过 GFW 和 ISP 劫持

最简单和不折腾的方法是购买 VPN,次之是购买一台海外 VPS,自己安装 VPN 或 Shadowsocks 服务端。VPN 的优点是可以全局翻墙,Shadowsocks 虽然可以设置全局模式,但是对于不支持代理的本地应用是没有办法的,当然这种情况下可以试试 ProxifierPE 强制所有连接通过代理上网。
使用 Shadowsocks 可能遇到的另一个问题是,因为 Shadowsocks 使用的是 SOCKS5 类型的代理,当本地应用只支持 HTTP/HTTPS 类型代理时,就需要自己解决 HTTP 转换为 SOCKS5 的问题。当然,这个问题使用 Privoxy 就能很好地解决。
本节主要介绍如何组合使用 Shadowsocks 和 Privoxy,并假设你已经安装并配置好了 Shadowsocks(Linux 中可以安装 shadowsocks-qt5 或 命令行版本的 Shadowsocks)。
Shadowsocks 与 Privoxy 组合使用的示意图如下所示:
Shadowsocks_Privoxy

假设你已经配置好了 Shadowsocks,接下来配置 Privoxy。
Windows 系统中右键点击 Privoxy 托盘图标,依次点击 Edit - Main Configuration 打开配置文件;Linux 系统中 Privoxy 的配置文件位于/etc/privoxy/config
配置文件修改为:

1
2
3
4
5
6
# 把 HTTP 流量转发到本机 127.0.0.1:1080 的 Shadowsocks
forward-socks5 / 127.0.0.1:1080 .

# 可选,默认只监听本地连接 127.0.0.1:8118
# 可以允许局域网中的连接
listen-address 0.0.0.0:8118

启动 Shadowsocks 和 Privoxy 后,把本地应用的代理设置为 HTTP/HTTPS 类型的 127.0.0.1:8118,就可以绕过 GFW 和 ISP 了。如果局域网中的其他 PC 或手机也希望使用该电脑上网(假设该电脑 IP 地址为 192.168.1.10),把它们的代理设置为 19.168.1.10:8118 即可。
Tips
目前,有一个讨巧的的办法替代这两者的组合:使用 Lantern —— 一款开源的安全上网工具。它使用的是 HTTP 类型代理,本地端口为 8787,也就是说,把本地应用的代理设置为 127.0.0.1:8787 就可以使用 HTTP 类型的代理了。而且使用它,也无需自己购买 VPS。
Lantern 默认非全局代理,可以在设置中改为全局模式。
另一方面,Lantern 只监听本机 127.0.0.1:8787 的连接,如果局域网中的电脑或手机也想通过这台电脑翻墙(假设该电脑 IP 地址为 192.168.1.10),那么也需要配合 Privoxy 使用。这时,Privoxy 的配置应该如下:

1
2
3
# 监听局域网中连接到本地 8118 端口的连接,转发给 8787 端口的 Lantern
forward / 127.0.0.1:8787
listen-address 127.0.0.1:8118    # 可改为 0.0.0.0:8118 允许局域网的连接

二、匿名上网

网络中保持匿名的办法是使用 Tor,匿名的意思是隐藏你当前的 IP 地址。Internet 上有很多志愿者运行着 Tor 中继节点,Tor 能保证从出发点的流量至少经过三个不同的中继节点到达目的地址,而且这三个不同的中继不会每次都相同。
形象地说,你想把一封匿名信交给小明,在大街上随便找了一陌生人 A 让 A 帮忙转交,A 走了一段路程后随便找了一个陌生人 B 让 B 帮忙转交,B 走了一段路程后随便找了一个陌生人 C 让 C 帮忙转交,最终 C 按照信封上的地址找到了小明并把信交给了他。小明只知道是 C 转交了这封信,至于是谁写的这封信,他就无从得知了。A、B、C 分别对应着 Tor 网络的中继节点,这种投递匿名信的方式就起到了隐藏 IP 地址的效果。
如下图所示,使用 Tor 从本机经过三跳访问了 Google。
Tor_Browser

Tor 浏览器

为了方便使用 Tor,Tor 开发者把 Tor 集成到了定制版的 Firefox 中,简单设置一下就能正常使用。
Tor 浏览器专为大陆等网络环境加入了流量混淆的选项。首次打开浏览器时会弹出 Tor 状态检查,点击设置配置 Tor 网桥,勾选互联网提供商(ISP)是否对 Tor 网络连接进行了封锁或审查中的,把下一步中的网桥类型选择meek-amazonmeek-azure。这两者在大陆没被完全封锁,因此可以用来做跳板网桥。
不过随着网络环境的恶化,Tor 提供的网桥类型都不可用时,就需要使用自己的 Shadowsocks 或 Lantern 代理了。
首次打开 Tor 浏览器,在 Tor 设置中勾选互联网提供商(ISP)是否对 Tor 网络连接进行了封锁或审查中的,在下一步是否需要本地代理访问互联网?中选择,下一步中设置你的代理:
  • 使用 Shadowsocks 则设置为 SOCKS5 类型的 127.0.0.1:1080
  • 使用 Lantern 则设置为 HTTP/HTTPS 类型的 127.0.0.1:8787
如果通过局域网中其他计算机的配置联网,把 127.0.0.1 改为那台计算机的 IP 地址。
使用了代理的 Tor 浏览器原理示意图如下(以 Tor + Shadowsocks 组合为例):
Tor_Shadowsocks

Tor Expert Bundle

Tor 浏览器适用于使用浏览器匿名上网的场景,如果打算让本地应用(如其他浏览器、Linux 中的 Terminal 等)也使用 Tor 隐藏 IP 地址,那么就需要自己手动配置 Tor 了。从 Tor 官网下载 操作系统对应的 Expert Bundle,它只包含 Tor 工具,不含浏览器。
假设你已经配置好了 Shadowsocks,接下来,为 Tor 配置 Shadowsocks 代理。
Windows 系统中,打开 %AppData%/tor 目录(如果不存在则创建该目录),新建 torrc 文件,内容如下:

1
2
3
4
5
6
7
8
## 通过 SOCKS5 代理
SOCKS5Proxy 127.0.0.1:1080
## 如果使用 HTTP/HTTPS 代理
# HTTPSProxy 127.0.0.1:8118

## 如果只允许特定端口的网络连接,如 80 和 443
ReachableAddresses *:80,*:443
ReachableAddresses reject *:*

Linux 系统中,Tor 的配置文件位于 /etc/tor/torrc,配置内容同上。
启动 Shadowsocks 和 Tor,因为 Tor 监听的是 SOCKS5 类型的本地 9050 端口,把需要匿名的本地应用代理设置为 SOCKS5 类型,代理地址设置为 127.0.0.1:9050,实现匿名上网。
还是老问题,如果本地应用只支持 HTTP/HTTPS 代理类型,那么仍需要使用 Privoxy,修改其配置文件为:

1
2
forward-socks5 / 127.0.0.1:9050 .
listen-address 127.0.0.1:8118    # 可改为 0.0.0.0:8118 允许局域网的连接

这样一来,本地应用的代理设置为 HTTP/HTTPS 类型的 127.0.0.1:8118 就可以实现匿名上网了。
Privoxy + Tor + Shadowsocks 组合使用示意图如下所示:
此处输入图片的描述

One More Tip

使用 Tor 匿名访问网络除了应用于渗透测试,另一个应用场景是编写爬虫变换 IP 地址爬取站点,减小被网站屏蔽的可能性。
在 Linux Terminal 中,使用 export 命令设置代理,可以只在当前 Terminal 中生效,

1
2
export http_proxy=http://127.0.0.1:8118
export https_proxy=https://127.0.0.1:8118

三、总结

接下来简要归纳上述内容,给出每种组合的配置内容。

Privoxy + Shadowsocks 组合 —— 翻墙

配置 Privoxy,Linux 系统中位于 /etc/privoxy/config

1
2
forward-socks5 / 127.0.0.1:1080 .
listen-address 127.0.0.1:8118    # 可改为 0.0.0.0:8118 允许局域网的连接

本地代理需设置为 HTTP/HTTPS 类型的 127.0.0.1:8118
如果不使用 Privoxy,本地代理需设置为 SOCKS5 类型的 127.0.0.1:1080

Privoxy + Tor + Shadowsocks 组合 —— 匿名上网

配置 Privoxy,Linux 系统中位于 /etc/privoxy/config

1
2
forward-socks5 / 127.0.0.1:9050 .
listen-address 127.0.0.1:8118    # 可改为 0.0.0.0:8118 允许局域网的连接

配置 Tor,Windows 系统中位于 %AppData%/tor/torrc,Linux 系统中位于 /etc/tor/torrc

1
2
3
SOCKS5Proxy 127.0.0.1:1080    # Shadowsocks 代理地址
ReachableAddresses *:80,*:443
ReachableAddresses reject *:*

本地代理需设置为 HTTP/HTTPS 类型的 127.0.0.1:8118
如果不使用 Privoxy,本地代理需设置为 SOCKS5 类型的 127.0.0.1:9050

Privoxy + Tor + Lantern 组合 —— 匿名上网

配置 Privoxy,Linux 系统中位于 /etc/privoxy/config

1
2
forward-socks5 / 127.0.0.1:9050 .
listen-address 127.0.0.1:8118    # 可改为 0.0.0.0:8118 允许局域网的连接

配置 Tor,Windows 系统中位于 %AppData%/tor/torrc,Linux 系统中位于 /etc/tor/torrc

1
2
3
HTTPSProxy 127.0.0.1:8787    # Lantern 代理地址
ReachableAddresses *:80,*:443
ReachableAddresses reject *:*

本地代理需设置为 HTTP/HTTPS 类型的 127.0.0.1:8118
如果不使用 Privoxy,本地代理需设置为 SOCKS5 类型的 127.0.0.1:9050
https://g2ex.github.io/2016/05/20/Tips-on-Chinternet/