Двенадцать сборок

Запуск Tor-релея, который остаётся в рамках допустимой политики использования

Non-exit релей с IPv6, учётом трафика, усиленным systemd-юнитом и проверкой, подтверждающей, что ваш отпечаток (fingerprint) попал в консенсус.

Что это даёт

Средний узел: он принимает соединения от клиентов и других узлов, передаёт трафик внутри сети и никогда не открывает соединение с адресатом в обычном интернете. Никто не получает жалобы на злоупотребления о среднем узле, потому что снаружи он обменивается зашифрованным трафиком с опубликованным списком других узлов и ничем больше.

Это различие — единственная причина существования этого руководства. Выходные узлы — отдельный разговор: жалобы на них приходят на наш стол по злоупотреблениям, а не на ваш, так что прочитайте политику допустимого использования и откройте тикет, прежде чем настраивать такой узел. Всё ниже намеренно отключает выход дважды.

Перед началом

  • R-4. Tor — однопоточный на соединение и ограничен сетью; четыре выделенных ядра насытят канал задолго до того, как CPU заметит.
  • Сайт с пропускной способностью, которую вы готовы пожертвовать. BUH-01 и HEL-01 — самые дешёвые терабайты, которые мы продаём, и оба имеют транзит для этого.
  • Работающие часы. Узлы со смещённым временем исключаются из консенсуса, и это самая частая причина того, что узел прекрасно запускается и никогда нигде не появляется.

1. Базовая система

apt update && apt full-upgrade -y
apt install -y tor nyx chrony nftables
timedatectl set-timezone UTC
chronyc tracking

chronyc tracking должна показать смещение системного времени в микросекундах. Если показывает секунды — остановитесь и исправьте сначала это; ничего дальше работать не будет.

2. Конфигурация узла

Замените /etc/tor/torrc следующим. Прочитайте каждую строку, потому что две из них — те, что удерживают вас в рамках политики:

Nickname exampleRelay
ContactInfo [email protected]

ORPort 9001
ORPort [2001:db8:1a2b::2]:9001
SocksPort 0
ControlPort 0

ExitRelay 0
ExitPolicy reject *:*
IPv6Exit 0

RelayBandwidthRate 40 MBytes
RelayBandwidthBurst 60 MBytes
AccountingMax 40 TBytes
AccountingStart month 1 00:00

MetricsPort 127.0.0.1:9035
MetricsPortPolicy accept 127.0.0.1

User debian-tor
DataDirectory /var/lib/tor
Log notice syslog

ExitRelay 0 и ExitPolicy reject *:* — это пояс и подтяжки. Любого из них хватило бы по отдельности; вместе они означают, что никакие будущие настройки по умолчанию и никакая полузабытая правка в полночь незаметно не превратят вас в выходной узел.

Подставьте реальный IPv6-адрес вашего инстанса во вторую строку ORPort. Каждый инстанс поставляется с маршрутизируемым /64, так что нет причин запускать узел только с IPv4, а узлы с поддержкой IPv6 всё ещё в дефиците по сравнению с IPv4.

Учёт трафика заслуживает размышления, а не копипасты. Трафик в нашей сети не тарифицируется при добросовестном использовании, но узел без лимита будет потреблять ровно столько, сколько сеть сможет ему найти, вечно. Сорок мегабайт в секунду с месячным потолком в сорок терабайт — щедрый и благовоспитанный узел. При достижении лимита узел засыпает до конца периода, а не отключается посреди круга.

Если вы запускаете более одного узла где-либо, добавьте строку MyFamily со списком всех отпечатков, включая этот, через запятую. Клиенты используют её, чтобы не строить цепочку, проходящую через две машины под одним управлением, и её пропуск — самая частая жалоба на конфигурацию операторам.

3. Усиление агрегата

Штатный агрегат приличный; эти строки делают его значительно менее интересным для того, кто найдёт в нём ошибку.

systemctl edit tor@default
[Service]
NoNewPrivileges=yes
PrivateTmp=yes
PrivateDevices=yes
ProtectSystem=strict
ProtectHome=yes
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectControlGroups=yes
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
RestrictNamespaces=yes
MemoryDenyWriteExecute=yes
ReadWritePaths=/var/lib/tor /var/log/tor /run/tor
LimitNOFILE=65535

Лимит файловых дескрипторов важнее, чем кажется. Занятому узлу нужны тысячи одновременных сокетов, а лимит по умолчанию даёт узел, который работает неделю, а затем начинает отказывать в соединениях без ничего очевидного в логе.

4. Межсетевой экран

flush ruleset

table inet filter {
  chain input {
    type filter hook input priority filter; policy drop;
    ct state established,related accept
    ct state invalid drop
    iif lo accept
    ip protocol icmp accept
    ip6 nexthdr icmpv6 accept
    tcp dport 22 accept
    tcp dport 9001 accept
  }
  chain forward {
    type filter hook forward priority filter; policy drop;
  }
}
systemctl enable --now nftables
systemctl restart tor@default

Обратите внимание: порт метрик привязан к loopback-адресу и поэтому не требует правил. Добирайтесь до него через SSH-туннель, когда он вам нужен, и никогда не открывайте его; метрики узла интересны большему числу людей, чем вы.

Проверка

Это часть, которая занимает часы, а не минуты, так что запустите и уйдите.

Во-первых, примерно через двадцать минут после запуска в логе должно появиться сообщение о том, что узел проверил свой порт снаружи и прошёл:

journalctl -u tor@default --since "20 min ago" | grep -i "self-testing"

Вам нужна строка о том, что ваш ORPort доступен снаружи. Если она не появляется, межсетевой экран блокирует входящий порт 9001 или ваш IPv6-адрес в torrc не соответствует инстансу.

Во-вторых, возьмите свой отпечаток и сохраните его:

cat /var/lib/tor/fingerprint

В-третьих, подтвердите, что узел работает, а не просто запущен:

nyx
curl -s http://127.0.0.1:9035/metrics | grep -E "tor_relay_traffic|tor_relay_connections"

Счётчики трафика должны расти в течение часа после успешной самопроверки. Уполномоченные органы каталога тратят примерно три часа, чтобы проголосовать за включение вашего отпечатка в консенсус, и клиенты начинают отправлять значимый объём только после этого. Флаг Guard появляется примерно на восьмой день, если uptime держится, и вот тогда график трафика переходит от ручейка к установленному вами пределу.

В-четвёртых, и самое важное для этой конкретной сборки, докажите, что вы не выходите. С второй машины проверьте, что наружу идёт только трафик узла:

ss -tn state established | wc -l
ss -tn state established sport = :9001 | wc -l

Почти каждое установленное соединение должно задействовать ORPort. Большое количество исходящих соединений на произвольные порты означало бы политику выхода, которую вы не собирались устанавливать; в этом случае остановите демон и перечитайте шаг два.

Эксплуатация

ЧтоОтвет
ПерезапускСтоит нескольких часов репутации. Вносите изменения пакетами.
Обновленияapt upgrade, затем перезапуск. Узлы на старых версиях помечаются и в конечном счёте удаляются.
ПереездСкопируйте /var/lib/tor/keys, и отпечаток переедет вместе с узлом. Вес в консенсусе не сбрасывается.
ЖалобыСредний узел не порождает ни одной. Если получили — значит, что-то выходит, и это стоит проверить.
ВыключениеСначала установите AccountingMax в небольшое значение, чтобы цепи разрядились, или просто остановите и примите потерю репутации.

Сохраните резервную копию /var/lib/tor/keys где-нибудь вне инстанса в день сборки. Ключ идентичности — это то, что делает этот узел этим узлом; потеряете — начнёте с нулевого веса в консенсусе, а это восемь дней, когда вас никто не использует. Наша позиция о том, что мы логируем, пока работает ваш узел, — на странице логирования, и она короткая.

Готовы, когда вы готовы

Выберите город. Выберите размер. Оплатите монетой.

Никаких форм о том, кто вы, никакого ожидания одобрения человеком, никаких звонков для проверки. Счёт оплачен — и учётные данные приходят на почту.