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 -> 1Sandbox
0 -> 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, определяющий настройку
ExitRelay
torrc для каждого экземпляра Tor (вместо настройки на уровне сервера) - первый столбец: идентификатор экземпляра (inventory_hostname-ip_orport)
- второй столбец: "exit" для выходных экземпляров Tor, любое другое значение (включая пустое) для невыходных экземпляров Tor
- эта переменная игнорируется, если tor_ExitRelay равно Ложь
- это простой разделенный запятыми файл csv, хранящийся на управляющей машине Ansible, определяющий настройку
tor_RelayBandwidthRate_file
путь к файлу- это простой разделенный запятыми файл csv, хранящийся на управляющей машине Ansible, определяющий настройку
RelayBandwidthRate
torrc для каждого экземпляра Tor (вместо server-wide) - первый столбец: идентификатор экземпляра (inventory_hostname-ip_orport)
- второй столбец: значение, принимаемое
RelayBandwidthRate
(см. страницу man tor)
- это простой разделенный запятыми файл csv, хранящийся на управляющей машине Ansible, определяющий настройку
tor_RelayBandwidthBurst_file
путь к файлу- это простой разделенный запятыми файл csv, хранящийся на управляющей машине Ansible, определяющий настройку
RelayBandwidthBurst
torrc для каждого экземпляра 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, определяющий настройку
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, для которых вы хотите установить конкретную политику выхода, должны быть указаны в файле (остальные можно пропустить)
- по умолчанию: не установлен
- это простой файл 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_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, вы обычно делаете два шага:
установите новый сервер, запуская только против нового сервера (-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/ansible-relayor