Tor 洋葱服务可以让人们通过 Tor 网络访问你的网站,而双方都无法得知对方的 IP 地址。服务器主动向外连接 Tor,因此完全不需要开放任何入站端口。本指南在 Ubuntu VPS 上搭建一个洋葱服务,并用 Nginx 提供一个小型站点。
洋葱服务能带来什么
- 一个由密钥派生的
.onion地址,因此它可自我验证,不需要证书颁发机构。 - 访问者与你的服务器之间在 Tor 内部实现端到端加密。
- 无需向访问者暴露服务器的公网 IP 地址。
它不会让你网站的内容变得合法,也不会掩盖你在其他地方犯的错误,例如有一个指向同一台机器的明网域名。
第 1 步:安装 Tor 和 Nginx
sudo apt update
sudo apt install -y tor nginx
sudo systemctl enable --now tor
第 2 步:让 Nginx 只绑定到 localhost
Web 服务器不得在公网接口上响应,否则明网 IP 与洋葱站点就会被关联起来。请编辑站点配置,使其监听回环地址。
server {
listen 127.0.0.1:8080;
server_name _;
root /var/www/onion;
index index.html;
server_tokens off;
}
sudo mkdir -p /var/www/onion
echo '<h1>Hello from onion space</h1>' | sudo tee /var/www/onion/index.html
sudo nginx -t && sudo systemctl reload nginx
第 3 步:声明隐藏服务
将以下几行添加到 /etc/tor/torrc:
HiddenServiceDir /var/lib/tor/my_site/
HiddenServiceVersion 3
HiddenServicePort 80 127.0.0.1:8080
sudo systemctl restart tor
sudo cat /var/lib/tor/my_site/hostname
最后一条命令会输出你 56 个字符的 .onion 地址。请在 Tor Browser 中打开它进行测试。请备份文件夹 /var/lib/tor/my_site/:其中的密钥就是你的地址,丢失它就意味着要换一个新地址。
第 4 步:可选的客户端授权
对于私有服务,可以添加一个只有获批访问者持有的密钥。创建文件 /var/lib/tor/my_site/authorized_clients/alice.auth,其中写入一行,格式为 descriptor:x25519:PUBLIC_KEY,然后重新加载 Tor。没有匹配私钥的访问者甚至无法看出该服务是否存在。
第 5 步:堵住常见的泄露点
- 切勿在页面中引用明网的资源、字体或统计分析代码。
- 让错误页面和响应头保持通用,并保留
server_tokens off。 - 保持服务器时钟准确;Tor 需要这一点。
- 除 SSH 外,防火墙拦截一切:
sudo ufw default deny incoming,因为 Tor 不需要入站端口。 - 除非已将二者完全隔离,否则不要在同一主机上运行明网站点。
在发布任何内容之前,请先阅读服务器 OpSec 习惯,并在新服务器上使用加固清单。