前言

做这个的契机是这学期课程里面多次提到了Tor浏览器,以及深网、暗网有关概念,其实很早以前就想着去摸索一下相关内容,索性就靠着这次课程的机会,了解一下相关内容,顺便完成实验作业。

不过在完成的过程中倒是碰到了一些问题,其实这个隐藏服务的搭建比一般的网页搭建还要简单,但是国内审查的原因,我卡在最后连接服务器的阶段,一直显示”服务器可能离线”,国内的话也没有任何一篇文章提供解决方案,国外的似乎就没有人碰到这个问题,我就像无头苍蝇一样乱试了几天,了解完原理之后,猜测问题出在中继服务器到我部署的隐藏服务的服务器这一步,我虽然可以通过网桥等手段走出去,但是中继服务器能否进到国内,这步是不可靠的,于是想到的最简单的解决方案就是租一个Tor服务被允许的地方的服务器,最后也是搞到了美国洛杉矶的一台服务器,果然照着之前的实验过程,十几分钟就成功了。

所以这篇文章的主要内容是在本地的虚拟机搭建隐藏服务以及部分Vmware虚拟机网络设置有关的问题
但是因为我Linux水平有限,在搭建的过程中有看到“不建议以root目录执行……”等字眼,但是我并没有深究,如果有这方面的修改建议请告知我

搭建流程

常用指令汇总

因为整个搭建过程可能会碰到各种问题,可能需要反复重试,所以先把所有后续常用的指令都放在这里,方便重试时可以快速定位

1
2
3
4
5
6
/usr/local/nginx/sbin/nginx                               # 启动Nginx服务
tor -f /root/torrc # 启动tor服务
cat /root/tor_exam/tor_files/hs/hidden_service_0/hostname # 查看隐藏服务的地址

cd /home/petrichor/下载/torBrowser/tor-browser # 切换到Tor浏览器目录
./start-tor-browser.desktop # 启动Tor浏览器

安装tor和nginx

  1. 我们需要在Linux系统中去实现隐藏服务搭建,所以可以考虑使用Vmware虚拟机,这里使用的是Ubuntu系统
  2. 在终端输入apt-get install tor下载tor服务,会提示需要管理员权限,如图操作即可
    第一张
  3. 安装Nginx的流程是根据此链接,不过那篇文章的Linux系统的发行版本不同,我使用的是Ubuntu,所以需要修改一下代码,如果也用Ubuntu直接照着以下子步骤执行代码。先是安装nginx依赖的文件
    1. apt update更新软件包列表
    2. apt -y install gcc g++安装GCC编译器环境
    3. apt -y install libpcre3 libpcre3-dev
    4. apt -y install zlib1g zlib1g-dev
    5. apt -y install openssl libssl-dev
  4. 现在要下载Nginx源码包,先专门创建一个目录用于存放源码,方便管理
    1. mkdir /usr/local/src/nginx创建文件夹
    2. cd /usr/local/src/nginxcd跳转到对应目录
    3. 根据教程下载nginx,wget http://nginx.org/download/nginx-1.28.0.tar.gz
      1. 解压tar -zxvf nginx-1.28.0.tar.gz第二张
  5. 现在开始我们要配置、编译以及安装,先是配置,要进入解压后的目录cd nginx-1.28.0,然后执行下面的命令
1
2
3
4
5
6
cd nginx-1.28.0
./configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module
  1. 执行编译 make
  2. 安装 make install
  3. 到这里我们已经完成配置工作,接下来启动并验证是否成功就好
    1. /usr/local/nginx/sbin/nginx启动。如果之前目录设置的跟我不一样需自行调整,没有任何提示就说明启动成功(maybe)
    2. ps -ef | grep nginx检验一下是否成功启动
      第三张
    3. 接下来我们要在浏览器里看一下,在第二次输入启动代码时看到了是在本地80端口启动的,所以直接输入即可,打开浏览器,输入localhost:80
      第四张

开始配置

  1. 首先先关闭tornginx进程
    1. killall tor
    2. /usr/local/nginx/sbin/nginx -s stop
  2. 接下来我们需要手动创建Tor所需的目录和配置文件
    1. 先创建以下目录方便后面使用
      1. mkdir -p /root/tor_exam/tor_files/tmp
      2. mkdir -p /root/tor_exam/tor_files/data
      3. mkdir -p /root/tor_exam/tor_files/hs/hidden_service_0
  3. 创建并写入Tor配置文件(Torrc)复制下面代码块内的代码即可
1
2
3
4
5
6
7
8
9
cat <<EOF > /root/torrc
RunAsDaemon 1
SafeLogging 0
DataDirectory /root/tor_exam/tor_files/tmp
Log notice file /root/tor_exam/tor_files/data/notice.log
SocksPort 9050
HiddenServiceDir /root/tor_exam/tor_files/hs/hidden_service_0/
HiddenServicePort 80 127.0.0.1:80
EOF
  1. 可以考虑换个index.html,我这里直接不动了,用Nginx默认的欢迎页面
  2. 配置好网页后,最后我们启动Tor和Nginx服务
    1. /usr/local/nginx/sbin/nginx
    2. tor -f /root/torrc,可能系统启动时会自己启动,需要杀掉再重启
  3. 启动Tor之后可以在HiddenServiceDir指定的目录中生成一个叫hostname的文件,里面存放着刚刚启动的网站的.onion域名
  4. 使用cat命令查看域名cat /root/tor_exam/tor_files/hs/hidden_service_0/hostname
    第五张

下载洋葱浏览器并验证

  1. 这里因为一些原因,我虚拟机里面无法访问洋葱浏览器的下载官网,所以我是在windows主机里面下载,然后传到虚拟机里面(关于无法访问的问题,可能是因为我的虚拟机网络连接一开始使用的是NAT模式,后续我搜集资料后得知在桥接模式,网络连接方式等价于主机,可能能恢复对这些网站访问权,尝试之后确实得以解决,但是过程中碰到了一些问题,在最后的碰到的问题及解决方法有详细的流程)
  2. 在传过去之后依次执行下述代码
    1. cd /home/petrichor/下载/torBrowser这个是由压缩包位置确定的,我是放到了这个目录里
    2. tar -xf tor-browser-linux-x86_64-14.5.8.tar.xz解压
    3. cd tor-browser/进入解压后的文件夹内,合并后是cd /home/petrichor/下载/torBrowser/tor-browser/
    4. ./start-tor-browser.desktop启动
    5. 启动之后连接,如果连接失败,手动设置网桥,网桥选择中国大陆再次尝试
      第六张
    6. 第七张

目前国内部署隐藏服务存在的问题

当我配置完上面的几项,在本地部署nginx web服务器,启动tor服务(内容均已根据提供的文档修改,并且nginx有执行reload),依旧显示
第八张

我有排查过是不是所有的xxx.onion网页都无法访问,但是连接官网上提供的用于测试的网页是可以正常登录的,我也随意百度了一些个人搭建的隐藏服务网页,也都可以查看
第九张
第十张

产生此问题的原因和解决方法

因为tor流量这几年管控越来越严,国内无论是IPv4还是IPv6都会被审查然后被屏蔽,所以最优解决方案是在tor服务合法的地区部署服务器,比如美国,欧洲,然后在对应的服务器重新执行上述的基础部分
这一张是在部署在美国洛杉矶的机器中最后得到的隐藏服务地址的截图
zu2py4uqudqwhabuhpljqlmcf5lik6rjj6ftxxc4dkgytydsoeaygeqd.onion
第十一张
这张是在我主机,坐标北京连接成功的截图,因为没有设置任何html文件,默认就是nginx部署成功时显示的默认的页面
第十二张

修改网络连接方式,以及可能碰到的问题

流程

  1. 先关闭所有的虚拟机(注意是关闭不能是挂起
  2. 在Vmware里面执行如图所示的内容
    第十三张
  3. 找到Vmware的安装目录
    第十四张
  4. 以管理员身份打开虚拟网络编辑器
    第十五张
  5. 理论上这里会有VMnet0,但是可能会因为各种原因导致你这里没有,这里提供一种解决方法,点击左下角的还原默认设置
    第十六张
  6. 中途可能会弹出这个提示,在电脑中搜索这个vmnetbridge.dll,建议直接全盘搜索,我这里是使用everything这个软件去搜索的
    第十七张
    第十八张
  7. 将这个文件的路径填写进去,点击确定静静等待,最后就能发现VMnet0出现了
  8. 按照如图所示,选择自己的网卡驱动,这里网卡驱动需要自己去搜索,我是后续自己购买的网卡所以清楚型号,选好之后→应用→确定,然后重启虚拟机就可以连接上网络了
    第十九张