暗网架站教程

以.onion结尾的网站就是Tor暗网网站,比如,terminusnemheqvy.onion。暗网网站只能用Tor访问。

暗网受到广大政治活动人士的喜爱。比起把网站开到明网,暗网架站有很多好处,包括:

  1. 匿名服务器:在明网上,服务器隐匿身份的难度远远大于客户端,客户端可以用代理隐匿IP。而服务器的IP必须暴露在公网上,否则别人无法访问。

    CDN(内容分发网络)可以帮助服务器隐匿IP,然而CDN会记录流量日志,也不保证服务器的完全匿名。某些情况下,CDN仍然会根据当地法律提供服务器资料,高危网站自然不能完全信任CDN。

    在暗网上,服务器受到Tor三重代理的保护,就像用Tor浏览器上网一样安全。不仅服务器被Tor保护,网站的访客也受到Tor三重代理的保护。换句话说,任何访客和网站之间都有6个Tor节点,其中3个保护服务器,3个保护访客,双方都可以高强度隐匿身份。

  2. 不需要购买域名:付款信息会暴露网站所有者的身份,从付款记录追查线索是各国执法部门的拿手好戏。暗网网站不需要购买域名,形如ur7yf23r6espa33w.onion的「域名」是Tor自动生成的。

  3. 不需要公网IP:家用宽带一般没有公网IP,因此无法在家里的电脑上架设明网网站。不过,暗网架站不需要公网IP,因此可以把网站开在家里的电脑上,不用购买服务器(也避免付款泄露个人信息)。不仅如此,由于自己掌握服务器硬件,还可以用多种方法增强安全,例如全盘加密,虚拟机隔离等等。

  4. 端到端加密:暗网不需要HTTPS证书,免去了签发证书的身份风险。暗网网址本身就是网站的「身份公钥」,身份认证和后续加密依靠这个公钥完成。只要你输对了网址,从Tor浏览器到Tor网站就是端到端加密的,任何一个中间节点都无法看到传送的内容。

本文介绍暗网的工作原理,暗网建站方法,和暗网文件分享工具Onion Share的用法。

I. 暗网怎样工作

本质上,暗网通信解决三个问题:

  • 保证服务器身份的隐匿。服务器和访客之间,至少有3个服务器亲自选出的Tor节点。(只有自己选出的节点才能保证安全)

  • 保证访客身份的隐匿。访客和服务器之间,至少有3个访客亲自选出的Tor节点。

  • 保证服务器身份的真实。当访客输入要访问的地址,Tor网络可以确保访问了真实的暗网主机。

Tor网站第一次运行会生成一对公钥和私钥,公钥就是网站的“网址”,可以从其它渠道发布。私钥需要保管好,别人访问网站的时候,私钥用来证明网站确实是域名(公钥)对应的身份。

假设Alice和Bob都是匿名网友,Alice运营了一个暗网网站,Bob是访客,知道Alice网站的网址(公钥)。

现在Bob要访问Alice的网站。Alice和Bob要解决的问题是:

  • Bob要选出三个Tor代理节点。(保证访客隐匿)
  • Bob要在暗网中找到Alice。这并不容易,因为暗网服务器的IP是隐匿的,所以必须有其它方法让访客找到服务器。
  • Bob要验证Alice的身份。(保证服务器身份真实)
  • Alice得知有人要来访问她的网站,这时Alice也要选出三个Tor代理节点,与Bob“接头”。(保证服务器隐匿)

建立连接的过程如下:

  1. 在建站之初,Alice连接到Tor网络,在网络中选出若干个节点,称为引入点。引入点可以帮助暗网上的其它计算机找到服务器。由于Alice通过3重代理连接到这些引入点,因此每个引入点并不知道Alice的真实IP地址。

  2. 引入点是一个Tor节点,每个Tor节点都有一个独一无二的身份标识。Alice拿到引入点的身份标识,用自己的私钥签名,得到一个文件,也叫做“描述符”。

    “描述符”类似于这样:

    ----- Alice的描述符 -----
    引入点1:FF1CCF57E98C817DF1EFCD9FE44A8AEB
    引入点2:C68C559D956D4CA20F435ED74A6E71E6
    ...
    引入点N:A8803C74A8F7CC4722EB88C5F69772C8
    
    ----- Alice的签名 -----
    Z6fihKxlkbmfkzDheYEDu3YsJS/z1yvvrMLrSBHoQXD5fkC5UW4x2/Km82oySaem
    FDFVKmqOVWWrvzFqwqaLUARawzMJmnvm2HBk+wIsmktveobJTC2Xqzus9/lLvfWh
    5KN4L8D3b/H5lrwK9aaZW9rGneA5oG3l9t4=
    ----- Alice的描述符结束 -----
    

    然后,Alice把“描述符”发布到整个Tor网络上,这是通过分布式散列表实现的。

  3. Alice与这些引入点建立长期通信链路。如果有人想要联系Alice,那么只要联系这些引入点就可以了。当然,以上的全过程会经过三重代理,不会泄露Alice的真实IP。

    Alice选出引入点

    图:Alice选出引入点,并建立长期通信

    (图中的绿线和蓝线均表示通过三重代理连接)

  4. 现在Bob要访问Alice的网站。Bob用Alice的网址(公钥),在整个Tor网络的分布式散列表上查找Alice的描述符。这个过程会通过三重代理。

    Bob找到Alice的描述符后,验证描述符的真实性。因为描述符是用Alice的私钥签名的,所以Bob可以用Alice网站的网址(也就是公钥)验证描述符的真实性。这一步保证了Alice和Bob之间端到端的验证

  5. 接下来Bob通过二重代理,在Tor网络中选出若干个会合点。Bob在每个会合点留下口信。“口信”是一串随机数。

    Bob选择会合点

    图:Bob选择会合点

  6. Bob根据描述符里的信息,通过三重代理连接到Alice的引入点。

    Bob连接到引入点

    图:Bob连接到引入点,通过引入点告诉Alice会合点的位置

  7. Bob把会合点的位置和口信用Alice的公钥加密,再发给引入点,引入点再把这些消息转发给Alice。

  8. Alice用私钥解密Bob的消息,通过三重代理连接到Bob的会合点,并且把自己拿到的口信和会合点的口信相比对。如果口信一致,就说明Alice和Bob之间的连接建立成功了。

    Bob和Alice建立连接

    图:Alice连接到Bob的会合点,两人建立连接。注意引入点不参与连接

现在Alice和Bob之间一共有6个Tor节点,其中3个由运营网站的Alice选出,另外3个由访问者Bob选出,会合点也作为Bob选出的3个节点之一转发流量。

  • Alice运营暗网服务器。她的所有连接步骤(选出引入点,发布描述符,连接到Bob的会合点)都经过了三重代理,这保证了【服务器身份的隐匿】。

  • Bob是客户端,他的连接步骤(查询描述符,连接引入点,选出会合点),亦经过了三重代理,这保证了【客户端身份的隐匿】。

  • Alice的描述符经过Alice签名,无法篡改;Bob的口信经过Alice的公钥加密,引入点无法得知其中内容,这保证了【身份的真实性】。

II. 暗网架站

1. 安装Tor

主流的Linux和BSD发行版都收录了Tor。以Debian为例,一行命令安装:

apt install tor

安装之后,Tor的配置文件在/etc/tor/torrc。输入

systemctl enable tor --now

可以让Tor在开机后自动在后台运行。

2. 修改配置文件

Tor既可以做客户端,也可以做中继,又可以做服务器。如果Tor作为服务器运行,那么这个Tor就是洋葱服务(Onion Service).

默认情况下Tor作为客户端运行,修改配置文件可以启用Tor的不同功能。只要在配置文件里添加以下两行,即可让Tor作为洋葱服务运行:

HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 127.0.0.1:8964

解释一下这两行的作用:

  • HiddenServiceDir: 这里指定一个目录位置,用来保存洋葱服务的私钥域名。洋葱服务的私钥文件叫做private_key,域名文件叫做hostname。

    私钥对洋葱服务十分重要,掌握了私钥,就掌握了私钥对应onion地址的控制权。(和比特币的私钥一样)

    明网网站的域名控制权由域名商掌握。登录域名商的账户,就可以变更域名所有权。暗网域名的控制权由掌握了私钥的人所有。如果私钥泄露,那么任何人都可以用这个onion地址架设网站。

    在【暗网怎样工作】一节提过,洋葱服务会选择一些节点,叫做“引入点”,引入点会告诉客户端怎样连接到洋葱服务。洋葱服务把引入点的身份ID打包成文件(“描述符”),并用自己的私钥签名。如果私钥泄露,别人就可以伪造描述符,进而仿冒网址对应的主机。

    域名本质上就是私钥对应的公钥,需要公开发布,其它人可以用域名(公钥)访问洋葱服务。

    电脑上的Tor作为洋葱服务运行时,它会检查HiddenServiceDir指定的目录下是否有private_key文件和hostname文件,如果没有,Tor会自己生成这两个文件。private_key是前面提到的私钥,请务必保存好。hostname是私钥对应的公钥(域名),可以公开发布。

  • HiddenServicePort:洋葱服务可以看作是传统的网络服务前面加了一个Tor(反向)代理,这一项告诉Tor把接收来的流量转发到哪里。

    HiddenServicePort PortA AddressB表示打开虚拟端口PortA,并把PortA的流量转发到AddressB

    例如HiddenServicePort 80 127.0.0.1:8964

    • 第一项80,表示洋葱服务打开虚拟端口80,对公网提供网页服务。别人用浏览器访问,看到的对外端口是80.
    • 第二项127.0.0.1:8964,是Tor要反向代理的服务地址。Web服务开在本机的8964端口上,这里就填写127.0.0.1:8964,Tor会转发这个地址的流量。

    可以看到,Tor不仅能架设暗网网站,还可以在暗网开设其它网络服务,例如25端口(暗网邮件),194端口(暗网IRC聊天)等等。HiddenServicePort可以同时写多个,比如:

     HiddenServicePort 80 127.0.0.1:996
     HiddenServicePort 25 127.0.0.1:251
    

    表示同时开启暗网网站和暗网邮件服务。

贴一个简单的torrc配置:

HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 127.0.0.1:8964

Socks5Proxy 127.0.0.1:10086  # 使用前置代理
SocksPort 0                  # 不打开socks端口,减小攻击面
# SOCKSPolicy accept 127.0.0.1

HiddenServiceVersion 3       # 第三代洋葱地址

# 可以增加首次连接的速度
HiddenServiceMaxStreams 10
HiddenServiceMaxStreamsCloseCircuit 1
HiddenServiceNumIntroductionPoints 10

这里还有几个比较重要的配置项,说明一下:

  • Socks5Proxy: 这一项可以给Tor配置前置代理,俗称“VPN+Tor”。例如127.0.0.1:10086

  • SocksPort: 这一项是Tor为其它应用打开的socks端口,默认9050。0表示不打开socks端口。

  • SOCKSPolicy: 这一项控制哪些网段的电脑可以连接Tor,例如accept 192.168.1.0/24表示允许局域网内的电脑连接,这个选项在双虚拟机隔离时特别有用,平时谨慎使用。默认为accept 127.0.0.1(只有本地应用可以连接)。

  • HiddenServiceVersion: 洋葱服务的版本号,可以取2或3。比较短的.onion是第二代洋葱地址。比较长的.onion是第三代洋葱地址。第三代地址加密强度更高,并且支持客户端认证。

Tor配置文件的完整说明见这里:

https://2019.www.torproject.org/docs/tor-manual.html.en

有了配置文件后,就可以让Tor作为服务器运行了,操作步骤如下:

  1. 安装Tor(√)
  2. 新建一个目录hidden_service: mkdir -p /var/lib/tor/hidden_service
  3. 把上述配置文件粘贴到/etc/tor/torrc里面。
  4. 重启tor,让配置文件生效:systemctl restart tor
  5. 这时/var/lib/tor/hidden_service里会多出两个文件,hostnameprivate_key.

输入 cat /var/lib/tor/hidden_service/hostname可以看到Tor自动生成的域名。这说明洋葱服务运行成功了。

3. 配置网页服务器

到这一步暗网的部分完成了,接下来的操作和明网建站没有区别。需要做的,就是运行一个Web服务软件(比如Nginx,Caddy等),接收Tor转发来的流量。

例如,上面的配置里,HiddenServicePort的转发目的地是127.0.0.1:8964,这表示在本机的8964端口上打开一个HTTP服务。Web服务软件选用Nginx,配置如下:

server {
    listen 127.0.0.1:8964;  # 这里非常重要,必须让Nginx监听本地,否则会导致公网IP暴露
    server_name ur7yf23r6espa33w.onion;
    server_tokens off;
    autoindex off;
    charset utf-8;
    gzip on;
    root /var/www;
    location / {
        index index.html;
    }
}

明网建站的更多细节就不再赘述了。明网建站的教程,可以参考其它文章,比如我教大家做网站系列。

4. 一些安全建议

因为暗网架站要隐匿身份,所以Web服务的全部流量都应该通过Tor。

然而,如果Web服务器配置错误(这很常见)或者出现漏洞,就会使得Web服务绕过Tor,直连公网。Web服务直连公网会导致你的IP暴露,如下:

公网直连导致服务器暴露

图:公网直连导致服务器暴露

例如上面的Nginx配置,第二行如果不是listen 127.0.0.1:8964而写成listen 8964,会让Nginx在全网监听。如果有人恶意扫描,就会发现暗网网站的真实IP。

比起浏览器,Web服务软件的风险要高得多,除了暴露IP之外还有其它问题。例如,服务端未设置正确的读写权限,Web服务软件甚至可以随意访问本机文件。如果没有做好身份隔离,也会导致隐私泄露。

Web服务服务器长时间在线更是增加了被攻击的风险。因此,Web服务所在的机器,应当被视为不可靠的环境。如果说,高风险上网建议双虚拟机隔离,那么暗网架站必须使用双虚拟机隔离。

双虚拟机隔离有以下要点:

  • 双虚拟机用“host-only”或“internal”模式连接,即使Web服务被攻陷,破坏也无法传出虚拟机。

  • 设置快照并定期回退(当然要备份Web数据),可以确保对病毒、木马、黑客的长期渗透完全免疫。

关于双虚拟机隔离的更多资料,可以参考编程随想的文章,此处不再重复。

https://program-think.blogspot.com/2013/01/howto-cover-your-tracks-6.html

https://program-think.blogspot.com/2013/01/howto-cover-your-tracks-7.html

https://program-think.blogspot.com/2015/04/howto-cover-your-tracks-8.html

顺便说一句,如果你有性能比较高的路由器,可以把Tor安装到路由器里,一切对外流量必须经过路由器。这种隔离是物理隔离,安全性高于双虚拟机隔离。

III. Onion Share

直接使用「裸Tor」架站,比较复杂,容易出安全问题。如果只是通过暗网分享文件,或者展示一些静态网页,可以使用Onion Share,非常简单而且安全。下载地址:

https://onionshare.org/

Onion Share把前面的步骤都打包到了一个软件里。不过出于安全考虑,Onion Share只支持分享文件、接收文件、发布静态网站。如果要做复杂的动态网站(比如论坛),那么还是需要用上面的方法建站。

Onion Share的主界面如图,把文件拖进窗口就可以在暗网上共享,非常简单:

Onion Share主界面

图:Onion Share主界面

文件拖进窗口之后,Onion Share会自动生成一个暗网网址,其他人可以用Tor浏览器下载分享的文件,如果分享的文件是网页,就可以直接浏览。

Onion Share有一些配置要注意:

Onion Share设置界面

图:Onion Share设置界面

  1. 连接到Tor网络:Onion Share不支持「VPN + Tor」的配置模式,无法配置前置代理。但是,Onion Share可以用Tor浏览器的内置Tor连接到Tor网络。如果Tor浏览器配置了前置代理,那么Onion Share也就配置了前置代理。

    在Onion Share连接时点【Quit】可以进入设置界面,选择【Attempt auto configuration with Tor Browser】可以用Tor浏览器的内置Tor联网。

  2. 私密分享·公开分享·长期分享:默认情况下,Onion Share分享文件生成的地址是一次性的,而且只能给一个人使用,即私密分享。如果要公开分享文件,需要选择【Public mode】。

    【Public mode】下,分享文件地址仍然是一次性的,如果要长期保留这个地址(比如展示网页),就要选择【Use a persistent address】。注意此时仍然要保护好私钥,私钥保存至Onion Share的配置文件里。

这样就可以用Onion Share共享文件或者网页了。


本文介绍Tor做服务器的用法。前面说过,Tor有三种运行模式:客户端、服务器、中继,如果对搭建中继感兴趣,可以参考Tor官网的教程:

https://community.torproject.org/relay/.

( 由 作者 于 2020年11月7日 编辑 )
17
2020年11月3日 974 次浏览
10 个评论
习猪习 抵抗者运动

請問這些圖片是如何製作的?

忙碌中

@习猪习 #111203 ppt 😂

消极 (男)消极自由需要积极的个人主义来维护

暗网服务器门槛低,但是你要维护这样一台服务器安全就不容易了,何况和你一起玩暗网的个个藏龙卧虎,不要搞个低级bug被人用脚本弄穿了贻笑大方。

白脸角鸮 加帕里公园原政府前总理,加帕里图书馆馆长

@沉默的广场 #111210 我还以为用了专门的网络拓扑绘图工具,比如说Microsoft Visio,看来用libreOffice此类Office软件就能绘制这类图片。

@消极 #111212 新手的话确实不建议随便搭建Tor服务器,毕竟使用Tor在很多国家的政府执法部门看来是一件很可疑的事情(包括许多民主国家也是这样的),因此Tor站点很容易遭到受政府支持的攻击者攻击,这些攻击者的威力很大程度上都不是一般技术爱好者所能够防范的,更何况暗网上还有如此之多的好事者与所谓的“脚本小子”

@白脸角鸮 #111461 不过如果你双虚拟机,攻破了也只是获得了一个毫无价值的虚拟机控制权限。

@消极 #111530 那倒也是,毕竟虚拟机穿透的概率极小,除非真的遇到0day漏洞且正好和你使用的虚拟化技术相同的情况下物理服务器才会被波及到,大部分情况下在虚拟服务器遭遇攻击时,架设在对应的物理服务器上的其他虚拟服务器基本上都岿然不动,物理服务器的防火墙隔离做好基本上就没事了。

管道拓展

想问下,移动端用机场结点直接用tor访问本站(公网),是否会有安全风险?

thphd 2047站长

@我的随想 #116119

看不大懂 但感觉很牛

派乐迪
愛牛奶盒的人 你們可不能混瑤哦~

@莫飞 #117024

你呀,還要學習一個,提高一下自己的姿勢水平

欲参与讨论,请 登录注册

example notif text