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/UbuntuFreeBSD向けの自動ソフトウェア更新を有効にする方法が記載されています。

この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 -> 1
  • Sandbox 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_RelayBandwidthRate_file ファイルパス

    • これは、各TorインスタンスのためのRelayBandwidthRate torrc設定を定義するAnsibleコントロールマシンに保存された単純なカンマ区切りCSVファイルです(サーバー全体ではなく)
    • 最初の列: インスタンス識別子(inventory_hostname-ip_orport)
    • 2列目: RelayBandwidthRateに受け入れられる値(Torのマニュアルページを参照)
  • tor_RelayBandwidthBurst_file ファイルパス

    • これは、各TorインスタンスのためのRelayBandwidthBurst torrc設定を定義するAnsibleコントロールマシンに保存された単純なカンマ区切りCSVファイルです(サーバー全体ではなく)
    • 最初の列: インスタンス識別子(inventory_hostname-ip_orport)
    • 2列目: RelayBandwidthBurstに受け入れられる値(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_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_maxPublicIPs 整数

    • 単一ホストでインスタンスを生成するために使用する公共IPの数を制限します。
    • やがてインスタンスを生成するホストの数を制限します。
    • デフォルト: 1
  • tor_IPv6 ブール

    • IPv6 IPがあるかどうかを自動検出し、対応するIPv6 ORPortを有効にします
    • 偽に設定することでオプトアウトできます
    • デフォルト: 真
  • tor_IPv6Exit ブール

    • IPv6の出口トラフィックを有効にします
    • tor_ExitRelaytor_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_enableMetricsPorttor_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_enableMetricsPorttor_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_9000
  • relaytype: 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つの手順を行います。

  1. 新しいサーバーだけに対して(-l)およびOS固有のタグ(openbsd)だけを使用して新しいサーバーをインストールします。

    ansible-playbook yourplaybook.yml -l newserver --tags openbsd

  2. 次に、'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も必要です。

起源

https://github.com/david415/ansible-tor(その後大幅に変更されています)

プロジェクトについて

An Ansible role for Tor Relay Operators

インストール
ansible-galaxy install nusenu.relayor
ライセンス
gpl-3.0
ダウンロード
307
所有者
https://nusenu.medium.com/