nusenu.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:
NoExec0 -> 1Sandbox0 -> 1 (только для Debian)
Переменные роли
Все упомянутые здесь переменные являются необязательными.
tor_ContactInfoстрока- Устанавливает поле ContactInfo ретранслятора.
- Эта настройка обязательна.
- Операторам рекомендуется использовать Спецификацию обмена контактной информацией 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, определяющий настройку
ExitRelaytorrc для каждого экземпляра Tor (вместо настройки на уровне сервера) - первый столбец: идентификатор экземпляра (inventory_hostname-ip_orport)
- второй столбец: "exit" для выходных экземпляров Tor, любое другое значение (включая пустое) для невыходных экземпляров Tor
- эта переменная игнорируется, если tor_ExitRelay равно Ложь
- это простой разделенный запятыми файл csv, хранящийся на управляющей машине Ansible, определяющий настройку
tor_RelayBandwidthRate_fileпуть к файлу- это простой разделенный запятыми файл csv, хранящийся на управляющей машине Ansible, определяющий настройку
RelayBandwidthRatetorrc для каждого экземпляра Tor (вместо server-wide) - первый столбец: идентификатор экземпляра (inventory_hostname-ip_orport)
- второй столбец: значение, принимаемое
RelayBandwidthRate(см. страницу man tor)
- это простой разделенный запятыми файл csv, хранящийся на управляющей машине Ansible, определяющий настройку
tor_RelayBandwidthBurst_fileпуть к файлу- это простой разделенный запятыми файл csv, хранящийся на управляющей машине Ansible, определяющий настройку
RelayBandwidthBursttorrc для каждого экземпляра Tor (вместо server-wide) - первый столбец: идентификатор экземпляра (inventory_hostname-ip_orport)
- второй столбец: значение, принимаемое
RelayBandwidthBurst(см. страницу man tor)
- это простой разделенный запятыми файл csv, хранящийся на управляющей машине Ansible, определяющий настройку
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, определяющий настройку
ExitPolicytorrc для каждого экземпляра 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, для которых вы хотите установить конкретную политику выхода, должны быть указаны в файле (остальные можно пропустить)
- по умолчанию: не установлен
- это простой файл csv, разделенный точкой с запятой, хранящийся на управляющей машине Ansible, определяющий настройку
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
- по умолчанию: не определено
- если установлено, relayor добавляет необходимые конфигурации сборки prometheus для проверки TCP 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_9000relaytype: значение "exit" или "nonexit" в зависимости отtor_ExitRelaytor_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, вы обычно делаете два шага:
установите новый сервер, запуская только против нового сервера (-l) и только с тегом для этой ОС (openbsd):
ansible-playbook yourplaybook.yml -l newserver --tags openbsdзатем перенастройте все серверы (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 (значительно изменён с тех пор)
ansible-galaxy install nusenu.relayor