原文:https://zhuanlan.zhihu.com/p/34358838

参考:https://wiki.archlinux.org/index.php/Tor_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

官方文档:https://www.torproject.org/docs/tor-manual.html.en


Tor 是一个用来在互联网中实现匿名通信的网络系统。当使用者通过 Tor 客户端(例如 Tor 浏览器)连接到互联网时,加密后的流量会从用户出发,先经过入口节点(guard relay)进入 Tor 网路,随后发送到中继节点(middle relay),最后从出口节点(exit relay)发送明文到达访问目标,这种多级中转的方式使 ISP 和网站对用户的跟踪变得几近不可能。

Tor 的节点由志愿者维护,节点越多,Tor 网络的性能、冗余性和安全性就越好。

一、准备工作

如果你准备搭建非出口节点(non-exit relay),即入口节点(guard relay)和中继节点(middle relay),那么你需要准备:

  1. 一台具有至少 512MB 内存的服务器,基本当下仍然堪用的 PC 都可以达到要求,推荐使用 VPS 或主机托管;
  2. 稳定的 Internet 接入,至少具备 10Mbps 网络带宽,以及一个至少可保持数小时不变的公共 IPv4 地址(建议使用固定 IP 地址),此外,如果 ISP 提供了 IPv6 地址,别忘了在配置时加上它,Tor 非常需要 IPv6 节点(目前暂不支持纯 IPv6);
  3. 每天至少2小时的运行时间,推荐24小时运行;
  4. 初级的系统维护与文本编辑器(如 vi)使用技巧

如果你打算架设出口节点,那么情况就变得复杂多了,因为出口节点需要对来自 Tor 用户的流量负责(服务端会认为是出口节点 IP 的使用者在访问自己)。由于 Tor 的高匿名性,通过 Tor 发起的盗版 P2P 下载、网络攻击、spam 数量非常之多,你无法完全阻止它们通过你的出口节点。因此,架设出口节点有一些额外要求:

  1. 一台专用于出口节点的服务器、VPS或云主机,其上不应运行其它网络服务;
  2. ISP 必须允许架设出口节点(点此可查看各 VPS 及主机托管服务商对 Tor 的态度),一般为数据中心、大学、非营利机构,千万不要在自己家或公司中架设出口节点;
  3. 一个专用于出口节点的固定公共 IPv4 地址,其上不应运行其它网络服务(同样,如果 ISP 提供了 IPv6 地址,别忘了在配置时加上它);
  4. (可选)ISP 可以提供定制的 WHOIS 和 rDNS 信息,用来规避一些麻烦;
  5. 献出一些精力来处理 abuse 来信,如 DMCA 投诉等,否则可能被 ISP 关停服务或面临法律问题。

大多数 Tor 节点基于 Linux(主要是 Debian)操作系统,但 Tor Project 提倡多元化,因此也欢迎使用 BSD 系操作系统搭建 Tor。

二、安装

此处以 Debian 为例,其它操作系统下的配置方法请参考这里

在终端中执行以下命令安装 Tor 服务端(需要 sudo 或在 root 用户下操作,下同):

apt update && apt install tor 

三、配置

Tor 的配置文件名为「torrc」,位于 /etc/tor,使用文本编辑器打开它:

vi /etc/tor/torrc 

可以发现,该文件中已经存在了大量被注释掉(文本前有「#」)的内容,可以将需要的参数取消注释使其生效,或在文件末尾自行撰写所需参数。

一个典型的配置文件须具备下列基本参数:

Nickname name   #节点的昵称(限用字母和数字)
ORPort 9001   #节点服务侦听端口(小于65535的数字,默认为9001,请确保端口空闲,并配置好防火墙及端口映射规则)
ORPort [IPv6-address]:9001   #节点若支持 IPv6 需特意写出地址
ExitRelay 0   #出口节点开关(0为否,1为是)
IPv6Exit 0   #IPv6 出口节点开关(0为否,1为是)
SocksPort 0   #代理服务侦听端口(0为关闭,建议不要改动)
ControlSocket 0   #同上,但使用 Unix 域套接字而非 TCP 端口
ContactInfo name@domain   #管理员的公开联系方式(如邮箱或比特币收款地址等) 

VPS 或租用的服务器常常有流量限制,可以通过控制带宽与 Tor 运行时长的方式,来避免过早用尽流量:

AccountingMax N bytes|KBytes|MBytes|GBytes|TBytes|KBits|MBits|GBits|TBits
# 在一个计时周期内允许的最大流量,只能选用一种单位
AccountingStart day|week|month [day] HH:MM
# 规定一个计时周期为一天、一周亦或一月,以及何时重置
# 当计时周期单位为天时,参数 [day] 应省略
# 当计时周期单位为周时,[day] 应填写 1-7
# 当计时周期单位为月时,[day] 应填写 1-28
# HH:MM 为时间,采用24小时制,时区依主机而定 

请注意,高速而限时运行的节点,在实用性上要强于低速而一直运行的节点。此外,Tor 网络也会自动通过寻路权重(后文会提到)来调整指派给节点的工作量,以适当延长节点的工作时间。

如果这是一个出口节点,建议进行出站规则的配置,这决定了该出口节点可以访问互联网上其它主机的哪些端口。精心配置出站规则,可以避免节点被骇客滥用,如禁止 3389 端口,可避免节点被用来实行远程桌面暴力破解。当然,如果想最大程度地减少 abuse 来信,可以只开放80和443端口,只为 Tor 浏览器用户提供最基本的网页浏览服务。

出站规则配置参数如下(地址和端口都可以使用通配符):

exitpolicy accept *:port   #允许访问某个目标端口
exitpolicy reject *:port   #拒绝访问某个目标端口
exitpolicy accept *:*   #表示全部允许,使用端口黑名单制时需加上
exitpolicy reject *:*   #表示全部拒绝,使用端口白名单制时需加上 

如果不进行出站规则的配置,而只是打开了出口节点开关,则 Tor 会使用如下默认规则:

reject 0.0.0.0/8:*
reject 169.254.0.0/16:*
reject 127.0.0.0/8:*
reject 192.168.0.0/16:*
reject 10.0.0.0/8:*
reject 172.16.0.0/12:*
reject self-ip:*
reject *:25   #自行配置规则时,也请至少要屏蔽25端口,否则会带来很多麻烦
reject *:119
reject *:135-139
reject *:445
reject *:563
reject *:1214
reject *:4661-4666
reject *:6346-6429
reject *:6699
reject *:6881-6999
accept *:* 

编辑完成后,保存并退出文本编辑器,执行以下命令重启 Tor:

systemctl restart tor@default 

四、检查与维护

节点搭建完毕后,可通过「netstat -an」命令来查看自己的节点服务侦听端口是否已经建立了 TCP 连接。另外,建议在 Tor Metrics 中以 IP 地址或昵称作为关键词来搜索自己的节点,查看其运行状态,其中「Fingerprint」为节点的唯一身份标识,「Consensus Weight」为节点的寻路权重(与带宽和运行时长有关,数字越大,越容易被选用)。

如果想更好的实时监视节点的运行状态和系统资源使用情况,建议安装 nyx

apt-get install nyx   #通过 apt 安装
pip install nyx   #如果你使用的分发源暂未提供 nyx,也可以通过 pip 安装 

安装完成后,在 torrc 文件中加入下列参数:

ControlPort 9051   #指定控制端口(默认为9051)
CookieAuthentication 1 

配置完成后,就可以在终端中直接启动 nyx(注意用户权限),连按两次 q 键可以退出。

五、其它

更详细的配置指南和社区资料,可参考:

谢谢阅读。