如何优雅地用Tor_上篇

Tor这篇教程拖了好久,今天,讲讲Windows和Linux上怎么流畅地用Tor,并摆脱臃肿的自带浏览器?Linux下怎么编译Tor和obfs4proxy?另外Tor广播的Bridge时常处于不可用状态,那么怎么在自己的VPS上搭建Tor的Bridge来自用?废话不多讲,开搞。

服务端搭建Tor Bridge

这一步是非必须的,你也可以自己找网桥使用,当然自己搭建的速度可能更好,具体怎么寻找和使用网桥请看俺的下一篇博文。

vps上安装tor和obfs4proxy

apt install tor

apt install obfs4proxy

tor和obfs4都安装成功了,那么编辑tor的配置文件torrc:

vi /etc/tor/torrc

填入下面内容:

1
2
3
4
5
6
7
8
9
Log notice file /var/log/tor/notices.log
RunAsDaemon 1
ORPort auto
Exitpolicy reject *:*
BridgeRelay 1
ServerTransportPlugin obfs4 exec /usr/bin/obfs4proxy #这个是obfs4路径
ServerTransportListenAddr obfs4 [::]:41563 #这个是自定义obfs4端口
ExtORPort auto
PublishServerDescriptor 0 #如果想分享你的obfs4网桥给其它人用,请删除这一行或者把0改成bridge,你的中继将发布到网桥授权机构

保存,然后重启tor:

systemctl restart tor

执行无错后查看tor的日志文件

cat /var/log/tor/notices.log

会出现下图这样的输入:

tor2

记下图片上部的server's identity key

server's identity key 8975AAF1A5317E04600F30AD3ED43083820FF516

然后找到obfs4网桥的cert

cat /var/lib/tor/pt_state/obfs4_bridgeline.txt

会看到下面内容:

Bridge obfs4 <IP ADDRESS>:<PORT> <FINGERPRINT> cert=6LMNcXh6MIfApbZiMksnS4Kj+2sffZ5pybSqtcOO5YoHgfrMpkBJqvLxhuR2Ppau0L2seg iatmode=0

把上面IP ADDRESS换成自己的IP,PORT换成自定义的obfs4端口,FINGERPRINT换成你上面记下的key,就是一个完整的obfs4网桥了。下面是一个完整的网桥例子:

Bridge obfs4 66.42.73.78:41563 8975AAF1A5317E04600F30AD3ED43083820FF516 cert=6LMNcXh6MIfApbZiMksnS4Kj+2sffZ5pybSqtcOO5YoHgfrMpkBJqvLxhuR2Ppau0L2seg iatmode=0

接下来就可以使用自己的网桥进行连接了。当然你也可以从官方获取网桥进行桥接,下面是免费获取网桥页面:

https://bridges.torproject.org/options

下面,讲讲在Windows和Linux客户端下怎么用?

Windows上Tor的使用

由于对Windows不是很熟悉,也就没有专门去编译tor和obfs4的exe单文件,直接去官方选择Windows下载:

https://www.torproject.org/zh-CN/download/tor/

下载解压后,把tor里面的文件按照下面的文件格式组装一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
+---Data
| geoip
| geoip6
|
+---PluggableTransports
| obfs4proxy.exe
|
| libcrypto-1_1.dll
| libevent-2-1-6.dll
| libevent_core-2-1-6.dll
| libevent_extra-2-1-6.dll
| libgcc_s_sjlj-1.dll
| libssp-0.dll
| libssl-1_1.dll
| libwinpthread-1.dll
| tor.exe
| torrc
| zlib1.dll
\ tor_start.bat

上面看不懂的可看下图:

tor3

Windows下的obfs4proxy.exe文件比较麻烦,单文件没找到,直接去tor浏览器Tor Browser\Browser\TorBrowser\Tor\PluggableTransports文件夹提取一下。

然后用文本编辑器或记事本新建一个名为torrc文件,不需要后缀,填入下面内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#下面是跨机共享代理,去掉前面#号即可开启
#SocksListenAddress 0.0.0.0:9050
#下面是前置代理,去掉前面#号即可开启
#HTTPSProxy 127.0.0.1:8787
#Socks5Proxy 127.0.0.1:1080
#下面数字改为0,关闭自带网桥连接,开启前置代理
UseBridges 1
DataDirectory ./Data
GeoIPFile ./Data/geoip
GeoIPv6File ./Data/geoip6
#下面日志路径,打开后终端不会显示连接日志
#Log notice file ./Data/tor.log
#StrictNodes 1
AvoidDiskWrites 1
#下面是排除邪恶国家节点,去掉前面#号即可开启
#ExcludeExitNodes {cn},{hk},{mo},{sg},{th},{pk},{by},{ru},{ir},{vn},{ph},{my},{cu}
#ExcludeNodes {cn},{hk},{mo},{sg},{th},{pk},{by},{ru},{ir},{vn},{ph},{my},{cu}

ClientTransportPlugin obfs4 exec ./PluggableTransports/obfs4proxy managed
#普通网桥格式
Bridge 66.42.73.78:40367 8975AAF1A5317E04600F30AD3ED43083820FF516
#obfs4网桥按下面这样填写,注意:自己网桥请严格按下面格式填写,否则会报错!
Bridge obfs4 66.42.73.78:41563 8975AAF1A5317E04600F30AD3ED43083820FF516 cert=6LMNcXh6MIfApbZiMksnS4Kj+2sffZ5pybSqtcOO5YoHgfrMpkBJqvLxhuR2Ppau0L2seg iatmode=0
#tor默认的重建链路的时间是30s,可以适当延长时间保证速度
NewCircuitPeriod 900

默认是使用网桥连接,如果你没有搭建网桥或者获取的网桥连接不上,你也可以开启前置代理使用。

开启前置代理方法:去掉 Socks5Proxy 127.0.0.1:1080 前面的#号,当然也可以改为你前置客户端使用的其它端口,tor支持socks5和https前置。然后把 UseBridges 1 改为 0 就可以使用前置了。

torrc文件放在上面主目录,参照上面文件结构。完成后,还需要新建一个bat启动脚本,记事本或编辑器新建tor_start.bat文件,填入下面内容即可:

1
2
tor -f torrc
cmd/k

本来只需要tor -f torrc就可以了,如果闪退,就添加下面cmd/ktor_start.bat文件放入主目录,参照上面文件结构。

完成后,点击tor_start.bat启动就好了。Tor的端口 Socks5 127.0.0.1:9050 可以配合浏览器插件SwitchyOmega,或者其它方式使用。

Linux下编译使用Tor

其实Tor和obfs4proxy安装很简单,因为软件库里都有,直接下面两条命令即可安装完成,但碰上俺这种有洁癖的,就是喜欢自己编译。

apt安装

apt install tor

apt install obfs4proxy

经推友提醒,这里讲下apt安装后的运行路径

apt安装后tor和obfs4proxy二进制文件分别在/usr/bin/里面,这里需要修改一下torrc文件,一起启动obfs4proxy.

vi /etc/tor/torrc

添加ClientTransportPlugin路径为

ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy managed

当然,网桥和前置什么的都可以在这里面设置。

保存后就可以直接tor运行了。

编译Tor

由于系统不一,编译时缺什么依赖的话,自己按错误提示添加。

1
2
3
4
5
git clone https://github.com/torproject/tor.git

cd tor

sh autogen.sh && ./configure --disable-asciidoc && make && make install

Tor二进制文件在/src/app/里面。

编译obfs4

go的版本号必须是1.11.0或更高版本

1
2
3
4
5
6
7
git clone https://github.com/Yawning/obfs4.git

cd obfs4

go get -d ...

go build -o obfs4proxy/obfs4proxy ./obfs4proxy

obf4proxy二进制文件在/obfs4/obfs4proxy/里面。

上面apt安装和手工编译二选一,然后,就是编写torrc文件了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#SocksListenAddress 0.0.0.0:9050

#HTTPSProxy 127.0.0.1:8787
#Socks5Proxy 127.0.0.1:1080

UseBridges 1
DataDirectory ./Data
GeoIPFile ./Data/geoip
GeoIPv6File ./Data/geoip6
#Log notice file ./tor.log
AvoidDiskWrites 1

#StrictNodes 1
#ExcludeExitNodes {cn},{hk},{mo},{sg},{th},{pk},{by},{ru},{ir},{vn},{ph},{my},{cu}
#ExcludeNodes {cn},{hk},{mo},{sg},{th},{pk},{by},{ru},{ir},{vn},{ph},{my},{cu}

ClientTransportPlugin obfs4 exec ./obfs4proxy managed
#下面是apt安装路径
#ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy managed

Bridge 66.42.73.78:40367 8975AAF1A5317E04600F30AD3ED43083820FF516

Bridge obfs4 66.42.73.78:41563 8975AAF1A5317E04600F30AD3ED43083820FF516 cert=6LMNcXh6MIfApbZiMksnS4Kj+2sffZ5pybSqtcOO5YoHgfrMpkBJqvLxhuR2Ppau0L2seg iatmode=0

NewCircuitPeriod 900

Linux下新建一个Data文件夹里面放置 geoip geoip6 文件,然后把tor obfs4proxy Datatorrc 放在同一个文件夹下,给文件夹755权限,cd到文件夹,运行下面命令即可:

./tor -f torrc

新建Data文件夹

mkdir -p /Data

下载geoip文件到Data文件夹

wget -P /Data https://raw.githubusercontent.com/torproject/tor/master/src/config/geoip https://raw.githubusercontent.com/torproject/tor/master/src/config/geoip6

文件目录如下:

1
2
3
4
5
6
7
+---Data
| geoip
| geoip6
|
| tor
| obfs4proxy
| torrc

注:Data文件夹以及geoip文件的作用是配合设置网桥出口或者排除节点使用的,如果你没有排除节点的需求,其实是不需要新建这些文件的,tor也能正常运行。

到此,教程也就写的差不多了。最后Tor的端口 Socks5 127.0.0.1:9050 可以配合浏览器插件SwitchyOmega,或者其它方式使用。

下面页面有俺用最新源码编译的Linux_amd64,Tor和obfs4proxy,当然Windows版本也有,里面内置几十个可用网桥,当然你也可以开启前置使用。下载页面:

https://yeahwu.com/cloud/documents/

其它

下面就聊聊关于安全的问题,本教程不为安全负责,只是写出一种轻量便携的方法,其后的浏览器加固,自己可以Google一下。

关于匿名并不是你想象的这么简单,技术方面讲,无非就是前置,网桥,虚拟机,浏览器加固等等,这其中有几项争议比较大:

1:到底是用前置更安全还是使用网桥安全?

2:邪恶国家节点需不需要排除?

3:Tor流量特征是不是很明显?在现有的用户基数下这些特征够不够得上威胁?

以上问题,有些人会说,这些问题太简单了。呵呵,你认为俺会提简单问题?大家可以Google多看看,算是增长一些匿名知识。有些问题的答案并非你想象的那样子,俺这里就不给出答案了,需要你自己去探索。

然后说的是,技术以外的部分,匿名时的环境隔离和互动频率,这其实是很重要的部分,是不是彻底与内网隔离?包括身份,付款方式,行为特征,互动规律等等,这一部分建议大家看看编程随想的博客,他讲的比较详细,俺也就是献献丑。

参考:

Bitcoin:1MQ3DJHnEdkP9scCiA1pGXTe9wyBmDtrvv