nusenu.relayor
ansible-relayor
Este es un rol de Ansible para operadores de relés de Tor. Puedes encontrar una introducción a relayor aquí.
Soporte por correo: relayor-support AT riseup.net
El principal objetivo de este rol es automatizar tantos pasos como sea posible para un operador de relé de Tor, incluidos la gestión de claves (OfflineMasterKey). Desplegar un nuevo servidor de Tor es tan fácil como agregar un nuevo host al inventario, no se requiere configuración manual adicional.
Este rol solo gestiona instancias de Tor de acuerdo con la configuración y variables actuales.
Si cambias la configuración después de una ejecución completa del libro de jugadas, para reducir el número de instancias de Tor, por ejemplo, al disminuir el valor de tor_maxPublicIPs
, este rol no eliminará las instancias de Tor previamente configuradas de tu servidor.
Las instancias de Tor en un servidor se identifican por su combinación de IPv4 y ORPort.
Cambiar el ORPort (usando la variable tor_ports
) después de la implementación inicial significa, en esencia, crear nuevas instancias de Tor (no cambiarlas), por lo que se debe evitar cambiar la variable tor_ports
después de la implementación inicial.
Mantener el paquete de Tor actualizado (una tarea importante para ejecutar un relé) no está en el alcance de este rol de Ansible. Te recomendamos habilitar las actualizaciones automáticas para mantener tu relé bien mantenido si tu sistema operativo lo soporta. La Guía del Relé de Tor contiene instrucciones sobre cómo habilitar actualizaciones automáticas de software para Debian/Ubuntu y FreeBSD.
Este rol de Ansible no busca soportar puentes de Tor.
Principales beneficios para un operador de relé de Tor
- automatización - no más tareas de configuración manual
- seguridad: las claves maestras Ed25519 fuera de línea se generan en el host de Ansible y nunca se exponen al relé
- fácil renovación de claves de firma Ed25519 (válidas por 30 días por defecto - configurable)
- seguridad: compartimentalización: cada instancia de Tor se ejecuta con un usuario distinto
- usa automáticamente direcciones IP de IPv6 (si están disponibles)
- generación automática de instancias de Tor (dos por defecto - configurable)
- habilita por defecto la función Sandbox de Tor en sistemas basados en Debian
- fácil elección entre versiones alpha/no-alpha (solo Debian/Ubuntu/FreeBSD)
- fácil restauración de un conjunto de relé (el host de Ansible se convierte en una ubicación de respaldo para todas las claves por defecto)
- puedes elegir entre el modo de relé de salida/no salida con un solo booleano
- implementación automática de una página html de aviso de salida de Tor a través del DirPort de Tor (solo en salidas)
- gestión automática de MyFamily
- integración con prometheus (cuando está habilitada)
- generación automática de configuración del proxy inverso de nginx para proteger el MetricsPort de Tor (detrás de autenticación básica / HTTPS)
- generación automática de configuración de scrape para MetricsPort
- generación automática de configuración de scrape para blackbox-exporter para monitorizar la accesibilidad de ORPorts y DirPorts
- envío de reglas de alerta para prometheus para Tor
Instalación
Este rol de Ansible está disponible en galaxy https://galaxy.ansible.com/nusenu/relayor/
ansible-galaxy install nusenu.relayor
Requisitos
Requisitos de la máquina de control:
- no ejecutar este rol con
become: yes
- tor >= 0.4.8
- el paquete python-netaddr debe estar instalado
- comandos requeridos: sort, uniq, wc, cut, sed, xargs
- openssl >= 1.0.0
- ansible >= 2.16.4
- bash en /bin/bash
Requisitos del nodo gestionado:
- un usuario no root con permisos sudo
- python
- direcciones IP estáticas de IPv4
- podemos usar múltiples IPs públicas
- si no tienes IP pública, usaremos una sola IP privada (asumiendo NAT)
- systemd (todos los sistemas basados en Linux)
Requisitos del servidor Prometheus (solo al usar características de prometheus de este rol):
- promtool debe estar instalado en el servidor prometheus y en el PATH del usuario root
Sistemas operativos soportados
- Debian 12
- OpenBSD 7.4
- FreeBSD 14.1
- Ubuntu 22.04
Versiones de Tor soportadas
- tor >= 0.4.8.x
Ejemplo de libro de jugadas
Un libro de jugadas mínimo usando ansible-relayor para configurar relés que no son de salida podría verse así:
---
- hosts: relays
vars:
tor_ContactInfo: [email protected]
roles:
- nusenu.relayor
Para más ejemplos, consulta la carpeta de ejemplos de libro de jugadas.
Configuraciones predeterminadas cambiadas de torrc
Este rol cambia las configuraciones predeterminadas de las siguientes opciones de torrc para usar opciones más seguras por defecto, pero aún puedes configurarlas explícitamente a través de tor_config
:
NoExec
0 -> 1Sandbox
0 -> 1 (solo en Debian)
Variables del rol
Todas las variables mencionadas aquí son opcionales.
tor_ContactInfo
string- Establece el campo ContactInfo del relé.
- Esta configuración es obligatoria.
- Se anima a los operadores a usar la Especificación de Compartición de Información de Contacto para publicar información de contacto útil.
tor_signingkeylifetime_days
integer- todas las instancias de tor creadas por relayor se ejecutan en modo OfflineMasterKey
- esta configuración define la duración de las claves de firma Ed25519 en días
- define indirectamente cuán a menudo debes ejecutar tu libro de jugadas de Ansible para asegurarte de que las claves de tu relé no expiren
- una instancia de Tor en modo OfflineMasterKey se detiene automáticamente cuando su clave/certificado expira, ¡así que esta es una configuración crucial!
- valores más bajos (por ejemplo, 7) son mejores desde el punto de vista de la seguridad, pero requieren ejecuciones de libros de jugadas más frecuentes
- valor por defecto: 30
tor_config
diccionario- este diccionario contiene configuraciones de torrc y su valor, para las opciones disponibles, consulta la sección 'SERVER OPTIONS' en el manual de tor.
- cada configuración solo puede establecerse una vez (independientemente de lo que dice la página del manual de tor)
- este diccionario se puede usar para establecer cualquier opción de torrc, pero NO las siguientes:
OfflineMasterKey
,RunAsDaemon
,Log
,SocksPort
,OutboundBindAddress
,User
,DataDirectory
,ORPort
,OutboundBindAddress
,DirPort
,SyslogIdentityTag
,PidFile
,MetricsPort
,MetricsPortPolicy
,ControlSocket
,CookieAuthentication
,Nickname
,ExitRelay
,IPv6Exit
,ExitPolicy
,RelayBandwidthRate
,RelayBandwidthBurst
,SigningKeyLifetime
tor_ports
diccionario- Esta variable te permite
- elegir el ORPort y DirPort de Tor
- decidir cuántas instancias de tor deseas ejecutar por dirección IP (por defecto 2) - asegúrate de no ejecutar más de lo permitido por dirección IP
- desactivar DirPorts estableciéndolos en 0
- CONSEJO: elige ORPorts sabiamente y nunca los cambies de nuevo, al menos no los que ya se han desplegado; agregar más sin cambiar los desplegados está bien.
- la función 'auto' de tor NO está soportada
- valor por defecto:
- instancia 1: ORPort 9000, DirPort 9001
- instancia 2: ORPort 9100, DirPort 9101
- Esta variable te permite
tor_offline_masterkey_dir
ruta de carpeta- valor por defecto: ~/.tor/offlinemasterkeys
- Define la ubicación donde en la máquina de control de Ansible almacenamos las claves del relé (Ed25519 y RSA)
- Dentro de esa carpeta, Ansible creará una subcarpeta para cada instancia de Tor.
- consulta la documentación si deseas migrar instancias a un nuevo servidor
- nota: no manipules manualmente los nombres de archivos y/o carpetas/ contenido en estas Carpetas de Datos de Tor
tor_nickname
string- define el apodo que usarán las instancias de Tor
- todas las instancias de Tor en un host tendrán el mismo apodo
- para usar el nombre del host del servidor como apodo, configúralo a {{ ansible_hostname }}
- los caracteres no alfanuméricos se eliminan automáticamente y los apodos de más de 19 caracteres se truncarán para cumplir con los requisitos de apodo de tor
- tor_nicknamefile anula esta configuración
- valor por defecto: ninguno
tor_nicknamefile
archivo- este es un archivo csv simple separado por comas almacenado en la máquina de control de Ansible que especifica apodos
- primera columna: identificador de la instancia (inventory_hostname-ip_orport)
- segunda columna: apodo
- una instancia por línea
- todas las instancias DEBEN estar presentes en el archivo csv
- los caracteres no alfanuméricos se eliminan automáticamente y los apodos de más de 19 caracteres se truncarán para cumplir con los requisitos de apodo de tor
- valor por defecto: no configurado
tor_gen_ciiss_proof_files
booleano- genera los archivos rsa-fingerprint.txt y ed25519-master-pubkey.txt en la máquina de control para su publicación de acuerdo con la especificación de ContactInfo
- las rutas de los archivos por defecto son: ~/.tor/rsa-fingerprint.txt y ~/.tor/ed25519-master-pubkey.txt
- los archivos se sobrescriben si existen
- la ubicación de la carpeta de salida se puede configurar usando la variable
tor_ciiss_proof_folder
- el nombre del archivo está codificado en el requerido por la especificación y no se puede configurar
- valor por defecto: Falso
tor_ciiss_proof_folder
ruta de carpeta- define la carpeta de salida para los archivos de prueba generados
- valor por defecto: ~/.tor
tor_LogLevel
string- establece el nivel de registro de tor
- valor por defecto: notice
tor_alpha
booleano- Establece en Verdadero si deseas usar versiones alpha de Tor.
- Nota: Esta configuración no garantiza que un tor instalado se actualice a la versión alpha.
- Esta configuración es compatible solo en Debian/Ubuntu/FreeBSD (se ignora en otras plataformas).
- valor por defecto: Falso
tor_nightly_builds
booleano- Establece en Verdadero si deseas usar el repositorio de compilaciones diarias de Tor de deb.torproject.org.
- las versiones diarias siguen la rama principal de git de tor.
- Solo se admite en Debian y Ubuntu (se ignora en otras plataformas).
- valor por defecto: Falso
tor_ExitRelay
booleano- Debes establecer esto en Verdadero si deseas habilitar la salida para todas o algunas instancias de tor en un servidor
- Si esta variable no es Verdadera, será un relé que no es de salida
- Si deseas ejecutar un servidor mixto (instancias de tor de salida y no salida), usa
tor_ExitRelaySetting_file
para la configuración por instancia además de esta variable - valor por defecto: Falso
tor_ExitRelaySetting_file
archivo- este es un archivo csv simple separado por comas almacenado en la máquina de control de Ansible que define la configuración
ExitRelay
para cada instancia de tor (en lugar de a nivel de servidor) - primera columna: identificador de la instancia (inventory_hostname-ip_orport)
- segunda columna: "exit" para instancias de tor de salida, cualquier otro valor (incluido vacío) para instancias de tor no de salida
- esta variable se ignora si tor_ExitRelay es Falso
- este es un archivo csv simple separado por comas almacenado en la máquina de control de Ansible que define la configuración
tor_RelayBandwidthRate_file
archivo- este es un archivo csv simple separado por comas almacenado en la máquina de control de Ansible que define la configuración
RelayBandwidthRate
para cada instancia de tor (en lugar de a nivel de servidor) - primera columna: identificador de la instancia (inventory_hostname-ip_orport)
- segunda columna: valor aceptado por
RelayBandwidthRate
(ver manual de tor)
- este es un archivo csv simple separado por comas almacenado en la máquina de control de Ansible que define la configuración
tor_RelayBandwidthBurst_file
archivo- este es un archivo csv simple separado por comas almacenado en la máquina de control de Ansible que define la configuración
RelayBandwidthBurst
para cada instancia de tor (en lugar de a nivel de servidor) - primera columna: identificador de la instancia (inventory_hostname-ip_orport)
- segunda columna: valor aceptado por
RelayBandwidthBurst
(ver manual de tor)
- este es un archivo csv simple separado por comas almacenado en la máquina de control de Ansible que define la configuración
tor_ExitNoticePage
booleano- especifica si mostramos la página html de aviso de salida predeterminada de tor html en el DirPort
- solo relevante si somos un relé de salida
- valor por defecto: Verdadero
tor_exit_notice_file
archivo- ruta a un archivo HTML en la máquina de control que te gustaría mostrar (a través del DirPort) en lugar de la tor-exit-notice.html proporcionada por el Proyecto Tor
- solo relevante si somos un relé de salida y si tor_ExitNoticePage es Verdadero
tor_AbuseEmailAddress
dirección de correo electrónico- si se establece, esta dirección de correo electrónico se utiliza en la página de aviso de salida de tor html publicada en el DirPort
- se te anima a configurarla si ejecutas una salida
- solo relevante si somos un relé de salida
- Nota: si usas tu propia plantilla personalizada de aviso de salida de tor, esta variable se ignorará si no la incluyes en tu plantilla.
- valor por defecto: no configurado
tor_ExitPolicy
array- especifica tu política de salida personalizada
- solo relevante si
tor_ExitRelay
es Verdadero - consulta defaults/main.yml para un ejemplo de cómo configurarla
- valor por defecto: política de salida reducida (https://trac.torproject.org/projects/tor/wiki/doc/ReducedExitPolicy)
tor_ExitPolicy_file
archivo- este es un archivo csv simple separado por punto y coma almacenado en la máquina de control de Ansible que define la configuración
ExitPolicy
para cada instancia de tor (en lugar de a nivel de servidor) - primera columna: identificador de la instancia (inventory_hostname-ip_orport)
- segunda columna: valor aceptado por
ExitPolicy
(ver manual de tor) - contenido de ejemplo: "myrelay-192.168.1.1_443;rechazar *:25,rechazar *:123"
- solo relevante si
tor_ExitRelay
es Verdadero - esto se puede combinar con la configuración
tor_ExitPolicy
y la reemplazará (esto es más específico) - solo se requieren las instancias de tor para las que deseas tener una política de salida específica en el archivo (el resto se pueden omitir)
- valor por defecto: no configurado
- este es un archivo csv simple separado por punto y coma almacenado en la máquina de control de Ansible que define la configuración
tor_maxPublicIPs
integer- Limita la cantidad de IPs públicas que usaremos para generar instancias en un solo host.
- Limita indirectamente la cantidad de instancias que generamos por host.
- valor por defecto: 1
tor_IPv6
booleano- autodetecta si tienes IPs de IPv6 y habilita un ORPort de IPv6 en consecuencia
- puedes optar por no hacerlo configurándolo como Falso
- valor por defecto: Verdadero
tor_IPv6Exit
booleano- habilita el tráfico de salida IPv6
- solo relevante si
tor_ExitRelay
ytor_IPv6
son Verdaderos y tenemos una dirección IPv6 - valor por defecto: Verdadero (a diferencia de la configuración predeterminada de tor)
tor_enableMetricsPort
booleano- si es Verdadero habilita el MetricsPort de tor en la dirección IP localhost 127.0.0.1 y permite que la misma IP acceda (MetricsPortPolicy)
- esta es una característica beta de relayor y cambiará en el futuro para usar la opción socket unix más segura una vez que esté disponible
- habilitar esta configuración desactiva automáticamente
OverloadStatistics
si no se habilita explícitamente (así que tor no publicará/subirá los datos a las autoridades del directorio porque usamos MetricsPort localmente) - valor por defecto: Falso
tor_prometheus_host
nombre del host- esta variable solo es relevante si
tor_enableMetricsPort
otor_blackbox_exporter_host
están configuradas - si deseas habilitar la integración de prometheus de relayor, debes establecer esta variable en tu host de prometheus
- define en qué host Ansible debe generar la configuración de scraping de prometheus para raspar el MetricsPort de tor
- este host debe estar disponible en el archivo del inventario de Ansible
- valor por defecto: indefinido (no se genera ninguna configuración de scrape)
- esta variable solo es relevante si
tor_prometheus_confd_folder
ruta de carpeta- solo relevante si deseas usar prometheus
- esta carpeta debe existir en
tor_prometheus_host
- relayor coloca las scrape_configs de prometheus en esta carpeta
- la sección de configuración global de prometheus debe estar en esta carpeta con el nombre 1_prometheus.yml
- ensamblamos todos los archivos en esa carpeta en orden de clasificación de cadenas en un solo archivo de salida prometheus.yml ya que prometheus no admite carpetas de estilo conf.d por defecto
- valor por defecto:
/etc/prometheus/conf.d
tor_prometheus_config_file
archivo- solo relevante si deseas usar prometheus
- esta variable define la ruta del archivo de configuración global de prometheus en
tor_prometheus_host
- hacemos una copia de seguridad del archivo en la misma carpeta antes de generar uno nuevo
- este es un archivo sensible desde el punto de vista de la seguridad, ya que contiene credenciales para el MetricsPort de tor
- propietario del archivo: root, grupo:
tor_prometheus_group
, permisos: 0640 - valor por defecto:
/etc/prometheus/prometheus.yml
tor_MetricsPort_offset
integer- define el MetricsPort TCP utilizado en la primera instancia de tor que se ejecuta en un host
- las instancias de tor adicionales usarán un número de puerto incrementado 33301, 33302, ...
- así que si ejecutas N instancias en un host, los próximos N-1 puertos después de este puerto deben estar desocupados en 127.0.0.1 para que tor pueda usarlos para MetricsPort
- valor por defecto: 33300
tor_prometheus_scrape_file
nombre de archivo- solo relevante si se define
tor_prometheus_host
y se configurantor_enableMetricsPort
otor_blackbox_exporter_host
- define el nombre del archivo para los archivos de scrape_config por cada servidor en el servidor de prometheus dentro de la
tor_prometheus_confd_folder
- el nombre del archivo DEBE ser específico del host, ya que cada host tiene su propio archivo de configuración de scrape en el servidor prometheus para admitir la opción --limit del libro de jugadas de Ansible
- dependiendo de
tor_enableMetricsPort
ytor_blackbox_exporter_host
, los archivos de configuración de scrape contendrán trabajos de scrape para el MetricsPort de tor (detrás de un proxy inverso para TLS/autenticación básica) y/o trabajos de scrape para las pruebas de conexión TCP de ORPort/DirPort a través del blackbox exporter - el contenido del archivo es sensible (contiene credenciales de scraping) y obtendrá los siguientes permisos de archivo: 0640 (propietario: root, grupo:
tor_prometheus_group
) - los archivos de configuración de scrape generados se enriquecerán automáticamente con algunas etiquetas de prometheus útiles, dependiendo de la configuración de tu torrc, consulta la sección "Etiquetas de Prometheus" en este README
- valor por defecto:
tor_{{ ansible_fqdn }}.yml
- solo relevante si se define
tor_prometheus_group
string- solo relevante si deseas usar prometheus
- define el nombre del grupo utilizado para los permisos de archivo de prometheus (prometheus.yml, archivos de configuración de scrape, archivo de reglas de alerta)
- valor por defecto: prometheus
tor_prom_labels
diccionario- número arbitrario de pares de valor de etiquetas de prometheus
- se puede establecer a nivel por servidor, no a nivel por instancia
- para un ejemplo, consulta
defaults/main.yml
- valor por defecto: diccionario vacío
tor_blackbox_exporter_host
hostname:port- cuando se establece, relayor agrega la configuración de scraping necesaria para las pruebas de conexión TCP blackbox exporter en el archivo definido por
tor_prometheus_scrape_file
- monitoriza todos los ORPorts de relé y, cuando se establece, los DirPorts en IPv4 e IPv6 (si están habilitados) utilizando una verificación de conexión TCP
- esta característica no se admite en relés detrás de NAT
- define dónde encuentra prometheus el blackbox exporter, también puede ejecutarse en el propio servidor prometheus, en ese caso sería 127.0.0.1:9115
- el host se escribe en la configuración de scraping prometheus resultante
- el blackbox_exporter debe tener un módulo de tcp_probe simple denominado "tcp_connect" configurado
- relayor no instala ni configura blackbox_exporter
- valor por defecto: indefinido
- cuando se establece, relayor agrega la configuración de scraping necesaria para las pruebas de conexión TCP blackbox exporter en el archivo definido por
tor_blackbox_exporter_scheme
string- define el protocolo que prometheus utiliza para conectarse al blackbox exporter (http o https)
- valor por defecto: http
tor_blackbox_exporter_username
string- solo relevante cuando se establece
tor_blackbox_exporter_host
- permite definir el nombre de usuario si tu blackbox exporter requiere autenticación básica HTTP
- si no estableces un nombre de usuario, la configuración de scraping no incluirá credenciales de autenticación básica HTTP
- valor por defecto: indefinido (sin autenticación básica HTTP)
- solo relevante cuando se establece
tor_blackbox_exporter_password
string- solo relevante cuando se establece
tor_blackbox_exporter_host
- permite definir el nombre de usuario si tu blackbox exporter requiere autenticación básica HTTP
- el valor por defecto genera una cadena aleatoria de 20 caracteres utilizando la búsqueda de contraseñas de Ansible
- valor por defecto:
"{{ lookup('password', '~/.tor/prometheus/blackbox_exporter_password') }}"
- solo relevante cuando se establece
tor_metricsport_nginx_config_file
archivo- esta variable solo es relevante si
tor_enableMetricsPort
es Verdadero y se establecetor_prometheus_host
- define la ruta del archivo donde se almacenará la configuración del proxy inverso de nginx para MetricsPort en el relé
- este archivo debe incluirse en la configuración de tu servidor web en el relé para que MetricsPort sea accesible para el scraping remoto de prometheus
- la carpeta ya debe estar presente en el servidor (relayor no la crea)
- valor por defecto:
/etc/nginx/promexporters/tor_metricsports_relayor.conf
- esta variable solo es relevante si
tor_gen_prometheus_alert_rules
booleano- solo relevante cuando
tor_enableMetricsPort
está habilitado - establece en
Verdadero
si deseas generar reglas de alerta de prometheus en el servidor prometheus (tor_prometheus_host
) - la ubicación del archivo se define en
tor_prometheus_rules_file
- valor por defecto: falso (no se generan reglas)
- solo relevante cuando
tor_prometheus_rules_file
archivo- solo relevante cuando
tor_gen_prometheus_alert_rules
esVerdadero
- define dónde en el servidor prometheus (
tor_prometheus_host
) relayor generará el archivo de reglas (la carpeta debe estar presente) - el archivo debe estar en la carpeta que está incluida en tu configuración de prometheus (rule_files) y generalmente debe terminar en .rules
- relayor envía un conjunto predeterminado de reglas de alerta y también puedes agregar opcionalmente tus reglas de alerta personalizadas (a través de
tor_prometheus_custom_alert_rules
) - propietario/grupo de archivo: root, permisos de archivo: 0644
- valor por defecto:
/etc/prometheus/rules/ansible-relayor.rules
- solo relevante cuando
tor_prometheus_alert_rules
diccionario- define las reglas de alerta de prometheus
- las reglas se validan automáticamente utilizando promtool
- consulta
defaults/main.yml
para las reglas predeterminadas
tor_prometheus_custom_alert_rules
diccionario- si deseas agregar tus propias reglas definidas por el usuario, agrégalas a este diccionario, espera el mismo formato que en
tor_prometheus_alert_rules
- las reglas definidas en este diccionario también se escriben en
tor_prometheus_rules_file
- esto te permite aprovechar las nuevas reglas enviadas por nuevas versiones de relayor mientras mantienes tus reglas definidas por el usuario
- las reglas se validan automáticamente utilizando promtool
- valor por defecto: indefinido
- si deseas agregar tus propias reglas definidas por el usuario, agrégalas a este diccionario, espera el mismo formato que en
tor_gen_metricsport_htpasswd
booleano- esta variable solo es relevante si
tor_enableMetricsPort
es Verdadero - cuando esta variable se establece en Verdadero, creamos el archivo htpasswd que se puede usar por un servidor web en el relé para proteger el MetricsPort de Tor con autenticación básica HTTP
- el archivo será propiedad de root y será legible por el grupo del servidor web (www-data/www - dependiendo del sistema operativo)
- NO instalamos el servidor web, usa otro rol para eso.
- la contraseña se genera automáticamente y tiene 20 caracteres de longitud (cada servidor recibe una contraseña distinta)
- la ruta al archivo en el relé se define en
tor_metricsport_htpasswd_file
- la contraseña en texto plano se escribe en un archivo en la máquina de control de Ansible (ver
tor_prometheus_scrape_password_folder
) - valor por defecto: Verdadero
- esta variable solo es relevante si
tor_metricsport_htpasswd_file
archivo- solo relevante si
tor_enableMetricsPort
ytor_gen_metricsport_htpasswd
están configurados como Verdadero - define la ruta del archivo htpasswd (que contiene nombre de usuario y hash de contraseña) en el relé
- valor por defecto:
/etc/nginx/tor_metricsport_htpasswd
- solo relevante si
tor_prometheus_scrape_password_folder
ruta de carpeta- solo relevante si
tor_enableMetricsPort
es Verdadero - Ansible generará automáticamente una contraseña única y aleatoria de 20 caracteres por host (no por instancia de tor) para proteger el MetricsPort a través de nginx (autenticación http)
- esta variable define la carpeta donde Ansible almacenará las contraseñas en texto plano (búsqueda de contraseñas)
- los nombres de archivo dentro de esa carpeta coinciden con el nombre del host (inventory_hostname) y no se pueden configurar
- la variable debe contener una barra inclinada al final
/
- valor por defecto:
~/.tor/prometheus/scrape-passwords/
- solo relevante si
tor_prometheus_scrape_port
integer- define qué puerto de destino se utiliza para alcanzar el objetivo de scraping (
MetricsPort
) a través de nginx - valor por defecto: 443
- define qué puerto de destino se utiliza para alcanzar el objetivo de scraping (
tor_enableControlSocket
booleano- si es Verdadero crea un archivo ControlSocket para cada instancia de tor (es decir, para ser usado por nyx)
- el control de acceso depende de los permisos del sistema de archivos
- para dar acceso a un usuario al archivo de ControlSocket de una instancia de tor específica, debes agregar al usuario al grupo principal de la instancia de tor
- la ruta a los socket(s) de archivo es /var/run/tor-instances/instance-id/control
- esta configuración afecta a todas las instancias en un servidor dado
- no se admite configuración por instancia
- valor por defecto: Falso
tor_freebsd_somaxconn
integer- configura kern.ipc.somaxconn en FreeBSD
- por defecto aumentamos este valor a al menos 1024
- si el valor es más alto que eso no lo tocamos
tor_freebsd_nmbclusters
integer- configura kern.ipc.nmbclusters en FreeBSD
- por defecto aumentamos este valor a al menos 30000
- si el valor es más alto que eso no lo tocamos
tor_package_state
string- especifica cuál debería ser el estado del paquete de tor
- valores posibles: presente, último (no soportado en BSDs)
- Nota: Los metadatos del repositorio no se actualizan, por lo que establecer esto en último no te garantiza que realmente sea la última versión.
- valor por defecto: presente
tor_binary
string- nombre del binario de tor en la máquina de control utilizado para generar las claves fuera de línea
- si el binario de tor no se llama "tor" en tu máquina de control, debes cambiar el valor por defecto (por ejemplo, en estaciones de trabajo Whonix)
- valor por defecto: tor
Etiquetas de Prometheus
Cuando tor_enableMetricsPort
está habilitado, también poblamos las siguientes etiquetas de prometheus:
id
: identifica la instancia de tor por IP_ORPort. Valor de ejemplo: 198.51.100.10_9000relaytype
: el valor es "exit" o "nonexit" dependiendo detor_ExitRelay
tor_nickname
: cuando se definen apodos (tor_nicknamefile
otor_nickname
), esta etiqueta se añadeservice
: "torrelay"
Puedes añadir etiquetas adicionales de prometheus usando tor_prom_labels
.
Etiquetas de rol disponibles
Usar etiquetas de Ansible es opcional, pero te permite acelerar las ejecuciones de libros de jugadas si gestionas muchos servidores.
Hay etiquetas específicas para sistemas operativos:
- debian (incluye ubuntu)
- freebsd
- openbsd
Etiquetas orientadas a tareas:
- renewkey - se encarga de renovar las claves Ed25519 en línea únicamente (asume que las instancias de tor están completamente configuradas y en ejecución)
- install - instala tor pero no lo inicia ni habilita
- createdir - crea carpetas (vacías) solo en el host de Ansible, útil para migraciones
- promconfig - regenera configuraciones relacionadas con prometheus (configuración de scraping, blackbox exporter, nginx)
- reconfigure - regenera archivos de configuración (tor y promconfig) y recarga tor (requiere que las instancias de tor se hayan configurado previamente)
Así que si tienes una gran familia y estás a punto de agregar un host de OpenBSD, típicamente realizas dos pasos:
instala el nuevo servidor ejecutando solo contra el nuevo servidor (-l) y solo la etiqueta específica del sistema operativo (openbsd)
ansible-playbook yourplaybook.yml -l newserver --tags openbsd
luego reconfigura todos los servidores (MyFamily) ejecutando la etiqueta 'reconfigure' contra todos los servidores.
ansible-playbook yourplaybook.yml --tags reconfigure
Consideraciones de seguridad
Este rol de Ansible utiliza la función OfflineMasterKey de Tor sin requerir ninguna configuración manual.
La función de clave maestra fuera de línea expone solo una clave de firma temporal al relé (válida por 30 días por defecto). Esto permite recuperarse de una completa violación del servidor sin perder la reputación de un relé (sin necesidad de iniciar una nueva clave maestra permanente desde cero).
Cada instancia de Tor se ejecuta con un usuario distinto del sistema. Un usuario por instancia solo tiene acceso a sus propias claves (temporales), pero no a las de otras instancias. No confiamos completamente en cada relé de Tor que operamos (intentamos realizar validaciones de entrada cuando usamos datos proporcionados por relés en el host de Ansible o en otro relé).
Ten en cuenta que la máquina de control de Ansible almacena TODAS tus claves de relé (RSA y Ed25519) - aplica medidas de seguridad en consecuencia.
Si utilizas la integración de prometheus, la máquina de control de Ansible también almacenará todas tus credenciales de scraping de prometheus bajo ~/.tor/prometheus/
.
Rotar estas credenciales es muy fácil: simplemente puedes eliminar esa carpeta y ejecutar de nuevo el libro de jugadas de Ansible.
Cada host de servidor Tor obtiene su propio conjunto de credenciales prometheus, por lo que un host comprometido no debería permitirles raspar todos los demás hosts.
Pruebas de integración
Este rol de Ansible viene con un archivo .kitchen.yml, que se puede usar para probar relayor - utilizando diferentes configuraciones - contra máquinas virtuales Vagrant Virtualbox. Se utiliza principalmente para pruebas de desarrollo/integración (detecta regresiones), pero también puedes usarlo para familiarizarte con relayor en un entorno local de pruebas. Estos relés de Tor no se unirán a la red ya que solo se crean para fines de prueba.
La cocina descargará cajas de Vagrant de Vagrant cloud para crear máquinas virtuales de prueba.
Para comenzar, instala los paquetes de gemas requeridos:
gem install test-kitchen kitchen-ansiblepush kitchen-vagrant
Lista las instancias de prueba disponibles con kitchen list
.
Luego puedes ejecutar todas las pruebas o seleccionar instancias específicas, por ejemplo: kitchen test t-guard-debian-10
.
Ten en cuenta que para ejecutar pruebas, también necesitas Vagrant y VirtualBox.
Orígenes
https://github.com/david415/ansible-tor (cambiado significativamente desde entonces)
ansible-galaxy install nusenu.relayor