nusenu.relayor
ansible-relayor
这是一个针对Tor中继操作员的Ansible角色。 关于relayer的介绍可以在**这里**找到。
邮箱支持: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中继指南包含有关如何在Debian/Ubuntu和FreeBSD上启用自动软件更新的说明。
该Ansible角色不打算支持Tor桥接器。
Tor中继操作员的主要好处
- 自动化 - 不再需要手动设置任务
- 安全性:**离线Ed25519主密钥** 在Ansible主机上生成,从未暴露给中继
- 轻松的Ed25519签名密钥续订(默认有效期为30天 - 可配置)
- 安全性:隔离:每个Tor实例都使用独立的用户运行
- 自动使用IPv6 IP(如可用)
- 自动生成Tor实例(默认两个 - 可配置)
- 默认在基于Debian的系统上启用Tor的沙盒功能
- 在alpha/非alpha版本之间轻松选择(仅适用于Debian/Ubuntu/FreeBSD)
- 轻松恢复中继设置(Ansible主机默认成为所有密钥的备份位置)
- 通过单个布尔值轻松选择退出中继/非退出中继模式
- 通过Tor的DirPort自动部署tor退出通知HTML页面(仅在退出时)
- 自动管理MyFamily
- Prometheus集成(启用时)
- 自动生成Nginx反向代理配置以保护Tor的MetricsPort(在基本身份验证/HTTPS后面)
- 为MetricsPort自动生成Prometheus抓取配置
- 自动生成黑箱导出器抓取配置以监控ORPorts和DirPorts的可达性
- 提供Tor的Prometheus警报规则
安装
该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功能时)
- 必须在Prometheus服务器上安装promtool,并且必须在root用户的PATH中
支持的操作系统
- 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
有关更多示例,请参见playbook-examples文件夹。
已更改的torrc默认值
此角色将以下torrc选项的默认值更改为安全选项,但您仍可以通过tor_config
显式配置它们:
NoExec
0 -> 1Sandbox
0 -> 1(仅在Debian上)
角色变量
此处提到的所有变量都是可选的。
tor_ContactInfo
字符串- 设置中继的ContactInfo字段。
- 此设置是强制性的。
- 鼓励操作员使用ContactInfo信息共享规范发布有用的联系信息。
tor_signingkeylifetime_days
整数- 所有由relayer创建的Tor实例在OfflineMasterKey模式下运行
- 此设置定义Ed25519签名密钥的有效期(以天为单位)
- 间接定义您需要多频繁运行Ansible剧本,以确保您的中继密钥不会过期
- 在OfflineMasterKey模式下的Tor实例在其密钥/证书过期时会自动停止,因此这是一个关键设置!
- 较低的值(例如7)从安全角度来看更好,但需要更频繁地运行剧本
- 默认:30
tor_config
字典- 此字典包含torrc设置及其值,可用选项请参见tor手册中的“服务器选项”部分。
- 每个设置只能设置一次(无论Tor的手册页面如何说明)
- 此字典可以用于设置任何torrc选项,但不能设置以下选项:
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
字典- 此变量允许您
- 选择Tor的ORPort和DirPort
- 决定每个IP地址要运行多少个Tor实例(默认为2)- 确保不要超过每个IP地址的限制
- 通过将其设置为0来禁用DirPorts
- 提示:明智地选择ORPorts并永远不要再次更改它们,至少对于已经部署的,不更改已部署的更多是可以的。
- Tor的“自动”功能不受支持
- 默认:
- 实例1:ORPort 9000,DirPort 9001
- 实例2:ORPort 9100,DirPort 9101
- 此变量允许您
tor_offline_masterkey_dir
文件夹路径- 默认:~/.tor/offlinemasterkeys
- 定义在Ansible控制机上存储中继密钥(Ed25519和RSA)的路径
- 在该文件夹内,Ansible将为每个Tor实例创建一个子文件夹。
- 如果要将实例迁移到新服务器,请参见文档
- 注意:请勿手动更改这些Tor DataDirs中的文件或文件夹名称/内容
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
进行配置 - 文件名是硬编码到规范所需的名称,无法配置
- 默认:False
tor_ciiss_proof_folder
文件夹路径- 定义生成证明文件的输出文件夹
- 默认:~/.tor
tor_LogLevel
字符串- 设置Tor的LogLevel
- 默认:notice
tor_alpha
布尔值- 如果要使用Tor alpha版本发布,请将其设置为True。
- 注意:此设置不确保已安装的Tor会升级到alpha版本。
- 此设置仅在Debian/Ubuntu/FreeBSD上受支持(被其他平台忽略)。
- 默认:False
tor_nightly_builds
布尔值- 如果希望使用从deb.torproject.org获得的Tor夜间构建版本,请将其设置为True。
- 夜间构建遵循Tor git主分支。
- 仅在Debian和Ubuntu上受支持(在其他平台上被忽略)。
- 默认:False
tor_ExitRelay
布尔值- 如果要为服务器上的所有或某些Tor实例启用退出功能,必须将其设置为True
- 如果该变量不为True,则这将是一个非退出中继
- 如果要运行混合服务器(出口和非出口Tor实例),请额外使用
tor_ExitRelaySetting_file
进行每个实例的配置 - 默认:False
tor_ExitRelaySetting_file
文件路径- 这是一个简单的以逗号分隔的CSV文件,存储在Ansible控制机上,定义每个Tor实例的
ExitRelay
torrc设置(而不是服务器范围的) - 第一列:实例标识符(inventory_hostname-ip_orport)
- 第二列:“exit”表示出口Tor实例,任何其他值(包括空白)表示非出口Tor实例
- 如果tor_ExitRelay为False,则忽略此变量
- 这是一个简单的以逗号分隔的CSV文件,存储在Ansible控制机上,定义每个Tor实例的
tor_RelayBandwidthRate_file
文件路径- 这是一个简单的以逗号分隔的CSV文件,存储在Ansible控制机上,定义每个Tor实例的
RelayBandwidthRate
torrc设置(而不是服务器范围的) - 第一列:实例标识符(inventory_hostname-ip_orport)
- 第二列:由
RelayBandwidthRate
接受的值(请参见tor手册页面)
- 这是一个简单的以逗号分隔的CSV文件,存储在Ansible控制机上,定义每个Tor实例的
tor_RelayBandwidthBurst_file
文件路径- 这是一个简单的以逗号分隔的CSV文件,存储在Ansible控制机上,定义每个Tor实例的
RelayBandwidthBurst
torrc设置(而不是服务器范围的) - 第一列:实例标识符(inventory_hostname-ip_orport)
- 第二列:由
RelayBandwidthBurst
接受的值(请参见tor手册页面)
- 这是一个简单的以逗号分隔的CSV文件,存储在Ansible控制机上,定义每个Tor实例的
tor_ExitNoticePage
布尔值- 指定我们是否在DirPort上显示默认的tor退出通知html页面
- 仅在我们是出口中继时相关
- 默认:True
tor_exit_notice_file
文件路径- 控制机器上一个HTML文件的路径,您希望在DirPort上显示(而不是Tor项目提供的默认tor-exit-notice.html)
- 仅在我们是出口中继且tor_ExitNoticePage为True时相关
tor_AbuseEmailAddress
邮箱地址- 如果设置该邮箱地址将用于在DirPort上发布的tor退出通知html页面
- 如果您运行出口中继,建议设置它
- 仅在我们是出口中继时相关
- 注意:如果您使用自己的自定义tor-exit-notice模板,这个变量将被忽略,如果您没有在模板中包含它。
- 默认:未设置
tor_ExitPolicy
数组- 指定您的自定义退出政策
- 仅在
tor_ExitRelay
为True时相关 - 请参见defaults/main.yml,了解如何设置的示例
- 默认:减少的退出政策(https://trac.torproject.org/projects/tor/wiki/doc/ReducedExitPolicy)
tor_ExitPolicy_file
文件路径- 这是一个简单的以分号分隔的CSV文件,存储在Ansible控制机上,定义每个Tor实例的
ExitPolicy
torrc设置(而不是服务器范围的) - 第一列:实例标识符(inventory_hostname-ip_orport)
- 第二列:由
ExitPolicy
接受的值(请参见tor手册页面) - 示例内容:“myrelay-192.168.1.1_443;reject *:25,reject *:123”
- 仅在
tor_ExitRelay
为True时相关 - 这可以与
tor_ExitPolicy
设置结合使用并将其覆盖(这更具体) - 仅要求列出您想要特定退出政策的Tor实例(其他可以省略)
- 默认:未设置
- 这是一个简单的以分号分隔的CSV文件,存储在Ansible控制机上,定义每个Tor实例的
tor_maxPublicIPs
整数- 限制我们将在单个主机上用于生成实例的公共IP数量。
- 间接限制我们每个主机生成的实例数量。
- 默认:1
tor_IPv6
布尔值- 自动检测是否有IPv6 IP并相应启用IPv6 ORPort
- 您可以通过将其设置为False来选择退出
- 默认:True
tor_IPv6Exit
布尔值- 启用IPv6出口流量
- 仅在
tor_ExitRelay
和tor_IPv6
都为True并且我们有IPv6地址时相关 - 默认:True(不同于Tor的默认值)
tor_enableMetricsPort
布尔值- 如果为True,则在本地主机IP地址127.0.0.1上启用Tor的MetricsPort,并允许相同IP访问(MetricsPortPolicy)
- 这是一个relator beta功能,将在将来更改为使用更安全的unix套接字选项,一旦可用
- 启用此设置会自动禁用
OverloadStatistics
,如果未明确启用(因此Tor将不向目录权威机构发布/上传数据,因为我们在本地使用MetricsPort) - 默认:False
tor_prometheus_host
主机名- 仅在
tor_enableMetricsPort
或tor_blackbox_exporter_host
被设置时相关 - 如果要启用relator的Prometheus集成,则必须将此变量设置为您的Prometheus主机
- 名称定义了Ansible应在哪个主机上生成Prometheus抓取配置,以抓取Tor的MetricsPort
- 此主机必须在Ansible的清单文件中可用
- 默认:未定义(不生成抓取配置)
- 仅在
tor_prometheus_confd_folder
文件夹路径- 仅在您想使用Prometheus时相关
- 此文件夹必须存在于
tor_prometheus_host
上 - relator将在此文件夹中放置Prometheus抓取配置
- Prometheus全局配置部分应在这个文件夹中命名为1_prometheus.yml
- 我们将该文件夹中的所有文件按字符串排序的顺序组合成一个单独的prometheus.yml输出文件,因为Prometheus不支持conf.d样式的文件夹
- 默认:
/etc/prometheus/conf.d
tor_prometheus_config_file
文件路径- 仅在您想使用Prometheus时相关
- 此变量定义了在
tor_prometheus_host
上的全局Prometheus配置文件的路径 - 在生成新文件之前,我们在相同的文件夹中备份该文件
- 这是一个安全敏感的文件,因为它包含Tor MetricsPort的凭据
- 文件所有者:root,组:
tor_prometheus_group
,权限:0640 - 默认:
/etc/prometheus/prometheus.yml
tor_MetricsPort_offset
整数- 定义在主机上运行的第一个Tor实例使用的TCP MetricsPort
- 额外的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
时相关 - 定义在Prometheus服务器的
tor_prometheus_confd_folder
中的每台服务器的scrape_config文件的文件名 - 文件名必须是主机特定的,每个主机都有自己在Prometheus服务器上的抓取配置文件,以支持ansible-playbook的
--limit
CLI选项 - 根据
tor_enableMetricsPort
和tor_blackbox_exporter_host
,抓取配置文件将包含Tor的MetricsPort(通过TLS/基本身份验证的反向代理)和/或ORPort/DirPort TCP探测的抓取作业 - 文件内容敏感(包含抓取凭据),文件权限为0640(所有者:root,组:
tor_prometheus_group
) - 生成的抓取配置文件将根据您的torrc设置自动添加一些有用的Prometheus标签,详见本README中的“Prometheus标签”部分
- 默认:
tor_{{ ansible_fqdn }}.yml
- 仅在定义了
tor_prometheus_group
字符串- 仅在您想使用Prometheus时相关
- 定义Prometheus文件权限(prometheus.yml、抓取配置文件、警报规则文件)使用的组名
- 默认:prometheus
tor_prom_labels
字典- 任意数量的Prometheus标签值对
- 可以在每台服务器级别设置,而不是在每个实例级别
- 有关示例,请参见
defaults/main.yml
- 默认:空字典
tor_blackbox_exporter_host
主机名:端口- 设置时,relator将添加必要的Prometheus抓取配置,以用于黑箱导出器TCP探测,文件由
tor_prometheus_scrape_file
定义 - 使用TCP连接检查监控所有中继ORPorts和设置的DirPorts(IPv4和IPv6)(如果启用)
- 此功能不支持在NAT后面的中继
- 定义Prometheus在何处找到黑箱导出器,它也可以在Prometheus服务器本身上运行,在这种情况下,它将是127.0.0.1:9115
- 主机名称写入生成的Prometheus抓取配置
- blackbox_exporter必须配置简单的tcp_probe模块,名为“tcp_connect”
- relator不安装或配置blackbox_exporter
- 默认:未定义
- 设置时,relator将添加必要的Prometheus抓取配置,以用于黑箱导出器TCP探测,文件由
tor_blackbox_exporter_scheme
字符串- 定义Prometheus连接黑箱导出器所使用的协议(http或https)
- 默认:http
tor_blackbox_exporter_username
字符串- 仅在
tor_blackbox_exporter_host
被设置时相关 - 允许您定义用户名(如果您的黑箱导出器需要HTTP基本身份验证)
- 如果您不设置用户名,抓取配置将不包含HTTP基本身份验证凭据
- 默认:未定义(无HTTP基本身份验证)
- 仅在
tor_blackbox_exporter_password
字符串- 仅在
tor_blackbox_exporter_host
被设置时相关 - 允许您设置密码(如果您的黑箱导出器需要HTTP基本身份验证)
- 默认生成一个20个字符的随机字符串,使用Ansible密码查找
- 默认:
"{{ lookup('password', '~/.tor/prometheus/blackbox_exporter_password') }}"
- 仅在
tor_metricsport_nginx_config_file
文件路径- 仅在
tor_enableMetricsPort
为True且设置了tor_prometheus_host
时相关 - 定义MetricsPort Nginx反向代理配置在中继上的文件路径
- 该文件必须包含在中继的web服务器配置中,以使MetricsPort可供远程Prometheus抓取
- 必须在服务器上已存在该文件夹(relator不会创建它)
- 默认:
/etc/nginx/promexporters/tor_metricsports_relayor.conf
- 仅在
tor_gen_prometheus_alert_rules
布尔值- 仅在启用
tor_enableMetricsPort
时相关 - 如果要在Prometheus服务器(
tor_prometheus_host
)上生成Prometheus警报规则,请将其设置为True
- 文件位置由
tor_prometheus_rules_file
定义 - 默认:false(不生成规则)
- 仅在启用
tor_prometheus_rules_file
文件路径- 仅在
tor_gen_prometheus_alert_rules
为True时相关 - 定义在Prometheus服务器(
tor_prometheus_host
)上,relator将生成规则文件的路径(该文件夹必须存在) - 文件必须在包含您Prometheus配置(rule_files)的文件夹中,通常要求以.rules结尾
- relator提供一组默认的警报规则,您也可以选择添加自定义的警报规则(通过
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
- 这允许您在保持用户自定义规则的同时利用新relator版本提供的新规则
- 通过promtool自动验证规则
- 默认:未定义
- 如果要添加用户自定义规则,请将其添加到此字典中,它期待与
tor_gen_metricsport_htpasswd
布尔值- 此变量仅在
tor_enableMetricsPort
为True时相关 - 当此变量设置为True时,我们创建可以由中继上的web服务器使用的htpasswd文件,用于通过HTTP基本身份验证保护Tor的MetricsPort
- 文件将由root拥有,并可被web服务器的组读取(www-data/www - 根据操作系统而定)
- 我们不安装web服务器,可以使用另一个角色来实现。
- 密码是自动生成的,长度为20个字符(每台服务器获得一个不同的密码)
- 中继上的文件路径由
tor_metricsport_htpasswd_file
定义 - 明文密码写入Ansible控制机器上的文件(参见
tor_prometheus_scrape_password_folder
) - 默认:True
- 此变量仅在
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将为每个主机(而不是每个tor实例)自动生成一个唯一的、随机的20字符密码,以通过nginx(http身份验证)保护MetricsPort
- 此变量定义Ansible将在明文中存储密码的文件夹(密码查找)
- 该文件夹内的文件名与主机名(inventory_hostname)匹配,无法配置
- 该变量必须包含一个尾随的/
- 默认:
~/.tor/prometheus/scrape-passwords/
- 仅在
tor_prometheus_scrape_port
整数- 定义到达抓取目标(
MetricsPort
)的目标端口 - 默认:443
- 定义到达抓取目标(
tor_enableControlSocket
布尔值- 如果为True,则为每个Tor实例创建控制套接字文件(即用于nyx)
- 访问控制依靠文件系统权限
- 要授权用户访问特定Tor实例的control_socket文件,您必须将用户添加到该Tor实例的主组
- 套接字文件的路径为/var/run/tor-instances/instance-id/control
- 此设置影响给定服务器上的所有实例
- 不支持逐实例配置
- 默认:False
tor_freebsd_somaxconn
整数- 配置FreeBSD上的kern.ipc.somaxconn
- 默认我们将该值增加到至少1024
- 如果值高于该值,则不进行更改
tor_freebsd_nmbclusters
整数- 配置FreeBSD上的kern.ipc.nmbclusters
- 默认我们将该值增加到至少30000
- 如果值高于该值,则不进行更改
tor_package_state
字符串- 指定Tor软件包应该具有的包状态
- 可能的值:present, latest(在BSD上不支持)
- 注意:存储库元数据不会更新,因此将其设置为latest并不能保证它实际上是最新版本。
- 默认:present
tor_binary
字符串- 用于生成离线密钥的控制机上Tor二进制文件的名称
- 如果您的控制机器上的Tor二进制文件不是“tor”命名,则必须更改默认值(例如在Whonix工作站上)
- 默认:tor
Prometheus标签
当启用tor_enableMetricsPort
时,我们还填充以下Prometheus标签:
id
:通过IP_ORPort识别Tor实例。示例值:198.51.100.10_9000relaytype
:根据tor_ExitRelay
的值为“exit”或“nonexit”tor_nickname
:当定义昵称时(tor_nicknamefile
或tor_nickname
),会添加此标签service
:“torrelay”
您可以使用tor_prom_labels
添加额外的Prometheus标签。
可用角色标签
使用Ansible标签是可选的,但可以加快剧本运行速度,特别是在您管理多个服务器时。
有特定于操作系统的标签:
- debian(包括ubuntu)
- freebsd
- openbsd
任务导向标签:
- renewkey - 仅处理在线Ed25519密钥的续订(假设Tor实例已完全配置并正在运行)
- install - 安装Tor,但不启动或启用它
- createdir - 仅在Ansible主机上创建(空)目录,适用于迁移
- promconfig - 重新生成与Prometheus相关的配置(抓取配置、黑箱导出器、Nginx)
- reconfigure - 重新生成配置文件(Tor和Prometheus配置)并重新加载Tor(需要以前配置的Tor实例)
因此,如果您有一个大家庭,并且要添加一个OpenBSD主机,您通常会进行两个步骤
通过仅对新服务器运行(-l)和仅操作系统特定标签(openbsd)来安装新服务器
ansible-playbook yourplaybook.yml -l newserver --tags openbsd
然后通过对所有服务器运行'reconfigure'标签,重新配置所有服务器(MyFamily)。
ansible-playbook yourplaybook.yml --tags reconfigure
安全考虑
该Ansible角色利用Tor的OfflineMasterKey功能,而无需任何手动配置。
离线主密钥功能仅向中继暴露一个临时签名密钥(默认有效期为30天)。 这使得在服务器完全被攻破的情况下恢复,而不丧失中继的信誉(无需从头启动新的永久主密钥)。
每个Tor实例使用独立的系统用户运行。每个实例的用户仅可以访问自己的(临时)密钥,而无法访问其他实例的密钥。 我们并不最终信任所操作的每个Tor中继(在使用提供的数据时,我们尽量进行输入验证)。
请注意,Ansible控制机器存储您的所有中继密钥(RSA和Ed25519)- 请相应采取安全措施。
如果您使用Prometheus集成,Ansible控制机还将存储您的所有Prometheus抓取凭据,存储在~/.tor/prometheus/
下。
轮换这些凭据非常简单:您只需删除该文件夹,然后再次运行Ansible剧本。
每个Tor服务器主机都有自己的Prometheus凭据集,因此被攻陷的主机不应允许其抓取所有其他主机。
集成测试
该Ansible角色带有一个.kitchen.yml文件,可以用于测试relayer - 使用不同的配置 - 对Vagrant Virtualbox机器进行测试。 它主要用于开发/集成测试(找出回归错误),但您也可以在这样的本地沙盒环境中熟悉relayer。 这些Tor中继不会加入网络,因为它们仅为测试目的而创建。
kitchen将从Vagrant云下载Vagrant箱以创建测试虚拟机。
要开始,请安装所需的gem包:
gem install test-kitchen kitchen-ansiblepush kitchen-vagrant
使用kitchen list
列出可用的测试实例。
然后您可以运行所有测试或仅选择特定实例,例如:kitchen test t-guard-debian-10
。
请注意,要运行测试,您还需要Vagrant和VirtualBox。