Tor路由简单搭建

Tor 洋葱路由是当前最安全最成功的匿名通信技术,通过Tor节点,使得没有人知道你在Tor上干了什么,最大程度上保护个人隐私。

同时,因为此特性的存在,Tor可以作为爬虫的代理服务器来规避反爬措施和提高匿名性。但是Tor无法支撑DDOS攻击,请不要使用Tor进行DDOS。

对Tor的审查

正是因为高度匿名的原因,Tor可绕过政府对网站的审查,访问被防火墙(长城)封锁的网站,所以中国几乎封锁了所有的Tor节点,所以在国内使用Tor,可能需要一些魔法。

Tor浏览器

官方地址:https://www.torproject.org/zh-CN/

Tor浏览器会在运行时在后台启动一个Tor服务,暴露端口一般为9150

网桥获取

在线获取:https://bridges.torproject.org/bridges/?transport=obfs4

使用 Gmail 或 Riseup 的邮箱服务发送电子邮件至 bridges@torproject.org

通过 Telegram 向 @GetBridgesBot 发送消息。在聊天中点击“开始”,或者输入/Start/bridges

使用

打开Tor浏览器网桥连接正常后,即可使用,同时后台Tor服务也可以使用。

Tor路由

安装(Centos 7)

首先 update 一下 yum 源,添加 tor 的 repo

sudo yum install epel-release sudo yum install tor

安装完成以后,启动 tor 服务

sudo systemctl start tor # 启动 tor 服务 
sudo systemctl enable tor # 设置开机自启
sudo systemctl status tor # 查看 tor 运行状态,显示为 active 表示启动成功,服务正在运行

配置 tor 服务 这一步网上的教程里面一般讲的不是很详细,中间遇到的坑会比较多。

先测试一下是否可以连接 tor 代理服务

sudo yum install nc echo -e 'AUTHENTICATE' | nc 127.0.0.1 9051

不出意外,输出应该是 Connection refused

这里使用的 netcat 用来测试 tor 代理端口的连接情况,具体关于 netcat 的介绍,可以 google 一下

要解决上面的问题,我们需要先配置一下 tor 服务的 ControlPort

bash复制代码echo "ControlPort 9051" >> /etc/tor/torrc 
# 这里的端口可以自定义,设置完成后记得打开防火墙打开该端口的监听

Tor 的配置文件目录为 etc/tor/torrc,可以使用 vim 在配置文件末尾添加或者只用命令写入文件末尾(vim 修改避免命令不熟悉出错)。重启 tor 服务

bash
复制代码sudo systemctl restart tor

再用 netcat 测试一遍

bash复制代码echo -e "AUTHENTICATE" | nc 127.0.0.1 9051 
# 输出 515 Authentication failed: Wrong length on authentication cookie.

网上很多教程在设置完 ControlPort 这一步就停止了,其实这里还有一个坑,就是我们要设置一个 HashedControlPortPassword,即端口密码。这个密码是 tor 通过 hash 生成的密码。生成方式非常简单,使用 tor 来生成即可:

bash复制代码echo HashedControlPassword $(tor --hash-password "my password" | tail -n 1) >> /etc/tor/torrc 
# 使用 tor --hash-password + 你设置的密码生成 hash 密码,然后追加写入到配置文件的最后一行

这里建议命令使用不熟悉的还是用 vim 的方式手动写入,免得少打一个 “>” 符号,把文件覆盖掉了。

查看一下写入情况:

bash复制代码tail -n -2 /etc/tor/torrc 
# ControlPort 9051
# HashedControlPassword 16:........
# 看到上面那两行,即表示写入成功,我们重启 tor 服务 systemctl restart tor

再次使用 netcat 测试一下:

bash复制代码echo -e 'AUTHENTICATE "my password"' | nc 127.0.0.1 9051 
# 250 OK

至此,配置已经大功告成。

测试 tor 服务的使用

测试一下服务器的公网IP和使用 tor 代理访问的 IP,看看 tor 服务是否生效

bash复制代码curl http://icanhazip.com 
# 你的公网 IP
torify curl http://icanhazip.com
# tor 代理访问的 IP

切换 IP 测试:这里有两种方式,第一种是通过命令行进行切换:

bash复制代码echo -e 'AUTHENTICATE "my password"\r\nsignal NEWNYM\r\nQUIT' | nc 127.0.0.1 9051 
# 第一段 echo -e 'AUTHENTICATE "my password"' 为测试服务连通性
# signal NEWNYM 命令表示 切换IP
# QUIT 命令表示 断开连接

再运行一次上面的命令看下IP有没有成功切换

bash复制代码torify curl http://icanhazip.com 
# 如无意外,这次输出的 IP 应该是成功切换后的 IP

使用 python 脚本来进行切换

bash复制代码pip3 install stem python3 
# 运行 python shell,如未安装 python 请先安装
>>> from stem import Signal
>>> from stem.control import Controller
>>> with Controller.from_port(port=9051) as controller:
controller.authenticate()
controller.signal(Signal.NEWNYM)
>>>

通过 stem 库,可以使用 python 与 tor 服务进行交互,有关 stem 的使用,可以查看一下文档

至此, tor 代理配置全部完成。

指定特定的地区 IP

/etc/tor/torrc 文件中 添加以下语句

bash复制代码ExcludeNodes {cn},{hk},{mo},{kp},{ir},{sy},{pk},{cu},{vn} # 表示排除这些国家/地区的节点 
StrictNodes 1 # 表示强制执行

安装过程参考:https://juejin.cn/post/7115303144028340255

Python使用Tor服务

from stem import Signal, SocketError
from stem.control import Controller

proxies = {
'http': 'socks5://127.0.0.1:9150',
'https': 'socks5://127.0.0.1:9150'
}

def switch_proxy():
"""
切换 Tor 代理地址
:return: NULL
"""
try:
with Controller.from_port() as controller:
controller.authenticate()
controller.signal(Signal.NEWNYM)
except SocketError:
raise SocketError("请先运行Tor服务")
except requests.exceptions.InvalidSchema:
raise requests.exceptions.InvalidSchema("请先安装socks,使用'pip install requests[socks]'")

# 指定端口 密码
# with Controller.from_port(port=9051) as controller:
# controller.authenticate(password="password")
# controller.signal(Signal.NEWNYM)

关于滥用

个人比较认同Tor浏览器官方解答中的一句话

重要的是要理解,犯罪意图在于个人,而不在于他们使用的工具。 就像其他广泛使用的技术一样,Tor 可能被有犯罪意图的个人使用。 而且由于他们可以使用其他选择,将 Tor 从世界上移除似乎不太可能阻止他们从事犯罪活动。 同时,Tor 和其他隐私措施可以打击身份盗用、跟踪等人身犯罪,并可供执法部门用来调查犯罪并帮助支持幸存者。

关于Tor浏览器的常见问题:https://support.torproject.org/zh-CN/abuse/