nusenu.relayor
ansible-relayor
これは、TorリレーオペレーターのためのAnsibleロールです。 relayorの詳細な紹介は**こちら**で確認できます。
サポート用メール: relayor-support AT riseup.net
このロールの主な目的は、Torリレーオペレーターのために、可能な限り多くの手順を自動化することです。これには、鍵の管理(OfflineMasterKey)が含まれます。 新しいTorサーバーのデプロイは、インベントリに新しいホストを追加するだけで簡単に行え、さらに手動での設定は不要です。
このロールは、現在の設定と変数に基づいてTorインスタンスのみを管理します。プレイブックを完了した後に設定を変更して、たとえば tor_maxPublicIPs
の値を減少させ、Torインスタンスの数を減らす場合、このロールはサーバーから以前に設定されたTorインスタンスを削除しません。サーバー上のTorインスタンスは、そのIPv4とORPortの組み合わせによって識別されます。初回の展開後にORPort(tor_ports
変数を使用)を変更すると、実際には新しくTorインスタンスを作成することになります(既存のインスタンスを変更するのではありません)。このため、初回の展開後に tor_ports
の変更を避ける必要があります。
Torパッケージの更新を維持すること(リレーを運営するための重要なタスク)は、このAnsibleロールの対象には含まれていません。OSがサポートしている場合は、自動更新を有効にしてリレーを適切に管理することをお勧めします。 Torリレーガイドには、Debian/UbuntuやFreeBSD向けの自動ソフトウェア更新を有効にする方法が記載されています。
このAnsibleロールは、Torブリッジをサポートすることを目的としていません。
Torリレーオペレーターの主な利点
- 自動化 - 手動での設定作業は不要
- セキュリティ: オフラインEd25519マスタキー はAnsibleホストで生成され、リレーにさらされることはありません
- 簡単なEd25519署名キーの更新(デフォルトでは30日有効 - 構成可能)
- セキュリティ: 区分管理: 各Torインスタンスは異なるユーザーで実行されます
- 自動的にIPv6 IPを利用します(利用可能な場合)
- 自動のTorインスタンス生成(デフォルトで2 - 構成可能)
- DebianベースのシステムではデフォルトでTorのサンドボックス機能を有効に
- アルファ/ノンアルファリリースから簡単に選択(Debian/Ubuntu/FreeBSDのみ)
- リレー設定の復元が簡単(Ansibleホストがすべてのキーのバックアップ場所になります)
- 単一のブール値で出口リレー/非出口リレーのモードを簡単に選択
- TorのDirPortを介して自動で出口通知HTMLページを配信(出口のみ)
- MyFamilyの自動管理
- Prometheus統合(有効な場合)
- nginxリバースプロキシ設定の自動生成でTorのMetricsPortを保護(基本認証/HTTPSの背後で)
- MetricsPort用のprometheusスクレイプ設定の自動生成
- ORPortとDirPortの可用性を監視するためのblackbox-exporterスクレイプ設定の自動生成
- 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
整数- relayorによって作成されたすべてのTorインスタンスはOfflineMasterKeyモードで実行されます
- この設定は、Ed25519署名キーの有効期限を日数で定義します
- リレーキーが失効しないように、どのくらいの頻度でansibleプレイブックを実行する必要があるかを暗に定義します
- OfflineMasterKeyモードのTorインスタンスは、そのキー/証明書が失効すると自動的に停止しますので、これは重要な設定です!
- より低い値(例:7)はセキュリティの観点で有利ですが、より頻繁にプレイブックを実行する必要があります
- デフォルト: 30
tor_config
辞書- この辞書にはtorrcの設定とその値が含まれます。利用可能なオプションは、Torのマニュアルの「サーバーオプション」セクションで確認できます。
- 各設定は1回だけ設定できます(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を選択
- 1つのIPアドレスあたりのTorインスタンスの数を決定します(デフォルトは2) - 許可されている数を超えて実行しないようにしてください
- DirPortsを0に設定することで無効にできます
- ヒント: ORPortsは賢く選択し、決して再度変更しないでください。既にデプロイされたものを変更するのは避け、新しいものを追加することは問題ありません。
- Torの'auto'機能はサポートされていません
- デフォルト:
- インスタンス1: ORPort 9000, DirPort 9001
- インスタンス2: ORPort 9100, DirPort 9101
- この変数を使用して
tor_offline_masterkey_dir
フォルダパス- デフォルト: ~/.tor/offlinemasterkeys
- Ansibleコントロールマシン上でリレーキー(Ed25519とRSA)を保存する場所を定義します
- そのフォルダ内にAnsibleは各Torインスタンスについてサブフォルダを作成します。
- インスタンスを新しいサーバーに移行したい場合は、ドキュメンテーションを参照してください
- 注意: これらのTor DataDir内のファイルやフォルダ名/内容を手動で変更しないでください
tor_nickname
文字列- Torインスタンスが使用するニックネームを定義します
- ホスト上のすべてのTorインスタンスは同じニックネームを取得します
- サーバーのホスト名をニックネームとして使用するには、{{ ansible_hostname }}に設定します
- 非アルファナム文字は自動的に削除され、19文字を超えるニックネームはTorのニックネーム要件を満たすために切り捨てられます
- tor_nicknamefileがこの設定を上書きします
- デフォルト: なし
tor_nicknamefile
ファイルパス- これは、Ansibleコントロールマシンに保存されたニックネームを指定する単純なカンマ区切りのCSVファイルです
- 最初の列: インスタンス識別子(inventory_hostname-ip_orport)
- 2列目: ニックネーム
- 1行につき1インスタンス
- すべてのインスタンスはCSVファイルに存在する必要があります
- 非アルファナム文字は自動的に削除され、19文字を超えるニックネームはTorのニックネーム要件を満たすために切り捨てられます
- デフォルト: 設定されていません
tor_gen_ciiss_proof_files
ブール- ContactInfo仕様に基づいて公開するためのRSAフィンガープリントとEd25519マスターパブリックキーの証明ファイルをコントロールマシンで生成します
- デフォルトパスは: ~/.tor/rsa-fingerprint.txtと ~/.tor/ed25519-master-pubkey.txtです
- これらのファイルが存在する場合は上書きされます
- 出力フォルダの位置は
tor_ciiss_proof_folder
変数を使用して構成できます - ファイル名は仕様で要求されたものにハードコーディングされており、構成できません
- デフォルト: 偽
tor_ciiss_proof_folder
フォルダパス- 生成された証明ファイルの出力フォルダを定義します
- デフォルト: ~/.tor
tor_LogLevel
文字列- TorのLogLevelを設定します
- デフォルト: notice
tor_alpha
ブール- Torのアルファ版リリースを使用したい場合はTrueに設定します。
- 注意: この設定が設定されていても、インストールされたTorがアルファリリースにアップグレードされることは保証されません。
- この設定はDebian/Ubuntu/FreeBSDでのみサポートされ、他のプラットフォームでは無視されます。
- デフォルト: 偽
tor_nightly_builds
ブール- Torのナイトリービルドリポジトリ(deb.torproject.org)を使用したい場合はTrueに設定します。
- ナイトリービルドはTorのGitメインブランチをフォローします。
- DebianおよびUbuntuでのみサポートされています(他のプラットフォームでは無視されます)。
- デフォルト: 偽
tor_ExitRelay
ブール- サーバー上のすべてまたは一部のTorインスタンスでの出口を有効にしたい場合はTrueに設定する必要があります。
- この変数がTrueでない場合、これは非出口リレーになります
- 混在したサーバー(出口および非出口のTorインスタンス)を実行したい場合は、この変数に加えて
tor_ExitRelaySetting_file
を使用してインスタンスごとの設定を行います - デフォルト: 偽
tor_ExitRelaySetting_file
ファイルパス- これは、各Torインスタンスのための
ExitRelay
torrc設定を定義するAnsibleコントロールマシンに保存された単純なカンマ区切りCSVファイルです(サーバー全体ではなく) - 最初の列: インスタンス識別子(inventory_hostname-ip_orport)
- 2列目: 出口Torインスタンスの場合は"exit"、非出口Torインスタンスの場合は他のすべての値(空含む)
- tor_ExitRelayがFalseの場合、この変数は無視されます
- これは、各Torインスタンスのための
tor_RelayBandwidthRate_file
ファイルパス- これは、各Torインスタンスのための
RelayBandwidthRate
torrc設定を定義するAnsibleコントロールマシンに保存された単純なカンマ区切りCSVファイルです(サーバー全体ではなく) - 最初の列: インスタンス識別子(inventory_hostname-ip_orport)
- 2列目:
RelayBandwidthRate
に受け入れられる値(Torのマニュアルページを参照)
- これは、各Torインスタンスのための
tor_RelayBandwidthBurst_file
ファイルパス- これは、各Torインスタンスのための
RelayBandwidthBurst
torrc設定を定義するAnsibleコントロールマシンに保存された単純なカンマ区切りCSVファイルです(サーバー全体ではなく) - 最初の列: インスタンス識別子(inventory_hostname-ip_orport)
- 2列目:
RelayBandwidthBurst
に受け入れられる値(Torのマニュアルページを参照)
- これは、各Torインスタンスのための
tor_ExitNoticePage
ブール- DirPortでデフォルトのTor出口通知HTMLページを表示するかどうかを指定します
- 出口リレーの場合にのみ関連します
- デフォルト: 真
tor_exit_notice_file
ファイルパス- DirPortを介して表示したいHTML fileのパスです、デフォルトの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
ファイルパス- これは、各Torインスタンスのための
ExitPolicy
torrc設定を定義するAnsibleコントロールマシンに保存された単純なセミコロン区切りCSVファイルです(サーバー全体ではなく) - 最初の列: インスタンス識別子(inventory_hostname-ip_orport)
- 2列目:
ExitPolicy
に受け入れられる値(Torのマニュアルページを参照) - 例: "myrelay-192.168.1.1_443;reject *:25,reject *:123"
tor_ExitRelay
がTrueの場合にのみ関連しますtor_ExitPolicy
設定と組み合わせることができ、これを上書きします(より具体的です)- 特定の出口ポリシーを持たせたいTorインスタンスのみファイルにリストする必要があります(他は省略可能)
- デフォルト: 設定されていません
- これは、各Torインスタンスのための
tor_maxPublicIPs
整数- 単一ホストでインスタンスを生成するために使用する公共IPの数を制限します。
- やがてインスタンスを生成するホストの数を制限します。
- デフォルト: 1
tor_IPv6
ブール- IPv6 IPがあるかどうかを自動検出し、対応するIPv6 ORPortを有効にします
- 偽に設定することでオプトアウトできます
- デフォルト: 真
tor_IPv6Exit
ブール- IPv6の出口トラフィックを有効にします
tor_ExitRelay
とtor_IPv6
がTrueで、IPv6アドレスも持っている場合のみ関連します- デフォルト: 真(Torのデフォルトとは異なります)
tor_enableMetricsPort
ブール- Trueの場合、ローカルホストIPアドレス127.0.0.1でTorのMetricsPortを有効にし、同じIPがアクセスできるようにします(MetricsPortPolicy)
- これはリレーターのベータ機能で、将来的にユニックスソケットオプションを使用するように変更されます。
- この設定を有効にすると、明示的に設定されていない限り
OverloadStatistics
が自動的に無効になります(MetricsPortをローカルにさわるからです) - デフォルト: 偽
tor_prometheus_host
ホスト名- この変数は
tor_enableMetricsPort
またはtor_blackbox_exporter_host
が設定されている場合のみ関連します - リレーターのPrometheus統合を有効にする場合は、この変数をPrometheusホストに設定する必要があります
- AnsibleがPrometheusのMetricsPortからスクレイプ構成を生成するホストを定義します
- このホストはAnsibleのインベントリファイルで利用可能である必要があります
- デフォルト: 未定義(スクレイプ構成は生成されません)
- この変数は
tor_prometheus_confd_folder
フォルダパス- Prometheusを使用する場合のみ関連します
- このフォルダは
tor_prometheus_host
上に存在する必要があります - リレーターがこのフォルダ内に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ポートが必要です(TorがMetricsPortで使用できるように)
- デフォルト: 33300
tor_prometheus_scrape_file
ファイル名tor_prometheus_host
が定義され、tor_enableMetricsPort
またはtor_blackbox_exporter_host
が設定されている場合のみ関連します- Prometheusサーバー内の各サーバーのscrape_configファイルのファイル名を定義します
- ファイル名はホスト固有である必要があります。各ホストには、Ansibleプレイブックの
--limit
CLIオプションをサポートするためにPrometheusサーバー上に独自のスクレイプ構成ファイルがあります tor_enableMetricsPort
とtor_blackbox_exporter_host
に応じて、スクレイプ構成ファイルにはTorのMetricsPortのためのスクレイプジョブ(TLS/基本認証の背後にあるリバースプロキシ)またはORPort/DirPort TCPプローブ用のブラックボックスエクスポータのスクレイプジョブが含まれます- ファイルの内容は機密情報であり、ファイルのパーミッションは0640(所有者: root, グループ:
tor_prometheus_group
)です - 生成されたスクレイプ構成ファイルには、Torの設定に基づいていくつかの便利な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
ホスト名:ポート- 設定された場合、リレーターは
tor_prometheus_scrape_file
で定義されたファイルにブラックボックスエクスポータのTCPプローブのための必要なPrometheusのスクレイプ構成を追加します - すべてのリレーORPort、および設定されている場合はIPv4およびIPv6のDirPortsの可達性をTCP接続チェックで監視します
- この機能は、NATの後ろにあるリレーではサポートされていません
- Prometheusがブラックボックスエクスポータを見つける場所を定義し、Prometheusサーバー自体上で実行される場合があります。その場合は127.0.0.1:9115になります
- 結果として得られるPrometheusスクレイプ構成にホストが書き込まれます
- blackbox_exporterは、シンプルなtcp_probeモジュール「tcp_connect」を設定する必要があります
- リレーターはblackbox_exporterをインストールまたは設定しません
- デフォルト: 未定義
- 設定された場合、リレーターは
tor_blackbox_exporter_scheme
文字列- Prometheusがブラックボックスエクスポータに接続するためのプロトコルを定義します(httpまたはhttps)
- デフォルト: http
tor_blackbox_exporter_username
文字列tor_blackbox_exporter_host
が設定されている場合のみ関連します- BlackboxエクスポータがHTTP基本認証を必要とする場合は、ユーザー名を定義できます
- ユーザー名を設定しない場合、スクレイプ構成にはHTTP基本認証の資格情報が含まれません
- デフォルト: 未定義(HTTP基本認証なし)
tor_blackbox_exporter_password
文字列tor_blackbox_exporter_host
が設定されている場合のみ関連します- BlackboxエクスポータがHTTP基本認証を必要とする場合は、ユーザー名を定義できます
- デフォルトでは、Ansibleのパスワードルックアップを使用して20文字のランダムな文字列が生成されます
- デフォルト:
"{{ lookup('password', '~/.tor/prometheus/blackbox_exporter_password') }}"
tor_metricsport_nginx_config_file
ファイルパスtor_enableMetricsPort
がTrueでtor_prometheus_host
が設定されている場合のみ関連します- MetricsPortのためのnginxリバースプロキシ設定がリレーに保存されるファイルパスを定義します
- このファイルは、MetricsPortをリモートPrometheusからのスクレイプ可能にするために、リレーのウェブサーバー設定に含める必要があります
- フォルダはすでにサーバーに存在している必要があります(リレーターはこれを作成しません)
- デフォルト:
/etc/nginx/promexporters/tor_metricsports_relayor.conf
tor_gen_prometheus_alert_rules
ブールtor_enableMetricsPort
が有効な場合のみ関連します- Prometheusサーバー(
tor_prometheus_host
)上でPrometheusアラートルールを生成したい場合はTrueに設定します - ファイルの場所は
tor_prometheus_rules_file
で定義されています - デフォルト: 偽(ルールは生成されません)
tor_prometheus_rules_file
ファイルパスtor_gen_prometheus_alert_rules
がTrueの場合のみ関連します- リレーターがルールファイルを生成する
tor_prometheus_host
上の場所を定義します(フォルダは存在している必要があります) - このファイルは、あなたのPrometheus設定に含まれる必要があります(rule_files)で、通常は.rulesで終わる必要があります
- リレーターはデフォルトのアラートルールセットを提供し、独自のアラートルールを追加することもオプションとしてできます(
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
にも書き込まれます - これにより、新しいリレーターのバージョンによって提供される新しいルールを利用しつつ、ユーザー定義のルールを維持できます
- ルールは自動的にpromtoolを使用して検証されます
- デフォルト: 未定義
- ユーザー定義のルールを追加する場合は、この辞書に追加します。
tor_gen_metricsport_htpasswd
ブールtor_enableMetricsPort
がTrueの場合のみ関連します- この変数がTrueに設定されている場合、リレーのMetricsPortをHTTP基本認証で保護するために使用できるhtpasswdファイルが作成されます
- このファイルはrootによって所有され、ウェブサーバーのグループ(www-data/www - OSに応じて)から読み取れるはずです
- ウェブサーバーをインストールしませんので、別のロールを使用してください。
- パスワードは自動的に生成され、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は、MetricsPortをnginx経由で保護するために、ホストごとにユニークでランダムな20文字のパスワードを自動生成します(Torインスタンスごとではなく)
- この変数は、Ansibleが平文のパスワードを保存するフォルダを定義します(パスワードルックアップ)
- このフォルダ内のファイル名はホスト名(inventory_hostname)に一致し、構成できません
- この変数はスラッシュで終わる必要があります
- デフォルト:
~/.tor/prometheus/scrape-passwords/
tor_prometheus_scrape_port
整数- Nginxを介してスクレイプターゲット(MetricsPort)に到達するために使用される宛先ポートを定義します
- デフォルト: 443
tor_enableControlSocket
ブール- Trueの場合、各TorインスタンスについてControlSocketファイルを作成します(つまり、nyx用)
- アクセス制御はファイルシステムの権限に依存します
- 特定のTorインスタンスのControlSocketファイルに特定のユーザーにアクセスを許可するには、ユーザーをそのTorインスタンスのプライマリグループに追加する必要があります
- ソケットファイルのパスは/var/run/tor-instances/instance-id/controlです
- この設定は、特定のサーバー上のすべてのインスタンスに影響します
- インスタンスごとの設定はサポートされていません
- デフォルト: 偽
tor_freebsd_somaxconn
整数- FreeBSDでkern.ipc.somaxconnを設定します
- デフォルトでは、この値は少なくとも1024に増加します
- その値がそれよりも高い場合、触れません
tor_freebsd_nmbclusters
整数- FreeBSDでkern.ipc.nmbclustersを設定します
- デフォルトでは、この値を少なくとも30000に増加します
- その値がそれよりも高い場合、触れません
tor_package_state
文字列- Torパッケージのパッケージ状態を指定します
- 可能な値: present, latest(BSDではサポートされていません)
- 注意: リポジトリのメタデータは更新されないため、最新に設定しても実際に最新バージョンである保証はありません。
- デフォルト: 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タグの使用はオプションですが、多くのサーバーを管理している場合、プレイブックの実行を迅速化することができます。
OS固有のタグがあります:
- debian(ubuntuを含む)
- freebsd
- openbsd
タスク指向のタグ:
- renewkey - オンラインEd25519キーの更新のみを処理します(Torインスタンスが完全に構成されて実行されていると仮定します)
- install - Torをインストールしますが、開始または有効にはしません
- createdir - Ansibleホスト上に(空の)ディレクトリを作成します。移行に便利です
- promconfig - Prometheus関連の設定を再生成します(スクレイプ設定、ブラックボックスエクスポータ、nginx)
- reconfigure - 設定ファイル(Torとpromconfig)を再生成し、Torを再読み込みします(以前に構成されたTorインスタンスが必要です)
大規模なファミリーがあり、OpenBSDホストを追加しようとする場合、通常は次の2つの手順を行います。
新しいサーバーだけに対して(-l)およびOS固有のタグ(openbsd)だけを使用して新しいサーバーをインストールします。
ansible-playbook yourplaybook.yml -l newserver --tags openbsd
次に、'reconfigure'タグを使用してすべてのサーバー(MyFamily)を再構成します。
ansible-playbook yourplaybook.yml --tags reconfigure
セキュリティに関する考慮事項
このAnsibleロールは、手動設定を必要とせずにTorのOfflineMasterKey機能を利用します。
オフラインマスタキー機能は、一時的な署名キーをリレーにのみ公開します(デフォルトで30日間有効)。 これにより、サーバーが完全に侵害された場合でも、リレーの評判を失うことなく回復できます(新しい恒久的なマスタキーをゼロから生成する必要はありません)。
各Torインスタンスは、異なるシステムユーザーで実行されます。インスタンスごとのユーザーは、自分の(一時的な)キーにのみアクセスできますが、他のインスタンスのキーにはアクセスできません。 私たちは、運営するすべてのTorリレーを最終的には信頼していません(Ansibleホストまたは別のリレーでリレーが提供するデータを使用する際には、入力検証を行うように努めています)。
Ansibleコントロールマシンは、すべてのリレーキー(RSAおよびEd25519)を保存します - それに応じてセキュリティ対策を講じてください。
Prometheus統合を利用する場合、AnsibleコントロールマシンはすべてのPrometheusスクレイプの資格情報も~/.tor/prometheus/
に保存します。
これらの資格情報を回転させるのは非常に簡単です。単純にそのフォルダを削除して、再度ansible-playbookを実行すれば良いのです。
各Torサーバーホストには、独自のPrometheus資格情報のセットが提供されるため、侵害されたホストがすべての他のホストをスクレイピングすることはありません。
統合テスト
このAnsibleロールには.kitchen.ymlファイルが含まれており、さまざまな構成でリレーターをVagrant Virtualboxマシンでテストするために使用できます。 これは主に開発/統合テスト(回帰を検出)に使用されますが、ローカルなプレイグラウンド環境でリレーターに慣れるためにも使用できます。 これらのTorリレーは、テスト目的のためにのみ作成され、ネットワークに参加することはありません。
kitchenはVagrant CloudからVagrantボックスをダウンロードしてテストVMを作成します。
開始するには、必要なgemパッケージを次のようにインストールします:
gem install test-kitchen kitchen-ansiblepush kitchen-vagrant
利用可能なテストインスタンスをkitchen list
で確認できます。
次に、すべてのテストを実行するか、特定のインスタンスを選択して実行できます。たとえば: kitchen test t-guard-debian-10
。
テストを実行するには、VagrantとVirtualBoxも必要です。