深夜……搭建 洋葱网站

.onion 是一种域名后缀，专用于 Tor 浏览器。通过此域名能在 Tor 浏览器上访问你的 洋葱网站 ，实质上是 tor 反代了本地的一个 Web 监听的端口。

适用系统：Debian 系发行版，包括 Ubuntu 和 Armbian，其他发行版按流程稍改命令一般也可。

走通预计时间：25 分钟

I might have made some mistakes, please let me know if I’ve gotten anything wrong!

注册 .onion 不需要向域名管理机构和域名注册商购买，而是通过计算生成，只不过是一个随机字符串，目前使用的 v3 域名由 56 个小写字母或 2 到 7 之间的数字组成。如果想得到指定的字符串，需要通过大量计算试出。比如 Facebook 非常漂亮的 .onion v2 域名 – facebookcorewwwi.onion ，要暴力解出这样的结果，密码学上的评估是以 1.5Ghz 处理器要 260 万年。

AhFei 在一台 5950X 单线程的 VDS 上，连续 43 小时算出第一个符合 vfly2com*.onion 规律的域名，具体方法在下面。

洋葱网站的本来目的是保持服务器的匿名性，也就是避免泄露源服务器的信息，比如 IP。这样的特点，既可以被用来保护揭露阴暗的正义之士，但同时，也能被利用去隐藏阴暗的真面目。

悄悄滴进村，打枪滴不要

深夜很有氛围。

如果想尽量保持服务器的匿名性，下面有一些注意事项：

不要在这台服务器上运行任何其他服务。

不要在这台服务器上运行 Tor 中继，因为 Tor 中继的 IP 是公开的。

不要向 VPS 厂商提供关于你的任何身份信息。尽量用加密货币支付。

在服务器上进行全新安装，且不要保留来自 VPS 提供商那儿的任何服务。

确保 Web 软件安全无后门，使用强密码。审查代码，避免软件从任何外部服务拉取资源。

确保洋葱网站不会泄露任何报错信息或身份信息。

及时做好 VPS 的安全更新。

官方提供的安全建议：

Operational Security.

Onion services best practices by Riseup Collective.

OnionScan is a tool to check if your onionsite is leaking information that could compromise your anonymity like your server IP address.

搭建洋葱网站的流程很简单：安装 tor ，运行一个 Web 软件，配置 tor 让它反代 Web 软件。

官方教程： Tor Project | Set up Your Onion Service

安装 Tor

官方教程： Tor Project | How to install Tor

注意： 使用 root 执行命令

Copy
apt update && apt upgrade && apt install apt-transport-https

目前官方的库只支持 amd64、 arm64 和 i386 三种架构的服务器，可以用 dpkg --print-architecture 查看。

创建一个新文件在 /etc/apt/sources.list.d/ ，文件名是 tor.list

Copy
cd /etc/apt/sources.list.d/ && vim tor.list

添加以下内容：

替换 <DISTRIBUTION> 为系统发行版的名字，可以运行 lsb_release -c 或 cat /etc/debian_version 查看当前系统发行版。

Copy
deb [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org <DISTRIBUTION> main
deb-src [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org <DISTRIBUTION> main

比如对于 Debian 11 ，它的代号是 bullseye，就填入下面的。

Copy
deb [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org bullseye main
deb-src [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org bullseye main

如果想尝试实验版，用这种格式 tor-experimental-<DISTRIBUTION> ，又或者是 nightly builds tor-nightly-main-<DISTRIBUTION>

执行下面命令，添加 gpg key ，它为包签名。

Copy
wget -qO- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --dearmor | tee /usr/share/keyrings/tor-archive-keyring.gpg >/dev/null

安装 tor 和 tor debian keyring（作用，to help keep our signing key current）：

Copy
apt update && apt install tor deb.torproject.org-keyring

运行一个 web 服务器

可以是 Nginx，Apache，或者任何其他的。这里用 python3 运行简单的做演示：

Copy
mkdir ~/tor_service && cd ~/tor_service && \
echo ' Vfly2.com! ' > index.html

运行 web 服务器

Copy
python3 -m http.server --bind 127.0.0.1 8080

可以用 curl 检验是否成功运行

Copy
curl 127.0.0.1:8080

用 systemd 在目录 /root/tor_service 持久化运行

添加配置文件

Copy
sudo vim /etc/systemd/system/tor_service.service

无须任何改动，复制即可

Copy
[Unit]
Description=Python HTTP Server
After=network.target

[Service]
Type=simple
WorkingDirectory=/root/tor_service
ExecStart=/usr/bin/python3 -m http.server --bind 127.0.0.1 8080

[Install]
WantedBy=multi-user.target

重新加载

Copy
sudo systemctl daemon-reload

设置开机自启，并立即运行

Copy
sudo systemctl enable --now tor_service

方便读者使用 👇

Copy
sudo systemctl status tor_service

Copy
sudo systemctl stop tor_service

Copy
sudo systemctl start tor_service

配置 Tor Onion Service

Tor 的配置文件名是 torrc， 根据系统的不同，其位置也可能不同，找到它，然后编辑：

Copy
whereis tor
# tor: /usr/bin/tor /usr/sbin/tor /etc/tor /usr/share/tor /usr/share/man/man1/tor.1.gz

Copy
cd /etc/tor && vim torrc

添加下面两行（先自定义）

Copy
HiddenServiceDir /var/lib/tor/my_website/
HiddenServicePort 80 127.0.0.1:80

HiddenServiceDir 。指定存放 “Onion Service 的信息和 cryptographic keys” 的目录。这个目录会在 Tor 运行后自动创建。

HiddenServicePort 。指定两个端口，前一个 80 是在 Tor 网络中网站的端口，后一个 80 是服务器上网站监听的端口。Tor 将 Tor 网络中 80 端口收到的信息都转发到服务器的 80 端口。根据实际运行的 web 服务器修改后一个端口。

比如这样：

Copy
HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 127.0.0.1:8080

保存退出

如果使用 Unix sockets 而不是 TCP socket，能避免泄露本机网络给洋葱服务，会有更好的安全性，如下：

Copy
HiddenServiceDir /var/lib/tor/my-website/
HiddenServicePort 80 unix:/var/run/tor-my-website.sock

不过仅作补充，一般用户也无需考虑。

重启 Tor 并验证它是否工作

Copy
sudo systemctl restart tor

如果成功重启了，那配置文件就没有错误，一般就完成了。

如果失败，可以查看日志查找原因：

Copy
journalctl -f -e -u tor@default

访问你的洋葱网站

到 HiddenServiceDir 目录，找到名为 hostname 的文件，它包含了你的 onion v3 网址。

Copy
cat /var/lib/tor/hidden_service/hostname
# 看着就是一堆随机字符串，另一个是 AhFei 暴力计算的
# bq7yvamkogvqidw6qgeyzo4bnqvxd6ed246evk3rfu6xplzdkwak2aid.onion
# vfly2com5ogzrtpfpnsdfqwt6p2eclebjuxi24ps2jeujnikuypvfeqd.onion

其他文件是 Onion Service keys，保证这些文件的隐秘性是重要又急迫的，务必重视，如果泄露了 keys ，其他人就可以假冒你的 Onion Service。

接下来就可以用 Tor Browser 访问你的洋葱网站了，使用上面的 onion v3 网址来访问： http://vfly2com5ogzrtpfpnsdfqwt6p2eclebjuxi24ps2jeujnikuypvfeqd.onion/ 。

不过这样配置下的网站任何人都可以访问，也就是能直接看到网站内容。如果想增加一个验证，有凭证的人才能连接服务，看这个：Tor Project | Client Authorization ，这才是网络最隐秘的地方。（邮件和微信也是）

暴力计算获取 Onion V3 域名

.onion 的域名生成是私钥 >（rsa）> 公钥 >（sha1）> 杂凑值 >（base32 编码）> 得到最终的 .onion。

一个使用 CPU 计算的工具：Releases · cathugger/mkp224o (github.com)

前置条件

Copy
sudo apt install gcc libc6-dev libsodium-dev make autoconf

编译暴力计算工具

下载项目

Copy
git clone https://github.com/cathugger/mkp224o.git

进入项目目录

Copy
cd mkp224o

生成配置脚本（如果是 git clone 就没有，下载发行的压缩包里就有）

Copy
./autogen.sh

生成 makefile

Copy
./configure # 默认能保证最大的兼容性
# ./configure --enable-amd64-51-30k # 添加合适的参数可以优化，

开始构建

Copy
make

构建完成后，在目录就能看到编译出的 mkp224o 。

后面的参数 --enable-amd64-51-30k 传递给配置脚本可以加快密钥生成速度；不同 CPU 有不同的参数可以优化，运行 ./configure --help 查看​​所有可用选项。具体说明： https://github.com/cathugger/mkp224o/blob/master/OPTIMISATION.txt

--enable-amd64-51-30k 表示启用 amd64-51-30k SUPERCOP ed25519 实现。该实现使用 AMD64 架构，采用了一种特定的优化方法，适用于性能要求较低的环境。--enable-amd64-64-24k 表示启用 amd64-64-24k SUPERCOP ed25519 实现，采用了不同的优化策略，适用于性能要求更高的环境。

使用 mkp224o

开始计算

Copy
./mkp224o -d vkeys vfly2com

vkeys，是保存密钥的目录，

vfly2com，生成的地址，要是 vfly2com 打头，具体规则请看项目主页。

可以用 tmux 或 screen 运行 mkp224o ，这样断线也可以继续跑了。勿用 VPS 长时间跑，100% 占用

如何让 tor 使用生成的密钥？

将密钥文件夹（尽管技术上仅需要 hs_ed25519_secret_key ）复制到某位置：

Copy
sudo cp -r vfly2com...onion /var/lib/tor/vfly2_service
# 在前面，我们的密钥文件夹是 /var/lib/tor/hidden_service/ ，因此选择这里

调整所有权和权限：

Copy
sudo chown -R debian-tor: /var/lib/tor/vfly2_service
sudo chmod -R 700 /var/lib/tor/vfly2_service

然后编辑 torrc 将密钥文件夹改成新的：

Copy
sudo vim /etc/tor/torrc

Copy
HiddenServiceDir /var/lib/tor/vfly2_service
HiddenServicePort 80 127.0.0.1:8080

重新加载后，tor 应该会拾取它。

Copy
sudo systemctl reload tor

Copy
sudo systemctl status tor

此时在 Tor Browser 访问你的新漂亮 .onion 地址看看吧！

原文链接： https://blog.vfly2.com/2023/10/building-an-onion-website/

版权声明：本博客所有文章除特別声明外，均为 AhFei 原创，采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 承飞之咎 (blog.vfly2.com) 。

保持更新 ٩(・̤̀ᵕ・̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰恒益的实用技能，欢迎使用 RSS 订阅，或在支持 ActivityPub 的平台关注 @vfly2blog@blog.vfly2.com 接收新文章的推送，如果能留言互动就更好了。

可在 Telegram 群组 https://t.me/vfly2 交流依文章步骤遇到的问题。