Что это даёт
Средний узел: он принимает соединения от клиентов и других узлов, передаёт трафик внутри сети и никогда не открывает соединение с адресатом в обычном интернете. Никто не получает жалобы на злоупотребления о среднем узле, потому что снаружи он обменивается зашифрованным трафиком с опубликованным списком других узлов и ничем больше.
Это различие — единственная причина существования этого руководства. Выходные узлы — отдельный разговор: жалобы на них приходят на наш стол по злоупотреблениям, а не на ваш, так что прочитайте политику допустимого использования и откройте тикет, прежде чем настраивать такой узел. Всё ниже намеренно отключает выход дважды.
Перед началом
- 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 trackingchronyc 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 syslogExitRelay 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 где-нибудь вне инстанса в день сборки. Ключ идентичности — это то, что делает этот узел этим узлом; потеряете — начнёте с нулевого веса в консенсусе, а это восемь дней, когда вас никто не использует. Наша позиция о том, что мы логируем, пока работает ваш узел, — на странице логирования, и она короткая.