docs-mastodon/content/zh-cn/admin/optional/tor.md

5.7 KiB
Raw Blame History

title description menu
洋葱服务 通过 Tor 洋葱服务提供 Mastodon 服务。
docs
weight parent
20 admin-optional

Mastodon 可以通过 Tor 作为洋葱服务提供服务。这将为你提供一个 *.onion 地址,该地址只能在连接到 Tor 网络时使用。

安装 Tor

首先需要将 Tor 的 Debian 存储库添加到 apt 中。

deb https://deb.torproject.org/torproject.org stretch main
deb-src https://deb.torproject.org/torproject.org stretch main

接下来添加 gpg 密钥。

curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --import
gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -

最后安装所需的软件包。

apt install tor deb.torproject.org-keyring

配置 Tor

编辑 /etc/tor/torrc 文件并添加以下配置。

HiddenServiceDir /var/lib/tor/onion_service/
HiddenServiceVersion 3
HiddenServicePort 80 127.0.0.1:80

重启 Tor。

sudo service tor restart

现在你可以在 /var/lib/tor/hidden_service/hostname 中找到你的 Tor 主机名。

移动你的 Mastodon 配置

我们需要在 Nginx 中配置两次 Mastodon。为了保持"DRY"原则,我们需要将 Mastodon 配置移到自己的文件中,以便之后可以引用。

创建一个新文件 /etc/nginx/snippets/mastodon.conf。复制所有 Mastodon 配置参数,除了 listenserver_nameinclude 指令以及所有 SSL 选项。包含一个 Onion-Location 头,让支持的浏览器知道该服务也可以通过 Tor 访问。你的新文件应该看起来像这样:

add_header Referrer-Policy "same-origin";
add_header Onion-Location mastodon.qKnFwnNH2oH4QhQ7CoRf7HYj8wCwpDwsa8ohJmcPG9JodMZvVA6psKq7qKnFwnNH2oH4QhQ7CoRf7HYj8wCwpDwsa8ohJmcPG9JodMZvVA6psKq7.onion$request_uri;

keepalive_timeout    70;
sendfile             on;
client_max_body_size 80m;

root /home/mastodon/live/public;

# …

error_page 500 501 502 503 504 /500.html;

access_log /var/log/nginx/mastodon_access.log;
error_log /var/log/nginx/mastodon_error.log warn;

在新的配置文件中,在原来 Mastodon 配置的位置添加 include 指令。

你的 Nginx 配置文件现在应该看起来像这样:

server {
  listen 80;
  server_name mastodon.example.com;
  return 301 https://$server_name$request_uri;
}

map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

server {
  listen 443 ssl http2;
  list [::]:443 ssl http2;
  server_name mastodon.example.com;
  include /etc/nginx/snippets/mastodon.conf;

  ssl_certificate /etc/letsencrypt/live/mastodon.example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/mastodon.example.com/privkey.pem;
}

通过 HTTP 提供 Tor 服务

本节假设你希望同时在 Tor 和公共互联网上公开你的实例。

虽然通过 HTTPS 提供 Mastodon 的 Tor 版本看起来很诱人但这并不总是理想的选择。HTTPS 证书主要对能够使用自己的公司信息生成证书的大公司有用。没有证书颁发机构(CA)能免费提供它们Tor 项目的一篇博客文章也解释了为什么 HTTPS 证书对安全性并没有真正的好处。但另一方面Mastodon 使用了大量使用到 HTTPS 的重定向,有经过验证的证书可能会使你的用户更容易在 Tor 上使用你的实例,而无需手动删除 URL 中的 https:// 前缀。

在本节中,我们将介绍如何通过 HTTP 提供 Mastodon 实例,但仅限于 Tor。这可以通过在现有 Nginx 配置前添加额外配置来实现。

server {
  listen 80;
  server_name mastodon.qKnFwnNH2oH4QhQ7CoRf7HYj8wCwpDwsa8ohJmcPG9JodMZvVA6psKq7qKnFwnNH2oH4QhQ7CoRf7HYj8wCwpDwsa8ohJmcPG9JodMZvVA6psKq7.onion;
  include /etc/nginx/snippets/mastodon.conf;
}

server {
  listen 80;
  server_name mastodon.example.com;
  return 301 https://$server_name$request_uri;
}

map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

server {
  listen 443 ssl http2;
  list [::]:443 ssl http2;
  server_name mastodon.example.com;
  include /etc/nginx/snippets/mastodon.conf;

  ssl_certificate /etc/letsencrypt/live/mastodon.example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/mastodon.example.com/privkey.pem;
}

/var/lib/tor/hidden_service/hostname 文件中的 Tor 域名替换这里提供的长哈希值。这也应该反映在 snippets 文件中的 Onion-Location 头中。

注意洋葱主机名前面加了 "mastodon."。你的 Tor 地址充当通配符域名。所有子域名都会被路由,你可以配置 Nginx 响应你想要的任何子域名。如果你不希望在 Tor 地址上托管任何其他服务,可以省略子域名,或选择不同的子域名。

现在你可以看到将 mastodon 配置移动到不同文件的好处。如果不这样做,所有配置都必须复制到两个地方。对配置的任何更改都必须在两个地方进行。

重启你的Web服务器。

service nginx restart

注意事项

你需要注意几点事项:

  • 如前所述Mastodon前端的某些URL会强制用户使用HTTPS URL。他们必须手动将URL替换为HTTP才能继续。
  • 各种资源,如图像,仍将通过你常规的明网域名提供。这可能会成为问题,具体取决于你的用户希望、尝试或需要多高的隐私程度。

{{< translation-status-zh-cn raw_title="Onion services" raw_link="/admin/optional/tor/" last_translation_time="2025-04-21" raw_commit="6addd5cf525adec1859f48c52dafcfe1f96e558a">}}