原文发表于https://blog.naba.run/posts/running-tor-proxy-with-docker/

今天我正在测试dns-tor-proxy,它需要一个 SOCKS5 Tor 代理,并意识到我从未在我当前的机器上运行过 Tor 服务。我几乎每天都使用Tor 浏览器来浏览我完全不信任的网站,但不是独立的 Tor 代理。在本文中,我将尝试使用系统包以及在 Docker 容器中进行设置。

什么是 Tor 代理?

Tor 代理是一个 SOCKS5 代理,它通过 Tor 网络路由您的流量。 Tor 网络确保来自网络内部的任何流量在通过出口节点退出之前通过至少 3 个随机中继进行路由。

它可以帮助您匿名化流量、阻止跟踪器并防止监视以及其他好处。如果您想知道谁应该使用 Tor,答案是每个关心自己隐私的人。您可以在此处阅读有关架构的更多信息。

Arch Linux

Tor 在 Arch 软件包存储库中可用,并且可以通过以下方式简单地安装:

# Install Tor
$ sudo pacman -S tor
...
# Start the service
$ sudo systemctl start tor

# Check whether the service is running
$ sudo netstat -tunlp | grep tor
tcp     0   0   127.0.0.1:9050  0.0.0.0:*   LISTEN  3808529/tor

进入全屏模式 退出全屏模式

我们在上面看到安装torpacman也设置了 systemd 服务。跳转到使用代理进行演示。

Debian/Ubuntu

Debian 生态系统中的软件包经常过时。要获得最新版本,几乎总是需要添加第三方软件包存储库。我不会详细介绍如何在该生态系统中安装 Tor,因为有很多 ** 的分发/版本组合。这些步骤在官方 Tor 安装文档中有详细说明。

码头工人

我们将构建一个非常轻量级的 Docker 映像以减少占用空间。

让我们从 Tor 配置开始,

SocksPort 0.0.0.0:9050

进入全屏模式 退出全屏模式

上面应该开始使用默认值。随意将端口更改为您喜欢的任何端口。被监听的地址应该是0.0.0.0,因为我们将从 docker 容器外部访问服务器。

# set alpine as the base image of the Dockerfile
FROM alpine:latest

# update the package repository and install Tor
RUN apk update && apk add tor

# Copy over the torrc created above and set the owner to `tor`
COPY torrc /etc/tor/torrc
RUN chown -R tor /etc/tor

# Set `tor` as the default user during the container runtime
USER tor

# Set `tor` as the entrypoint for the image
ENTRYPOINT ["tor"]

# Set the default container command
# This can be overridden later when running a container
CMD ["-f", "/etc/tor/torrc"]

进入全屏模式 退出全屏模式

现在让我们构建图像。

$ docker build -t palnabarun/tor .
Sending build context to Docker daemon  67.58kB
Step 1/6 : FROM alpine:latest
 ---> a24bb4013296
Step 2/6 : RUN apk update && apk add tor
 ---> Using cache
 ---> a5ea632ba987
Step 3/6 : COPY torrc /etc/tor/torrc
 ---> 5b351b9847bc
Step 4/6 : RUN chown -R tor /etc/tor
 ---> Running in 1f6950f03475
Removing intermediate container 1f6950f03475
 ---> 060ded5c532c
Step 5/6 : USER tor
 ---> Running in aa0553be76dc
Removing intermediate container aa0553be76dc
 ---> d763c1181285
Step 6/6 : ENTRYPOINT ["tor"]
 ---> Running in 97fd7f9ee693
Removing intermediate container 97fd7f9ee693
 ---> 13c889f5b018
Successfully built 13c889f5b018
Successfully tagged palnabarun/tor:latest

进入全屏模式 退出全屏模式

您可能还想知道图像大小是多少?

$ docker image ls | grep palnabarun/tor
palnabarun/tor  latest  13c889f5b018    About a minute ago 21.1MB

进入全屏模式 退出全屏模式

图像只有 21.1MB。使用Alpine Linux作为基础构建 docker 镜像会产生一个非常轻量级的镜像。

让我们运行代理。

$ docker run \
    --rm \
    --detach \
    --name tor \
    --publish 9050:9050 \ # change the port to whatever you put in the torrc
    palnabarun/tor
aef03d84628b

$ docker ps | grep tor
aef03d84628b    palnabarun/tor  "tor"   31 seconds ago  Up 30 seconds   0.0.0.0:9050->9050/tcp  tor

进入全屏模式 退出全屏模式

一段时间后,Tor 代理将成功建立 Tor 电路并准备好使用。

Tor 配置和 Dockerfile 可以在这里找到并且在Docker Hub上有一个可以使用的镜像

使用代理

让我们通过一些简单的curl调用来测试代理是否正常工作。

下面的请求不会通过代理,因此会显示您的 ISP 提供的 IP 地址。

$ curl https://check.torproject.org/api/ip
{"IsTor":false,"IP":"49.30.XX.XX"}

进入全屏模式 退出全屏模式

现在,如果我们在发出请求时指定 Tor 代理,IP 地址将会不同。

$ curl --socks5 127.0.0.1:9050 https://check.torproject.org/api/ip
{"IsTor":true,"IP":"185.220.XXX.XXX"}

进入全屏模式 退出全屏模式

此外,请注意这两种情况下的值IsTor,运行在check.torproject.org的服务知道流量是否通过 Tor 网络路由。

通过转到网络设置并更改为手动代理配置,可以在您的浏览器中使用相同的代理。但是,如果您只想通过 Tor 浏览互联网,我强烈建议您使用Tor 浏览器。

注意:出于隐私原因,IP 地址已部分编辑。


如果您像我一样喜欢阅读 RFC,请查看以下链接

  • 原始 Tor 设计

  • Tor v3 洋葱服务协议

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐