relayor

ansible-relayor

Это роль Ansibl для операторов Tor-ретрансляторов. Введение в relayor можно найти здесь.

Поддержка по электронной почте: relayor-support AT riseup.net

Основное внимание в этой роли уделяется автоматизации как можно большего числа этапов для оператора Tor-ретранслятора, включая управление ключами (OfflineMasterKey). Развертывание нового Tor-сервера так же просто, как добавить новый хост в инвентарь, никакая дополнительная ручная конфигурация не требуется.

Эта роль управляет только экземплярами Tor в соответствии с текущими настройками и переменными. Если вы измените конфигурацию после полного выполнения плейбука, чтобы сократить количество экземпляров Tor, например, уменьшив значение tor_maxPublicIPs, эта роль не удалит ранее сконфигурированные экземпляры Tor с вашего сервера. Экземпляры Tor на сервере идентифицируются по их комбинации IPv4 и ORPort. Изменение ORPort (с помощью переменной tor_ports) после первичного развертывания фактически означает создание новых экземпляров Tor (а не их изменение); именно поэтому изменение переменной tor_ports следует избегать после первоначальной развертки.

Поддержка обновления пакета Tor (важная задача для работы ретранслятора) не входит в область данной роли Ansible. Рекомендуем вам включить автоматические обновления, чтобы ваш ретранслятор оставался в исправном состоянии, если ваша операционная система это поддерживает. Руководство по Tor Relay содержит инструкции по включению автоматических обновлений программного обеспечения для Debian/Ubuntu и FreeBSD.

Эта роль Ansible не предназначена для поддержки мостов Tor.

Основные преимущества для оператора Tor-ретранслятора

  • автоматизация - больше нет ручных задач настройки
  • безопасность: офлайн ключи Ed25519 генерируются на хосте Ansible и никогда не подвергаются риску на ретрансляторе
  • легкое обновление подписывающего ключа Ed25519 (по умолчанию действителен в течение 30 дней - настраиваемый)
  • безопасность: разделение: каждый экземпляр Tor запускается с отдельным пользователем
  • автоматически использует IP-адреса IPv6 (если доступны)
  • автоматическое создание экземпляров Tor (по умолчанию два - настраиваемое)
  • включает функцию песочницы Tor по умолчанию на системах на базе Debian
  • легко выбирать между альфа/неальфа версиями (только Debian/Ubuntu/FreeBSD)
  • легко восстанавливать настройку ретранслятора (хост Ansible становится резервным местом для всех ключей из коробки)
  • легко выбирать режим выхода/невыхода на основе одного булевого значения
  • автоматическое развертывание страницы html-уведомления Tor о выходе через DirPort Tor (только для выходов)
  • автоматическое управление MyFamily
  • интеграция с prometheus (при включении)
    • автогенация конфигурации обратного прокси nginx для защиты MetricsPort Tor (защита с помощью базовой аутентификации / HTTPS)
    • автогенация конфигурации сборки prometheus для MetricsPort
    • автогенация конфигурации сборки blackbox-exporter для мониторинга доступности ORPorts и DirPorts
    • доставка правил предупреждений prometheus для Tor

Установка

Эта роль Ansible доступна на Galaxy https://galaxy.ansible.com/nusenu/relayor/

ansible-galaxy install nusenu.relayor

Требования

Требования к управляющей машине

  • не используйте эту роль с become: yes
  • tor >= 0.4.8
  • пакет python-netaddr должен быть установлен
  • необходимые команды: sort, uniq, wc, cut, sed, xargs
  • openssl >= 1.0.0
  • ansible >= 2.16.4
  • bash под /bin/bash

Требования к управляемым узлам

  • пользователь с правами sudo, не являющийся root
  • python
  • статический IPv4 адрес(а)
    • мы можем использовать несколько общедоступных IP
    • если у вас нет общественного IP, мы используем один частный IP (предполагается NAT)
  • systemd (все системы на базе Linux)

Требования к серверу Prometheus (только в случае использования функций prometheus этой роли)

  • promtool должен быть установлен на сервере prometheus и находиться в PATH для пользователя root

Поддерживаемые операционные системы

  • Debian 12
  • OpenBSD 7.4
  • FreeBSD 14.1
  • Ubuntu 22.04

Поддерживаемые версии Tor

  • tor >= 0.4.8.x

Пример плейбука

Минимальный плейбук с использованием ansible-relayor для настройки невыходных ретрансляторов может выглядеть так:

---

- hosts: relays
  vars:
    tor_ContactInfo: [email protected]
  roles:
    - nusenu.relayor

Для получения дополнительных примеров смотрите папку с примерами плейбуков.

Измененные значения по умолчанию torrc

Эта роль изменяет значения по умолчанию следующих опций torrc для использования более безопасных опций по умолчанию, но вы все равно можете явно настроить их через tor_config:

  • NoExec 0 -> 1
  • Sandbox 0 -> 1 (только для Debian)

Переменные роли

Все упомянутые здесь переменные являются необязательными.

  • tor_ContactInfo строка

  • tor_signingkeylifetime_days целое число

    • все экземпляры Tor, созданные relayor, работают в режиме OfflineMasterKey
    • эта настройка определяет срок действия подписывающих ключей Ed25519 в днях
    • косвенно определяет как часто вам нужно запускать свой плейбук Ansible, чтобы убедиться, что ключи вашего ретранслятора не истекли
    • экземпляр Tor в режиме OfflineMasterKey автоматически останавливается, когда его ключ/сертификат истекают, поэтому это критическая настройка!
    • более низкие значения (например, 7) лучше с точки зрения безопасности, но требуют более частых запусков плейбука
    • по умолчанию: 30
  • tor_config словарь

    • этот словарь содержит настройки torrc и их значения, доступные опции см. в разделе 'SERVER OPTIONS' в руководстве Tor.
    • каждую настройку можно установить только один раз (независимо от того, что говорит страница man tor)
    • этот словарь можно использовать для настройки любой опции torrc, но НЕ следующих: OfflineMasterKey, RunAsDaemon, Log, SocksPort, OutboundBindAddress, User, DataDirectory, ORPort, DirPort, MetricsPort, MetricsPortPolicy, ControlSocket, CookieAuthentication, Nickname, ExitRelay, IPv6Exit, ExitPolicy, RelayBandwidthRate, RelayBandwidthBurst, SigningKeyLifetime
  • tor_ports словарь

    • Эта переменная позволяет вам
      • выбрать ORPort и DirPort для Tor
      • решить, сколько экземпляров Tor вы хотите запускать на один IP-адрес (по умолчанию 2) - убедитесь, что вы не запускаете больше, чем разрешено на один IP-адрес
    • отключить DirPorts, установив их в 0
    • ПОДСКАЗКА: выбирайте ORPorts осторожно и никогда больше не меняйте их, по крайней мере для уже развернутых, добавление новых без изменения уже развернутых допустимо.
    • функция "авто" Tor НЕ поддерживается
    • по умолчанию:
      • экземпляр 1: ORPort 9000, DirPort 9001
      • экземпляр 2: ORPort 9100, DirPort 9101
  • tor_offline_masterkey_dir путь к папке

    • по умолчанию: ~/.tor/offlinemasterkeys
    • Определяет место, где на управляющей машине Ansible мы храним ключи ретранслятора (Ed25519 и RSA)
    • Внутри этой папки Ansible создаст подпапку для каждого экземпляра Tor.
    • см. документацию, если вы хотите перенести экземпляры на новый сервер
    • замечание: не изменяйте вручную имена файлов и/или папок/содержимое в этих папках данных Tor
  • tor_nickname строка

    • определяет никнейм, который будут использовать экземпляры Tor
    • все экземпляры Tor на хосте получат один и тот же никнейм
    • для использования имени хоста сервера в качестве никнейма установите его в {{ ansible_hostname }}
    • не алфавитные символы автоматически удаляются, а никнеймы длиной более 19 символов обрезаются для соответствия требованиям Tor по никнейму
    • tor_nicknamefile переопределяет эту настройку
    • по умолчанию: отсутствует
  • tor_nicknamefile путь к файлу

    • это простой разделенный запятыми файл csv, хранящийся на управляющей машине Ansible, определяющий никнеймы
    • первый столбец: идентификатор экземпляра (inventory_hostname-ip_orport)
    • второй столбец: никнейм
    • один экземпляр на строку
    • все экземпляры ДОЛЖНЫ быть указаны в csv-файле
    • не алфавитные символы автоматически удаляются, а никнеймы длиной более 19 символов обрезаются для соответствия требованиям Tor по никнейму
    • по умолчанию: не установлен
  • tor_gen_ciiss_proof_files булевый

    • генерирует файлы доказательства rsa-fingerprint.txt и ed25519-master-pubkey.txt на управляющей машине для публикации в соответствии со спецификацией ContactInfo
    • стандартные пути: ~/.tor/rsa-fingerprint.txt и ~/.tor/ed25519-master-pubkey.txt
    • файлы перезаписываются, если они уже существуют
    • расположение выходной папки можно настроить с помощью переменной tor_ciiss_proof_folder
    • имя файла жестко задано тем, что требуется спецификацией и не может быть настроено
    • по умолчанию: Ложь
  • tor_ciiss_proof_folder путь к папке

    • определяет выходную папку для созданных файлов доказательства
    • по умолчанию: ~/.tor
  • tor_LogLevel строка

    • устанавливает уровень логирования tor
    • по умолчанию: notice
  • tor_alpha булевый

    • Установите в True, если хотите использовать альфа-версии Tor.
    • Примечание: эта настройка не гарантирует, что установленный tor будет обновлен до альфа-версии.
    • Эта настройка поддерживается только на Debian/Ubuntu/FreeBSD (игнорируется на других платформах).
    • по умолчанию: Ложь
  • tor_nightly_builds булевый

    • Установите в True, если хотите использовать репозиторий ночных сборок Tor с deb.torproject.org.
    • Ночные сборки следуют главной ветке git Tor.
    • Поддерживается только на Debian и Ubuntu (игнорируется на других платформах).
    • по умолчанию: Ложь
  • tor_ExitRelay булевый

    • Вы должны установить это значение в True, если хотите разрешить выход для всех или некоторых экземпляров Tor на сервере
    • Если эта переменная не True, это будет невыходной ретранслятор
    • Если вы хотите запустить смешанный сервер (выходные и невыходные экземпляры Tor), используйте tor_ExitRelaySetting_file для конфигурации на уровне экземпляра в дополнение к этой переменной
    • по умолчанию: Ложь
  • tor_ExitRelaySetting_file путь к файлу

    • это простой разделенный запятыми файл csv, хранящийся на управляющей машине Ansible, определяющий настройку ExitRelay torrc для каждого экземпляра Tor (вместо настройки на уровне сервера)
    • первый столбец: идентификатор экземпляра (inventory_hostname-ip_orport)
    • второй столбец: "exit" для выходных экземпляров Tor, любое другое значение (включая пустое) для невыходных экземпляров Tor
    • эта переменная игнорируется, если tor_ExitRelay равно Ложь
  • tor_RelayBandwidthRate_file путь к файлу

    • это простой разделенный запятыми файл csv, хранящийся на управляющей машине Ansible, определяющий настройку RelayBandwidthRate torrc для каждого экземпляра Tor (вместо server-wide)
    • первый столбец: идентификатор экземпляра (inventory_hostname-ip_orport)
    • второй столбец: значение, принимаемое RelayBandwidthRate (см. страницу man tor)
  • tor_RelayBandwidthBurst_file путь к файлу

    • это простой разделенный запятыми файл csv, хранящийся на управляющей машине Ansible, определяющий настройку RelayBandwidthBurst torrc для каждого экземпляра Tor (вместо server-wide)
    • первый столбец: идентификатор экземпляра (inventory_hostname-ip_orport)
    • второй столбец: значение, принимаемое RelayBandwidthBurst (см. страницу man tor)
  • tor_ExitNoticePage булевый

    • указывает, отображаем ли мы стандартное уведомление о выходе Tor на странице html на DirPort
    • актуально только в том случае, если мы являемся выходной ретрансляцией
    • по умолчанию: Истина
  • tor_exit_notice_file путь к файлу

    • путь к HTML-файлу на управляющей машине, который вы хотели бы отображать вместо стандартного tor-exit-notice.html, предоставленного проектом Tor
    • актуально только в том случае, если мы являемся выходной ретрансляцией и если tor_ExitNoticePage равно Истина
  • tor_AbuseEmailAddress адрес электронной почты

    • если установлено, этот адрес электронной почты используется на странице уведомления о выходе Tor, опубликованной на DirPort
    • рекомендуется установить его, если вы запустили выходной узел
    • актуально только в том случае, если мы являемся выходной ретрансляцией
    • Примечание: если вы используете свой собственный шаблон уведомления о выходе Tor, эта переменная игнорируется, если вы ее не включили в шаблон.
    • по умолчанию: не установлен
  • tor_ExitPolicy массив

    • укажите свою пользовательскую политику выхода
    • актуально только если tor_ExitRelay - Истина
    • см. defaults/main.yml для примера, как это установить
    • по умолчанию: сокращенная политика выхода (https://trac.torproject.org/projects/tor/wiki/doc/ReducedExitPolicy)
  • tor_ExitPolicy_file путь к файлу

    • это простой файл csv, разделенный точкой с запятой, хранящийся на управляющей машине Ansible, определяющий настройку ExitPolicy torrc для каждого экземпляра Tor (вместо server-wide)
    • первый столбец: идентификатор экземпляра (inventory_hostname-ip_orport)
    • второй столбец: значение, принимаемое ExitPolicy (см. страницу man tor)
    • пример содержимого: "myrelay-192.168.1.1_443;reject *:25,reject *:123"
    • актуально только если tor_ExitRelay - Истина
    • это можно комбинировать с настройкой tor_ExitPolicy и она будет иметь приоритет (это более конкретно)
    • только те экземпляры Tor, для которых вы хотите установить конкретную политику выхода, должны быть указаны в файле (остальные можно пропустить)
    • по умолчанию: не установлен
  • tor_maxPublicIPs целое число

    • Ограничивает количество публичных IP, которые мы будем использовать для генерации экземпляров на одном хосте.
    • Косвенно ограничивает количество экземпляров, которые мы создаем на одном хосте.
    • по умолчанию: 1
  • tor_IPv6 булевый

    • автоматически определяет, есть ли у вас IP-адреса IPv6 и соответственно включает IPv6 ORPort
    • вы можете отказаться от этого, установив его в Ложь
    • по умолчанию: Истина
  • tor_IPv6Exit булевый

    • включает выходящий трафик IPv6
    • актуально только если tor_ExitRelay и tor_IPv6 равны Истина и у нас есть адрес IPv6
    • по умолчанию: Истина (в отличие от стандартного значения tor)
  • tor_enableMetricsPort булевый

    • если True, включите MetricsPort Tor по адресу localhost 127.0.0.1 и разрешите тому же IP получить доступ к нему (MetricsPortPolicy)
    • это бета-функция relayor и в будущем будет изменена для использования более безопасной опции unix socket, как только она станет доступна
    • включение этой настройки автоматически отключает OverloadStatistics, если она не включена явно (поэтому tor не будет публиковать/загружать эти данные в каталожные органы, поскольку мы используем MetricsPort локально)
    • по умолчанию: Ложь
  • tor_prometheus_host имя хоста

    • эта переменная актуальна только в случае, если tor_enableMetricsPort или tor_blackbox_exporter_host установлены
    • если вы хотите включить интеграцию prometheus для relayor, вы должны установить эту переменную на хост prometheus
    • она определяет, на каком хосте Ansible должна сгенерировать конфигурацию сборки prometheus для MetricsPort
    • этот хост должен быть доступен в файле инвентаризации Ansible
    • по умолчанию: не указано (конфигурация сборки не создается)
  • tor_prometheus_confd_folder путь к папке

    • актуально только если вы хотите использовать prometheus
    • эта папка должна существовать на tor_prometheus_host
    • relayor помещает конфигурации сборки prometheus в эту папку
    • раздел конфигурации prometheus должен находиться в этой папке под именем 1_prometheus.yml
    • мы собираем все файлы в этой папке по заданному порядку в один выходной файл prometheus.yml, так как prometheus не поддерживает папки стиля conf.d из коробки
    • по умолчанию: /etc/prometheus/conf.d
  • tor_prometheus_config_file путь к файлу

    • актуально только если вы хотите использовать prometheus
    • эта переменная определяет путь к глобальному файлу конфигурации prometheus на tor_prometheus_host
    • мы создаем резервную копию файла в той же папке перед созданием нового
    • это чувствительный к безопасности файл, поскольку он содержит учетные данные для MetricsPort Tor
    • владелец файла: root, группа: tor_prometheus_group, разрешения: 0640
    • по умолчанию: /etc/prometheus/prometheus.yml
  • tor_MetricsPort_offset целое число

    • определяет TCP MetricsPort, используемый на первом экземпляре Tor, запущенном на хосте
    • дополнительные экземпляры Tor будут использовать увеличенное номер порта 33301, 33302, ...
    • поэтому, если вы запускаете N экземпляров на хосте, следующие N-1 портов после этого порта должны быть неиспользуемыми на 127.0.0.1, чтобы tor мог использовать их для MetricsPort
    • по умолчанию: 33300
  • tor_prometheus_scrape_file имя файла

    • актуально только в случае, если tor_prometheus_host определен, а tor_enableMetricsPort или tor_blackbox_exporter_host установлены
    • определяет имя файла для каждой сервера scrape_config на сервере prometheus внутри tor_prometheus_confd_folder
    • имя файла ДОЛЖНО быть специфичным для хоста, так как для каждого хоста свой собственный файл конфигурации сборки на сервере prometheus, чтобы поддерживать опцию командной строки ansible-playbook --limit
    • в зависимости от tor_enableMetricsPort и tor_blackbox_exporter_host, файлы конфигурации сборки будут содержать задания сборки для MetricsPort Tor (за защитой через обратный прокси для TLS/базовой аутентификации) и/или задания сборки для проверки TCP ORPort/DirPort через blackbox exporter
    • содержимое файла чувствительно (содержит учетные данные для сборки) и получает такие разрешения на файлы: 0640 (владелец: root, группа: tor_prometheus_group)
    • созданные файлы конфигурации сборки будут автоматически обогащены несколькими полезными метками prometheus в зависимости от ваших настроек torrc, см. раздел "Метки prometheus" в этом README
    • по умолчанию: tor_{{ ansible_fqdn }}.yml
  • tor_prometheus_group строка

    • актуально только если вы хотите использовать prometheus
    • определяет имя группы, используемое для разрешений файлов prometheus (prometheus.yml, файлы конфигурации сборки, файл правил предупреждений)
    • по умолчанию: prometheus
  • tor_prom_labels словарь

    • произвольное количество меток prometheus
    • может быть установлен на уровне сервера, но не на уровне экземпляра
    • для примера смотрите defaults/main.yml
    • по умолчанию: пустой словарь
  • tor_blackbox_exporter_host имя хоста:порт

    • если установлено, relayor добавляет необходимые конфигурации сборки prometheus для проверки TCP blackbox exporter в файле, определенном в tor_prometheus_scrape_file
    • осуществляет мониторинг всех ORPorts ретранслятора и при установке DirPorts по IPv4 и IPv6 (если включены) с помощью проверки TCP подключения
    • эта функция не поддерживается на ретрансляторах за NAT
    • определяет, где prometheus находит blackbox exporter, он также может работать на самом сервере prometheus, в этом случае это будет 127.0.0.1:9115
    • хост записывается в результирующей конфигурации сборки prometheus
    • blackbox_exporter должен иметь простой модуль tcp_probe с названием "tcp_connect", настроенный
    • relayor не устанавливает и не настраивает blackbox_exporter
    • по умолчанию: не определено
  • tor_blackbox_exporter_scheme строка

    • определяет протокол, который prometheus использует для подключения к blackbox exporter (http или https)
    • по умолчанию: http
  • tor_blackbox_exporter_username строка

    • актуально только в случае, если tor_blackbox_exporter_host установлен
    • позволяет вам задать имя пользователя, если ваш blackbox exporter требует базовой аутентификации HTTP
    • если вы не зададите имя пользователя, конфигурация сборки не будет включать учетные данные базовой аутентификации HTTP
    • по умолчанию: не определено (без базовой аутентификации HTTP)
  • tor_blackbox_exporter_password строка

    • актуально только в случае, если tor_blackbox_exporter_host установлен
    • позволяет вам задать имя пользователя, если ваш blackbox exporter требует базовой аутентификации HTTP
    • по умолчанию создается случайная строка длиной 20 символов с использованием поиска пароля Ansible
    • по умолчанию: "{{ lookup('password', '~/.tor/prometheus/blackbox_exporter_password') }}"
  • tor_metricsport_nginx_config_file путь к файлу

    • эта переменная актуальна только в случае, если tor_enableMetricsPort равно Истина и tor_prometheus_host установлен
    • определяет путь к файлу конфигурации обратного прокси nginx для MetricsPort, который будет храниться на ретрансляторе
    • этот файл должен быть включен в вашу конфигурацию веб-сервера на ретрансляторе, чтобы сделать MetricsPort доступным для удаленного сбора prometheus
    • папка должна быть уже присутствовать на сервере (relayor не создает ее)
    • по умолчанию: /etc/nginx/promexporters/tor_metricsports_relayor.conf
  • tor_gen_prometheus_alert_rules булевый

    • актуально только тогда, когда включен tor_enableMetricsPort
    • установите значение True, если хотите сгенерировать правила предупреждений prometheus на сервере prometheus (tor_prometheus_host)
    • местоположение файла определяется tor_prometheus_rules_file
    • по умолчанию: ложь (правила не генерируются)
  • tor_prometheus_rules_file путь к файлу

    • актуально только в случае, если tor_gen_prometheus_alert_rules равно True
    • определяет, где на сервере prometheus (tor_prometheus_host) relayor создаст файл правил (папка должна существовать)
    • файл должен находиться в папке, которая включена в вашу конфигурацию prometheus (rule_files) и обычно должен заканчиваться на .rules
    • relayor поставляет стандартный набор правил предупреждений, и вы также можете добавить свои пользовательские правила предупреждений (через tor_prometheus_custom_alert_rules)
    • владелец файла/группа: root, разрешения файла: 0644
    • по умолчанию: /etc/prometheus/rules/ansible-relayor.rules
  • tor_prometheus_alert_rules словарь

    • определяет правила предупреждений prometheus
    • правила автоматически проверяются с помощью promtool
    • см. defaults/main.yml для стандартных правил
  • tor_prometheus_custom_alert_rules словарь

    • если хотите добавить свои собственные правила, добавьте их в этот словарь, он ожидает тот же формат, что и в tor_prometheus_alert_rules
    • правила, определенные в этом словаре, также записываются в tor_prometheus_rules_file
    • это позволяет вам использовать новые правила, поставляемые новыми версиями relayor, при этом сохраняя свои пользовательские правила
    • правила автоматически проверяются с помощью promtool
    • по умолчанию: не определено
  • tor_gen_metricsport_htpasswd булевый

    • эта переменная актуальна только в случае, если tor_enableMetricsPort равно True
    • когда эта переменная установлена в True, мы создаем файл htpasswd, который может быть использован веб-сервером на ретрансляторе для защиты MetricsPort Tor с помощью базовой аутентификации HTTP
    • файл будет принадлежать root и будет доступен для чтения группой веб-сервера (www-data/www - в зависимости от ОС)
    • мы не устанавливаем веб-сервер, используйте другую роль для этого.
    • пароль автоматически генерируется и составляет 20 символов (каждый сервер получает уникальный пароль)
    • путь к файлу на ретрансляторе определяется в tor_metricsport_htpasswd_file
    • открытый пароль записывается в файл на управляющей машине Ansible (см. tor_prometheus_scrape_password_folder)
    • по умолчанию: Истина
  • tor_metricsport_htpasswd_file путь к файлу

    • актуально только в случае, если tor_enableMetricsPort и tor_gen_metricsport_htpasswd установлены в True
    • определяет путь к файлу htpasswd (содержащему имя пользователя и пароль) на ретрансляторе
    • по умолчанию: /etc/nginx/tor_metricsport_htpasswd
  • tor_prometheus_scrape_password_folder путь к папке

    • актуально только в случае, если tor_enableMetricsPort равно True
    • ansible автоматически генерирует один уникальный и случайный 20-символьный пароль на хост (не на каждый экземпляр tor), чтобы защитить MetricsPort через nginx (http auth)
    • эта переменная определяет папку, где ansible будет хранить пароли в открытом виде (поиск пароля)
    • имена файлов в этой папке совпадают с именем хоста (inventory_hostname) и не могут быть настроены
    • переменная должна содержать завершающий '/'
    • по умолчанию: ~/.tor/prometheus/scrape-passwords/
  • tor_prometheus_scrape_port целое число

    • определяет, какой порт назначения используется для доступа к объекту сборки (MetricsPort) через nginx
    • по умолчанию: 443
  • tor_enableControlSocket булевый

    • Если True, создайте файл ControlSocket для каждого экземпляра Tor (т.е. для использования в nyx)
    • контроль доступа зависит от разрешений файловой системы
    • чтобы предоставить пользователю доступ к файлу control socket конкретного экземпляра tor, вы должны добавить пользователя в основную группу экземпляра tor
    • путь к файлу сокета(-ам) - /var/run/tor-instances/instance-id/control
    • эта настройка влияет на все экземпляры на данном сервере
    • конфигурация на уровне экземпляра не поддерживается
    • по умолчанию: Ложь
  • tor_freebsd_somaxconn целое число

    • конфигурирует kern.ipc.somaxconn на FreeBSD
    • по умолчанию мы увеличиваем это значение как минимум до 1024
    • если значение выше, чем это, мы его не трогаем
  • tor_freebsd_nmbclusters целое число

    • конфигурирует kern.ipc.nmbclusters на FreeBSD
    • по умолчанию мы увеличиваем это значение как минимум до 30000
    • если значение выше, чем это, мы его не трогаем
  • tor_package_state строка

    • укажите, какое состояние пакета должен иметь пакет tor
    • возможные значения: present, latest (не поддерживается на BSD)
    • Примечание: Метаданные репозитория не обновляются, поэтому установка этого значения на latest не дает вам никаких гарантий, что это действительно последняя версия.
    • по умолчанию: present
  • tor_binary строка

    • название двоичного файла tor на управляющей машине, используемое для генерации офлайн-ключей
    • если двоичный файл tor не называется "tor" на вашей управляющей машине, вы должны изменить значение по умолчанию (например, на рабочих станциях Whonix)
    • по умолчанию: tor

Метки Prometheus

Когда tor_enableMetricsPort включен, мы также заполняем следующие метки prometheus:

  • id: идентифицирует экземпляр tor по IP_ORPort. Пример значения: 198.51.100.10_9000
  • relaytype: значение "exit" или "nonexit" в зависимости от tor_ExitRelay
  • tor_nickname: когда никнеймы определены (tor_nicknamefile или tor_nickname), эта метка добавляется
  • service: "torrelay"

Вы можете добавить дополнительные метки prometheus, используя tor_prom_labels.

Доступные теги роли

Использование тегов ansible является необязательным, но позволяет ускорить выполнение плейбуков, если вы управляете многими серверами.

Есть специфичные для ОС теги:

  • debian (включает ubuntu)
  • freebsd
  • openbsd

Теги, ориентированные на задачи:

  • renewkey - отвечает за обновление онлайн-ключей Ed25519 (предполагается, что экземпляры Tor полностью настроены и уже работают)
  • install - устанавливает tor, но не запускает и не включает его
  • createdir - создаёт (пустые) директории только на управляющей машине Ansible, полезно для миграции
  • promconfig - восстанавливает конфигурации, связанные с prometheus (конфигурация сборки, blackbox exporter, nginx)
  • reconfigure - восстанавливает конфигурационные файлы (tor и promconfig) и перезагружает tor (требует ранее сконфигурированные экземпляры tor)

Так что, если у вас большая семья и вы собираетесь добавить хост OpenBSD, вы обычно делаете два шага:

  1. установите новый сервер, запуская только против нового сервера (-l) и только с тегом для этой ОС (openbsd):

    ansible-playbook yourplaybook.yml -l newserver --tags openbsd

  2. затем перенастройте все серверы (MyFamily), запустив тег 'reconfigure' для всех серверов.

    ansible-playbook yourplaybook.yml --tags reconfigure

Рассмотрение безопасности

Эта роль Ansible использует функцию OfflineMasterKey Tor без необходимости ручной конфигурации.

Функция офлайн-майн-ключа выставляет только временный подписывающий ключ ретранслятору (по умолчанию действителен в течение 30 дней). Это позволяет восстановиться после полного компрометации сервера без потери репутации ретранслятора (нет необходимости создавать новый постоянный мастер-ключ с нуля).

Каждый экземпляр Tor запускается с отдельным системным пользователем. У пользователя на уровне экземпляра есть доступ только к своим (временным) ключам, но не к ключам других экземпляров. Мы не доверяем всем ретрансляторам Tor, которые мы управляем (мы пытаемся проводить валидацию входных данных, когда используем данные, предоставленные ретранслятором, на управляющей машине Ansible или другом ретрансляторе).

Имейте в виду, что управляющая машина Ansible хранит ВСЕ ваши ключи ретранслятора (RSA и Ed25519) - применяйте соотвествующие меры безопасности.

Если вы используете интеграцию prometheus, управляющая машина Ansible также будет хранить все ваши учетные данные для сборки prometheus в ~/.tor/prometheus/. Однако обновление этих учетных данных очень простое: вы можете просто удалить эту папку и снова запустить ansible-playbook.

Каждый хост сервера Tor получает свой набор учетных данных prometheus, поэтому скомпрометированный хост не должен позволять ему собирать данные со всех других хостов.

Интеграционное тестирование

Эта роль Ansible поставляется с файлом .kitchen.yml, который можно использовать для тестирования relayor - с различными конфигурациями - на виртуальных машинах Vagrant Virtualbox. Он в основном используется для разработки/интеграционного тестирования (поиск регрессий), но вы также можете использовать его, чтобы ознакомиться с relayor в подобной локальной среде. Эти Tor-ретрансляторы не присоединятся к сети, так как они созданы только в целях тестирования.

kitchen загрузит Vagrant образцы из Vagrant cloud для создания тестовых ВМ.

Чтобы начать, установите необходимые пакеты gem:

gem install test-kitchen kitchen-ansiblepush kitchen-vagrant

Перечислите доступные тестовые экземпляры с помощью kitchen list.

Затем вы можете запустить все тесты или выбрать только конкретные экземпляры, например: kitchen test t-guard-debian-10.

Обратите внимание, что для запуска тестов вам также нужны Vagrant и VirtualBox.

Происхождения

https://github.com/david415/ansible-tor (значительно изменён с тех пор)

О проекте

An Ansible role for Tor Relay Operators

Установить
ansible-galaxy install nusenu/ansible-relayor
Лицензия
gpl-3.0
Загрузки
3
Владелец
https://nusenu.medium.com/