【无标题】

私有Tor匿名网络搭建

洋葱头是第二代洋葱路由的一种实现,用户通过它可以在因特网上进行匿名交流。

由于tor在国内是没有节点的,所以想做一些tor的实验,还必须租用国外的服务器。基于此,为了方便读者运行tor网络,解析tor数据包,本专栏基于网上公开资料,使用docker在本地搭建小型tor网络,实现用户的匿名性。

0x01 网络架构

本次网络的搭建,秉持一个观点,以最少的消耗,搭建一个tor网络,所以搭建成功的网络虽然可以传递tor流量,但是并不能保证用户的匿名性。如果读者有更多匿名性的需要,可以通过增加节点数量,来保证匿名性。

网络架构:

  • Client:客户机
  • DA:目录服务器
  • Guard、Middle、Exit:Tor中继或出口节点

这里一共有6个节点,由于我们只是为了保证用户的匿名性,所以web服务,我们就选择百度的门户网站做测试。其他的五个节点,由于DA也可以充当中间的三个节点,所以我们一共搭建4个节点。

0x02 网络搭建

作者的搭建环境是在ubuntu18.04虚拟机上,采用docker搭建。

(一). 安装docker

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

(二). 建立桥接网络

docker network create --driver bridge --subnet 172.10.1.0/16 --gateway 172.10.1.0 tor_net

–driver bridge 表示使用桥接网络

–subnet 172.10.0.0/16 表示子网ip(分配范围172.10.0.1 - 172.10.255.254)

–gateway 172.10.1.0 表示 网关

tor_net 表示网络名

(三). 建立节点模板

由于节点之间的大部分配置是类似的,所以,我们在单独配置某个节点前,优先配置节点模板。

·1. 拉取ubuntu镜像

docker pull ubuntu

  1. 建立容器
  • docker run -itd --name tor_1 --network=tor_net ubuntu /bin/bash

  • -itd 就是-i -t -d

  • -d 参数默认不会进入容器

  • -i: 交互式操作。

  • -t: 终端。

  • –name 名字

  • /bin/bash:放在镜像名后的是命令,/bin/bash表示交互式 Shell。

  1. 编译tor源码

没有选择apt-get直接安装tor的原因是apt-get中的tor是阉割版的,所以对github上的tor源码进行编译。( https://github.com/torproject/tor)

(0) 将 tor-main 拷入 容器

docker exec tor_1 mkdir /etc/tor

docker cp ./tor-main tor_1:/etc/docker

(1) 更新apt

进入容器 docker attach tor_1

修改source list

sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list

sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list

apt clean

apt-get update -y

(2) 安装一些必备的包

这些包,是我在编译tor过程中,缺的包

apt-get install autotools-dev automake autoconf libtool make gcc libevent-dev libssl-dev zlib1g zlib1g-dev

apt-get --no-install-recommends install asciidoc

(#–no-install-recommend附件太多,只装有必要的)

apt-get install docbook-xml docbook-xsl

(3) 初始化 git

在过程中因为报错,好像用到了git管理,所以按照报错需要对git进行初始化

git init

git config --global --add safe.directory /etc/docker/tor-main

git commit -m “first commit”

(4) 编译tor

chmod 777 tor-main -R

cd tor-main

./autogen.sh

./configure

make

make install

4.保留镜像

导出镜像

docker export tor_1 > tor_p.tar

导入镜像

docker import - tor < tor_p.tar

查看镜像

docker imges

创建新容器

docker run -it --name tor_p --network=mynet tor /bin/bash

(四). 配置DA

(中间有段时间忘了整理了,这里和前面可能有些断片,如果有问题可以评论提问)

四五两节主要是torrc文件的配置。

首先生成节点密钥和指纹

sudo -u root mkdir /etc/docker/data

sudo -u root tor --list-fingerprint --orport 5000 --dirserver “DA 172.10.0.1:7000 ffffffffffffffffffffffffffffffffffffffff” --datadirectory /etc/docker/data

首先生成DA密钥和证书

sudo -u root tor-gencert --create-identity-key -m 12 -a 172.10.0.1:7000 \

-i /etc/docker/data/keys/authority_identity_key \

-s /etc/docker/data/keys/authority_signing_key \

-c /etc/docker/data/keys/authority_certificate

torrc 配置如下,需要注意的是DirAuthority中指纹的获取

v3ident 填写生成的DA证书中的指纹

cat authority_certificate | grep fingerprint

最后的节点指纹

cat /etc/docker/data/fingerprint

配置 torrc

NickName DA

Address 172.10.0.1

# LOG 文件

Log notice file /etc/docker/tor_log/notice.log

Log info file /etc/docker/tor_log/info.log

Log debug file /etc/docker/tor_log/debug.log 



## 目录服务器设置 

AuthoritativeDirectory 1

## Tor将生成第3版网络状态

V3AuthoritativeDirectory 1

ContactInfo auth0@test.test

# 存储工作数据

DataDirectory /etc/docker/data



## 关键端口

# 不希望通过SOCKS连接应用程序

SocksPort 0

# OrPort监听Tor连接

OrPort 5000

# DirPort监听目录服务 在此端口上通告目录服务

DirPort 7000

# 调试端口

ControlPort 6666



## 指定自己的目录服务器

# 1 authority_certificate | grep fingerprint

# 2 fingerprint

DirAuthority DA orport=5000 no-v2 v3ident=583A462E5CADC4EC5C3212FDAC8F4A028A8E1584 172.10.0.1:7000 DFDA9F10DD63D43B77DFE7FB896310CAD265318E



## 测试 Tornetwork

TestingTorNetwork 1



TestingV3AuthInitialVotingInterval 300  

TestingV3AuthInitialVoteDelay 20  

TestingV3AuthInitialDistDelay 20

TestingDirAuthVoteGuard *

TestingMinExitFlagThreshold 0



## 这些配置是为了快速上线,避开一些对稳定性的限制

RunAsDaemon 1 #后台运行

AssumeReachable 1

#响应SIGINT信号,立即关闭

ShutdownWaitLength 0

# Tor进程启动前必须可用的最小文件描述符数。

ConnLimit 60



#出口策略 不作为出口 拒绝一切出口流量

ExitPolicy reject *:*



# 安全设置与调试设置

ProtocolWarnings 1

SafeLogging 0

DisableDebuggerAttachment 0

(五). 配置中继节点和客户端

仅需要生成节点密钥和指纹

sudo -u root mkdir /etc/docker/data

sudo -u root tor --list-fingerprint --orport 5000 --dirserver “DA 172.10.0.1:7000 ffffffffffffffffffffffffffffffffffffffff” --datadirectory /etc/docker/data

配置torrc(仅需要修改ip和nickname)

NickName relay*

Address 172.10.0.*



# LOG 文件

Log notice file /etc/docker/tor_log/notice.log

Log info file /etc/docker/tor_log/info.log

Log debug file /etc/docker/tor_log/debug.log 



# 存储工作数据

DataDirectory /etc/docker/data



## 关键端口

# 后续代理访问需要的端口

SocksPort 9050

# OrPort监听Tor连接

OrPort 5000

# 调试端口

ControlPort 6666



## 指定自己的目录服务器

# 1 authority_certificate | grep fingerprint

# 2 fingerprint

DirAuthority DA orport=5000 no-v2 v3ident=583A462E5CADC4EC5C3212FDAC8F4A028A8E1584 172.10.0.1:7000 DFDA9F10DD63D43B77DFE7FB896310CAD265318E



## 测试 Tornetwork

TestingTorNetwork 1



TestingDirAuthVoteExit *

TestingDirAuthVoteHSDir *

TestingDirAuthVoteGuard *

TestingMinExitFlagThreshold 0



## 这些配置是为了快速上线,避开一些对稳定性的限制

RunAsDaemon 1 #后台运行

AssumeReachable 1

#响应SIGINT信号,立即关闭

ShutdownWaitLength 0

# Tor进程启动前必须可用的最小文件描述符数。

ConnLimit 60



#出口策略 可以作为出口

ExitRelay 1

ExitPolicy accept *:*



# 安全设置与调试设置

ProtocolWarnings 1

SafeLogging 0

DisableDebuggerAttachment 0

0x03 测试效果

一共搭建了一个DA容器,三个中间节点容器(其中一个客户端,客户端并没有单独配置)

由于没有搭建匿名服务,所以仅通过代理访问和log文件进行效果验证

(一).代理访问

在这里插入图片描述

(二).wireshark抓包
在这里插入图片描述

这一部分只能知道他们在交换数据,由于内容加密,而且对tor的原理已经忘记的差不多了,所以没有分析,后续有时间,可以结合源码和tor的设计原理对包进行解读

(三).nyx 查看后台

1.客户端
在这里插入图片描述

2.DA
在这里插入图片描述

3.中继节点
在这里插入图片描述

其实这里,我在中继节点和客户端配置是一样的,并且当网络足够大的情况下,某一个节点,某一个节点可能随时既充当中继节点,也充当客户端。

(四).客户端log文件

查看info.log

可以看到客户端,可以看到中继节点的选择

在这里插入图片描述

0x04 参考资料

1.搭建私有Tor网络 | 没名字的博客 (zhuyuezy.github.io)

2.Ubuntu Docker 安装 | 菜鸟教程 (runoob.com)

3.Anonymous Routing of Network Traffic Using Tor (poly.edu)

4.tor(1): second-generation onion router - Linux man page (die.net)

5.在PC以及路由器上的Tor组网搭建过程 (lessismore.cool)

6.使用docker搭建Tor测试网络(靶场) (ngui.cc)

等等

0x05 写在最后

如果有错误的地方,请读者在评论区反馈我,我会立刻改正,大家一起进步。

最近的学习生活感觉很凌乱,学了一些东西,但积累文字输出很不到位,感觉有些图快了,上个学期搭建好的环境,这个学期才写文档,所以中间可能会断片,评论区出现问题,我看到会尽快回复。

而且发现自己在组会讲论文的时候,论文的选取和拆分讲解很不到位,重点突出不当,想的以后还是要多总结,写点东西,用朴素凝练的语言,讲易懂的话。

下一阶段,多读点论文,复现些代码和深度学习的项目,思考一下自己到底想解决什么问题。

虽然很菜,不过,我的求学之路才刚刚开始,加油! 作者:ONINE林初九 https://www.bilibili.com/read/cv21769062 出处:bilibili

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值