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

适用系统:Debian 系发行版,包括 Ubuntu 和 Armbian,其他发行版按流程稍改命令一般也可。
搭建预计时间:30 分钟


6538678405b0b.webp

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

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


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

  • 不要在这台服务器上运行任何其他服务。
  • 不要在这台服务器上运行 Tor 中继,因为 Tor 中继的 IP 是公开的。
  • 不要向 VPS 厂商提供关于你的任何身份信息。尽量用加密货币支付。
  • 在服务器上进行全新安装,且不要保留来自 VPS 提供商那儿的任何服务。
  • 确保 Web 软件安全无后门,使用强密码。审查代码,避免软件从任何外部服务拉取资源。
  • 确保洋葱网站不会泄露任何报错信息或身份信息。
  • 及时做好 VPS 的安全更新。

官方提供的安全建议:


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

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

安装 Tor

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

注意: 使用 root 执行命令

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

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

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

1
cd /etc/apt/sources.list.d/ && nano tor.list

添加以下内容:

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

1
2
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,就填入下面的。

1
2
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- ,又或者是 nightly builds tor-nightly-main-

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

1
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):

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

运行一个 web 服务器

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

1
2
mkdir ~/tor_service && cd ~/tor_service && \
echo '<html><body>Vfly2.com!</body></html>' > index.html

运行 web 服务器

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

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

1
curl 127.0.0.1:8080

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

添加配置文件

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

无须任何改动,复制即可

1
2
3
4
5
6
7
8
9
10
11
[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

重新加载

1
sudo systemctl daemon-reload

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

1
sudo systemctl enable --now tor_service
1
2
3
sudo systemctl status tor_service
sudo systemctl stop tor_service
sudo systemctl start tor_service

配置 Tor Onion Service

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

1
2
3
whereis tor
# tor: /usr/bin/tor /usr/sbin/tor /etc/tor /usr/share/tor /usr/share/man/man1/tor.1.gz
cd /etc/tor && nano torrc

添加下面两行(先自定义

1
2
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 服务器修改后一个端口。

比如这样:

1
2
HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 127.0.0.1:8080

保存退出


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

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

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

重启 Tor 并验证它是否工作

1
sudo systemctl restart tor

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

如果失败,可以查看日志查找原因:

1
journalctl -f -e -u tor@default

访问你的洋葱网站

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

1
2
3
4
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)

前置条件

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

编译暴力计算工具

下载项目

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

进入项目目录

1
cd mkp224o

生成配置脚本(如果是 git clone 就没有,下载发行的压缩包里就有)

1
./autogen.sh

生成 makefile

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

开始构建

1
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

开始计算

1
./mkp224o -d vkeys vfly2com
  • vkeys,是保存密钥的目录,
  • vfly2com,生成的地址,要是 vfly2com 打头,具体规则请看项目主页。

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

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

将密钥文件夹(尽管技术上仅需要 hs_ed25519_secret_key )复制到某位置:

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

调整所有权和权限:

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

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

1
2
3
sudo vim /etc/tor/torrc
HiddenServiceDir /var/lib/tor/vfly2_service
HiddenServicePort 80 127.0.0.1:8080

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

1
2
sudo systemctl reload tor
sudo systemctl status tor

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

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