nusenu.relayor

ansible-relayor

To jest rola ansible dla operatorów relayów Tor. Wprowadzenie do relayora można znaleźć tutaj.

Wsparcie e-mailowe: relayor-support AT riseup.net

Główne zadanie tej roli to automatyzacja jak największej liczby kroków dla operatora relayu Tor, w tym zarządzanie kluczami (OfflineMasterKey). Wdrożenie nowego serwera Tor jest tak proste, jak dodanie nowego hosta do inwentarza, nie jest wymagana żadna dodatkowa konfiguracja manualna.

Ta rola zarządza tylko instancjami tor zgodnie z aktualnymi ustawieniami i zmiennymi. Jeśli zmienisz konfigurację po zakończeniu pełnego uruchomienia playbooka, aby zmniejszyć liczbę instancji tor, na przykład przez obniżenie wartości tor_maxPublicIPs, ta rola nie usunie wcześniej skonfigurowanych instancji tor z twojego serwera. Instancje tor na serwerze są identyfikowane przez kombinację ich IPv4 i ORPort. Zmiana ORPort (przy użyciu zmiennej tor_ports) po początkowym wdrożeniu oznacza w praktyce utworzenie nowych instancji tor (a nie ich zmianę), dlatego zaleca się unikanie zmiany zmiennej tor_ports po początkowym wdrożeniu.

Utrzymywanie aktualności pakietu tor (ważne zadanie dla operatora relayu) nie mieści się w zakresie tej roli ansible. Zalecamy włączenie automatycznych aktualizacji, aby twoje relaye były dobrze utrzymane, jeśli twój system operacyjny to wspiera. Przewodnik po relayach Tor zawiera instrukcje, jak włączyć automatyczne aktualizacje oprogramowania dla systemów Debian/Ubuntu oraz FreeBSD.

Ta rola ansible nie ma na celu wspierania mostów tor.

Główne korzyści dla operatora relayu Tor

  • automatyzacja - koniec manualnych zadań konfiguracyjnych
  • bezpieczeństwo: offline klucze główne Ed25519 są generowane na hoście ansible i nigdy nie są narażane na relay
  • łatwe odnawianie kluczy Ed25519 (ważne przez 30 dni domyślnie - konfigurowalne)
  • bezpieczeństwo: podział: każda instancja tor działa jako odrębny użytkownik
  • automatycznie korzysta z adresów IPv6 (jeśli są dostępne)
  • automatyczne generowanie instancji tor (domyślnie dwie - konfigurowalne)
  • domyślne włączenie funkcji Sandbox tor na systemach opartych na Debianie
  • łatwy wybór między wersjami alpha/nie-alpha (tylko Debian/Ubuntu/FreeBSD)
  • łatwe przywracanie konfiguracji relayu (host ansible staje się lokalizacją zapasową dla wszystkich kluczy od razu)
  • łatwy wybór między trybem wyjścia/nie-wyjścia relaya przy użyciu jednego booleana
  • automatyczne wdrożenie strony tor exit notice html przez DirPort tor (tylko na exitach)
  • automatyczne zarządzanie MyFamily
  • integracja z prometheus (po włączeniu)
    • automatyczna generacja konfiguracji reverse proxy nginx w celu ochrony MetricsPort tor (za pomocą podstawowej autoryzacji / HTTPS)
    • automatyczna generacja konfiguracji scrape dla MetricsPort
    • automatyczna generacja konfiguracji scrape dla blackbox-exportera w celu monitorowania dostępności ORPorts i DirPorts
    • dostarcza reguły alarmowe prometheus dla tor

Instalacja

Ta rola ansible jest dostępna na galaxy https://galaxy.ansible.com/nusenu/relayor/

ansible-galaxy install nusenu.relayor

Wymagania

Wymagania dla maszyny kontrolnej

  • nie uruchamiaj tej roli z become: yes
  • tor >= 0.4.8
  • pakiet python-netaddr musi być zainstalowany
  • wymagane polecenia: sort, uniq, wc, cut, sed, xargs
  • openssl >= 1.0.0
  • ansible >= 2.16.4
  • bash pod /bin/bash

Wymagania dla zarządzanego węzła

  • użytkownik niebędący rootem z uprawnieniami sudo
  • python
  • statyczny adres(e) IPv4
    • możemy używać wielu publicznych adresów IP
    • jeśli nie masz publicznego adresu IP, użyjemy jednego prywatnego adresu IP (i założymy NAT)
  • systemd (wszystkie systemy oparte na Linuksie)

Wymagania dla serwera Prometheus (tylko podczas korzystania z funkcji prometheus tej roli)

  • promtool musi być zainstalowany na serwerze prometheus i w PATH użytkownika root

Obsługiwane systemy operacyjne

  • Debian 12
  • OpenBSD 7.4
  • FreeBSD 14.1
  • Ubuntu 22.04

Obsługiwane wydania Tor

  • tor >= 0.4.8.x

Przykład Playbooka

Minimalny playbook używający ansible-relayor do ustawienia relayów nie-wyjściowych może wyglądać tak:

---

- hosts: relays
  vars:
    tor_ContactInfo: [email protected]
  roles:
    - nusenu.relayor

Więcej przykładów można znaleźć w katalogu z przykładami playbooków.

Zmienione domyślne ustawienia torrc

Ta rola zmienia domyślne ustawienia następujących opcji torrc, aby używać bezpieczniejszych opcji domyślnie, ale nadal można je wyraźnie skonfigurować za pomocą tor_config:

  • NoExec 0 -> 1
  • Sandbox 0 -> 1 (tylko na Debianie)

Zmienne roli

Wszystkie tutaj wspomniane zmienne są opcjonalne.

  • tor_ContactInfo string

  • tor_signingkeylifetime_days integer

    • wszystkie instancje tor utworzone przez relayor działają w trybie OfflineMasterKey
    • to ustawienie definiuje czas życia kluczy podpisujących Ed25519 w dniach
    • pośrednio definiuje jak często musisz uruchamiać swój playbook ansible, aby upewnić się, że klucze twojego relayu nie wygasną
    • instancja tor w trybie OfflineMasterKey automatycznie przestaje działać, gdy jego klucz/certyfikat wygasa, więc jest to kluczowe ustawienie!
    • niższe wartości (np. 7) są lepsze z punktu widzenia bezpieczeństwa, ale wymagają częstszych uruchomień playbooka
    • domyślnie: 30
  • tor_config dictionary

    • ta słownik zawiera ustawienia torrc oraz ich wartości, dostępne opcje można znaleźć w sekcji 'OPCJE SERWERA' w podręczniku tor.
    • każde ustawienie można ustawić tylko raz (bez względu na to, co mówi strona man tor)
    • ten słownik można wykorzystać do ustawienia dowolnej opcji torrc, ale NIE następujących: 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 dictionary

    • Ta zmienna pozwala na
      • wybór portu ORPort i DirPort tor
      • zdecydowanie, ile instancji tor chcesz uruchomić na adresie IP (domyślnie 2) - upewnij się, że nie uruchamiasz więcej niż dozwolone na adres IP
    • wyłączenie DirPorts poprzez ustawienie ich na 0
    • WSKAZÓWKA: wybierz ORPorts mądrze i nigdy ich ponownie nie zmieniaj, przynajmniej tych już wdrożonych, dodawanie więcej bez zmiany tych wdrożonych jest w porządku.
    • funkcja 'auto' tor NIE jest wspierana
    • domyślnie:
      • instancja 1: ORPort 9000, DirPort 9001
      • instancja 2: ORPort 9100, DirPort 9101
  • tor_offline_masterkey_dir folderpath

    • domyślnie: ~/.tor/offlinemasterkeys
    • Określa lokalizację, w której na maszynie kontrolnej ansible przechowujemy klucze relay (Ed25519 i RSA)
    • Wewnątrz tego folderu ansible utworzy podfolder dla każdej instancji tor.
    • zobacz dokumentację, jeśli chcesz przenieść instancje do nowego serwera
    • uwaga: nie modyfikuj ręcznie nazw plików i/lub folderów oraz ich zawartości w tych katalogach danych tor
  • tor_nickname string

    • definiuje nazwę, której instancje tor będą używać
    • wszystkie instancje tor na hoście będą miały tę samą nazwę
    • aby użyć nazwy hosta serwera jako nicku, ustaw ją na {{ ansible_hostname }}
    • znaki niealfanumeryczne są automatycznie usuwane, a nicki dłuższe niż 19 znaków są przycinane, aby spełnić wymagania tor dotyczące nicków
    • tor_nicknamefile przeważa nad tym ustawieniem
    • domyślnie: brak
  • tor_nicknamefile filepath

    • to prosty plik csv oddzielony przecinkami przechowywany na maszynie kontrolnej ansible, określający nicki
    • pierwsza kolumna: identyfikator instancji (inventory_hostname-ip_orport)
    • druga kolumna: nick
    • jedna instancja na linii
    • wszystkie instancje MUSZĄ być obecne w pliku csv
    • znaki niealfanumeryczne są automatycznie usuwane, a nicki dłuższe niż 19 znaków są przycinane, aby spełnić wymagania tor dotyczące nicków
    • domyślnie: nie ustawione
  • tor_gen_ciiss_proof_files boolean

    • generuje pliki dowodowe rsa-fingerprint.txt i ed25519-master-pubkey.txt na maszynie kontrolnej do publikacji zgodnie z specyfikacją ContactInfo
    • domyślne ścieżki to: ~/.tor/rsa-fingerprint.txt i ~/.tor/ed25519-master-pubkey.txt
    • pliki są nadpisywane, jeśli istnieją
    • lokalizację folderu wyjściowego można skonfigurować za pomocą zmiennej tor_ciiss_proof_folder
    • nazwa pliku jest zakodowana na tę wymaganą przez specyfikację i nie można jej konfigurować
    • domyślnie: Fałsz
  • tor_ciiss_proof_folder folderpath

    • definiuje folder wyjściowy dla generowanych plików dowodowych
    • domyślnie: ~/.tor
  • tor_LogLevel string

    • ustawia poziom logowania tor
    • domyślnie: notice
  • tor_alpha boolean

    • Ustaw na True, jeśli chcesz używać wersji alpha Tor.
    • Uwaga: To ustawienie nie zapewnia, że zainstalowany tor zostanie zaktualizowany do wersji alpha.
    • To ustawienie jest wspierane tylko na Debianie/Ubuntu/FreeBSD (ignorowane na innych platformach).
    • domyślnie: Fałsz
  • tor_nightly_builds boolean

    • Ustaw na True, jeśli chcesz korzystać z repozytoriów nocnych buildów Tor z deb.torproject.org.
    • nocne buildy podążają za główną gałęzią git tor.
    • Obsługiwane tylko w Debianie i Ubuntu (ignorowane na innych platformach).
    • domyślnie: Fałsz
  • tor_ExitRelay boolean

    • Musisz ustawić to na True, jeśli chcesz włączyć wychodzenie dla wszystkich lub niektórych instancji tor na serwerze
    • Jeśli ta zmienna nie jest prawdziwa, będzie to relay nie-wyjścia
    • Jeśli chcesz uruchomić mieszany serwer (instancje wyjścia i nie-wyjścia tor), użyj tor_ExitRelaySetting_file do konfiguracji per-instancji w dodatku do tej zmiennej
    • domyślnie: Fałsz
  • tor_ExitRelaySetting_file filepath

    • to prosty plik csv oddzielony przecinkami przechowywany na maszynie kontrolnej ansible, definiujący ustawienie ExitRelay dla każdej instancji tor (zamiast globalnej)
    • pierwsza kolumna: identyfikator instancji (inventory_hostname-ip_orport)
    • druga kolumna: "exit" dla instancji tor wyjściowych, każda inna wartość (w tym pusta) dla innych instancji
    • ta zmienna jest ignorowana, jeśli tor_ExitRelay jest Fałsz
  • tor_RelayBandwidthRate_file filepath

    • to prosty plik csv oddzielony przecinkami przechowywany na maszynie kontrolnej ansible definiujący ustawienie RelayBandwidthRate dla każdej instancji tor (zamiast globalnej)
    • pierwsza kolumna: identyfikator instancji (inventory_hostname-ip_orport)
    • druga kolumna: wartość akceptowana przez RelayBandwidthRate (patrz strona man tor)
  • tor_RelayBandwidthBurst_file filepath

    • to prosty plik csv oddzielony przecinkami przechowywany na maszynie kontrolnej ansible definiujący ustawienie RelayBandwidthBurst dla każdej instancji tor (zamiast globalnej)
    • pierwsza kolumna: identyfikator instancji (inventory_hostname-ip_orport)
    • druga kolumna: wartość akceptowana przez RelayBandwidthBurst (patrz strona man tor)
  • tor_ExitNoticePage boolean

    • określa, czy wyświetlamy domyślną stronę powiadomienia wyjścia tor html na DirPort
    • istotne tylko, jeśli jesteśmy relayem wyjściowym
    • domyślnie: Prawda
  • tor_exit_notice_file filepath

    • ścieżka do pliku HTML na maszynie kontrolnej, który chciałbyś wyświetlić (przez DirPort) zamiast domyślnego tor-exit-notice.html dostarczonego przez projekt Tor
    • istotne tylko, jeśli jesteśmy relayem wyjściowym i jeśli tor_ExitNoticePage jest Prawda
  • tor_AbuseEmailAddress email-address

    • jeśli ustawione, ten adres e-mail jest wykorzystywany na stronie powiadomienia wyjścia tor html opublikowanej na DirPort
    • zaleca się to ustawić, jeśli uruchamiasz wyjście
    • istotne tylko, jeśli jesteśmy relayem wyjściowym
    • Uwaga: jeśli używasz własnego szablonu powiadomienia wyjścia tor, ta zmienna jest ignorowana, jeśli nie zostanie dołączona do twojego szablonu.
    • domyślnie: nie ustawione
  • tor_ExitPolicy array

  • tor_ExitPolicy_file filepath

    • to prosty plik csv oddzielony średnikami przechowywany na maszynie kontrolnej definujący ustawienie ExitPolicy dla każdej instancji tor (zamiast globalnej)
    • pierwsza kolumna: identyfikator instancji (inventory_hostname-ip_orport)
    • druga kolumna: wartość akceptowana przez ExitPolicy (patrz strona man tor)
    • przykładowa zawartość: "myrelay-192.168.1.1_443;reject *:25,reject *:123"
    • istotne tylko, jeśli tor_ExitRelay jest Prawda
    • to można połączyć z ustawieniem tor_ExitPolicy i będzie je nadpisywać (to jest bardziej konkretne)
    • tylko instancje tor, dla których chcesz mieć specyficzną politykę wyjścia, muszą być wymienione w pliku (inne można pominąć)
    • domyślnie: nie ustawione
  • tor_maxPublicIPs integer

    • Ogranicza liczbę publicznych adresów IP, których użyjemy do generowania instancji na pojedynczym hoście.
    • Pośrednio ogranicza liczbę instancji, które generujemy na hoście.
    • domyślnie: 1
  • tor_IPv6 boolean

    • automatycznie wykrywa, czy masz adresy IP IPv6 i odpowiednio włącza ORPort IPv6
    • możesz zrezygnować, ustawiając to na Fałsz
    • domyślnie: Prawda
  • tor_IPv6Exit boolean

    • włącza ruch wyjściowy IPv6
    • istotne tylko, jeśli tor_ExitRelay i tor_IPv6 są Prawda i mamy adres IPv6
    • domyślnie: Prawda (w przeciwieństwie do domyślnej wartości tor)
  • tor_enableMetricsPort boolean

    • jeśli Prawda, włącz MetricsPort tor na lokalnym adresie IP 127.0.0.1 i zezwól temu samemu adresowi na dostęp do niego (MetricsPortPolicy)
    • to jest beta funkcja relayora i w przyszłości zmieni się, aby użyć bezpieczniejszej opcji unix socket, gdy stanie się dostępna
    • włączenie tego ustawienia automatycznie wyłącza OverloadStatistics, jeśli nie jest włączone jawnie (więc tor nie będzie publikować/przekazywać danych do organów katalogowych, ponieważ używamy MetricsPort lokalnie)
    • domyślnie: Fałsz
  • tor_prometheus_host hostname

    • ta zmienna jest istotna tylko wtedy, gdy włączone są tor_enableMetricsPort lub tor_blackbox_exporter_host
    • jeśli chcesz włączyć integrację relayora z prometheus, musisz ustawić tę zmienną na adres swojego serwera prometheus
    • definiuje, na którym hoście ansible powinien generować konfigurację scrape do zbierania MetricsPort tor
    • ten host musi być dostępny w pliku inwentarza ansible
    • domyślnie: nieokreślony (nie generowana jest żadna konfiguracja scrape)
  • tor_prometheus_confd_folder folderpath

    • istotne tylko, jeśli chcesz korzystać z prometheus
    • ten folder musi istnieć na tor_prometheus_host
    • relayor umieszcza konfiguracje scrape prometheus w tym folderze
    • globalna sekcja konfiguracji prometheus powinna być w tym folderze nazwanym 1_prometheus.yml
    • zbieramy wszystkie pliki w tym folderze w porządku sortowania stringów do pojedynczego pliku wyjściowego prometheus.yml, ponieważ prometheus nie wspiera katalogów stylu conf.d od razu
    • domyślnie: /etc/prometheus/conf.d
  • tor_prometheus_config_file filepath

    • istotne tylko, jeśli chcesz korzystać z prometheus
    • ta zmienna definiuje ścieżkę do globalnego pliku konfiguracyjnego prometheus na tor_prometheus_host
    • wykonujemy kopię zapasową pliku w tym samym folderze przed generowaniem nowego
    • to jest plik wrażliwy pod względem bezpieczeństwa, ponieważ zawiera dane uwierzytelniające do MetricsPort tor
    • właściciel pliku: root, grupa: tor_prometheus_group, uprawnienia: 0640
    • domyślnie: /etc/prometheus/prometheus.yml
  • tor_MetricsPort_offset integer

    • definiuje port TCP MetricsPort używany przez pierwszą instancję tor działającą na hoście
    • dodatkowe instancje tor będą używać zwiększonego numeru portu 33301, 33302, ...
    • więc jeśli uruchomisz N instancji na hoście, następne N-1 porty po tym porcie muszą być nieużywane na 127.0.0.1, aby tor mógł ich używać dla MetricsPort
    • domyślnie: 33300
  • tor_prometheus_scrape_file filename

    • istotne tylko, jeśli zdefiniowany jest tor_prometheus_host, a tor_enableMetricsPort lub tor_blackbox_exporter_host są ustawione
    • definiuje nazwę pliku dla konfiguracji scrape per serwer scrape_config na serwerze prometheus w folderze tor_prometheus_confd_folder
    • nazwa pliku MUSI być specyficzna dla hosta, każdy host ma swój własny plik konfiguracyjny scrape na serwerze prometheus, aby wspierać opcję CLI --limit playbooka ansible
    • w zależności od tor_enableMetricsPort i tor_blackbox_exporter_host, pliki konfiguracyjne scrape będą zawierać zadania scrape dla MetricsPort tor (za pomocą reverse proxy dla TLS/podstawowej autoryzacji) i/lub zadania scrape dla TCP portów ORPort/DirPort przez blackbox exporter
    • zawartość pliku jest wrażliwa (zawiera dane uwierzytelniające scrape) i otrzymuje te uprawnienia pliku: 0640 (właściciel: root, grupa: tor_prometheus_group)
    • generowane pliki konfiguracyjne scrape będą automatycznie wzbogacane o kilka przydatnych etykiet prometheus, w zależności od ustawień torrc, zobacz sekcję "Etykiety Prometheus" w tej dokumentacji
    • domyślnie: tor_{{ ansible_fqdn }}.yml
  • tor_prometheus_group string

    • istotne tylko, jeśli chcesz korzystać z prometheus
    • definiuje nazwę grupy używaną do ustawień uprawnień do plików prometheus (prometheus.yml, pliki konfiguracyjne scrape, plik reguł alarmowych)
    • domyślnie: prometheus
  • tor_prom_labels dictionary

    • dowolna liczba par wartości etykiety prometheus
    • można ustawić na poziomie serwera, nie na poziomie instancji
    • dla przykładu zobacz defaults/main.yml
    • domyślnie: pusty słownik
  • tor_blackbox_exporter_host hostname:port

    • po ustawieniu, relayor dodaje niezbędną konfigurację scrape prometheus dla blackbox exportera TCP w pliku określonym przez tor_prometheus_scrape_file
    • monitoruje wszystkie porty ORRelay i ewentualnie DirPorts w IPv4 i IPv6 (jeśli włączone) używając sprawdzenia połączenia TCP
    • ta funkcja nie jest wspierana w relayach za NAT
    • definiuje, gdzie prometheus znajdzie blackbox exportera, może również działać na samym serwerze prometheus, w takim przypadku byłoby to 127.0.0.1:9115
    • host jest zapisywany w wynikowej konfiguracji scrape prometheus
    • blackbox_exporter musi mieć prosty moduł tcp_probe skonfigurowany jako "tcp_connect"
    • relayor nie instaluje ani nie konfiguruje blackbox_exporter
    • domyślnie: nieokreślony
  • tor_blackbox_exporter_scheme string

    • definiuje protokół używany przez prometheus do połączenia z blackbox exporterem (http lub https)
    • domyślnie: http
  • tor_blackbox_exporter_username string

    • istotne tylko, gdy tor_blackbox_exporter_host jest ustawiony
    • pozwala zdefiniować nazwę użytkownika, jeśli twój blackbox exporter wymaga podstawowej autoryzacji HTTP
    • jeśli nie ustawisz nazwy użytkownika, konfiguracja scrape nie będzie zawierała poświadczeń do podstawowej autoryzacji HTTP
    • domyślnie: nieokreślony (brak podstawowej autoryzacji HTTP)
  • tor_blackbox_exporter_password string

    • istotne tylko, gdy tor_blackbox_exporter_host jest ustawiony
    • pozwala ci zdefiniować hasło, jeśli twój blackbox exporter wymaga podstawowej autoryzacji HTTP
    • domyślne generuje losowy ciąg 20 znaków za pomocą mechanizmu wyszukiwania hasła Ansible
    • domyślnie: "{{ lookup('password', '~/.tor/prometheus/blackbox_exporter_password') }}"
  • tor_metricsport_nginx_config_file filepath

    • ta zmienna jest istotna tylko, jeśli tor_enableMetricsPort jest Prawda i tor_prometheus_host jest ustawiony
    • definiuje ścieżkę pliku, w którym będzie przechowywana konfiguracja reverse proxy nginx dla MetricsPort na relayu
    • ten plik musi być uwzględniony w konfiguracji serwera WWW na relayu, aby umożliwić dostęp do MetricsPort w celu zdalnego zbierania przez prometheus
    • folder musi być już obecny na serwerze (relayor go nie stworzy)
    • domyślnie: /etc/nginx/promexporters/tor_metricsports_relayor.conf
  • tor_gen_prometheus_alert_rules boolean

    • istotne tylko, gdy tor_enableMetricsPort jest włączone
    • ustaw na True, jeśli chcesz generować reguły alarmowe prometheus na serwerze prometheus (tor_prometheus_host)
    • lokalizacja pliku jest określona przez tor_prometheus_rules_file
    • domyślnie: fałsz (brak reguł generowanych)
  • tor_prometheus_rules_file filepath

    • istotne tylko, gdy tor_gen_prometheus_alert_rules jest True
    • definiuje, gdzie na serwerze prometheus (tor_prometheus_host) relayor wygeneruje plik reguł (folder musi być obecny)
    • plik ten musi być w folderze uwzględnionym w twojej konfiguracji prometheus (rule_files) i zazwyczaj musi kończyć się na .rules
    • relayor dostarcza domyślny zestaw reguł alarmowych, a ty możesz opcjonalnie dodać swoje niestandardowe reguły alarmowe (za pomocą tor_prometheus_custom_alert_rules)
    • właściciel pliku/grupa: root, uprawnienia pliku: 0644
    • domyślnie: /etc/prometheus/rules/ansible-relayor.rules
  • tor_prometheus_alert_rules dictionary

    • definiuje reguły alarmowe prometheus
    • reguły są automatycznie walidowane za pomocą promtool
    • zobacz defaults/main.yml dla domyślnych reguł
  • tor_prometheus_custom_alert_rules dictionary

    • jeśli chcesz dodać własne zdefiniowane reguły, dodaj je do tego słownika, oczekuje on tego samego formatu, co w tor_prometheus_alert_rules
    • reguły zdefiniowane w tym słowniku są również zapisywane w tor_prometheus_rules_file
    • to pozwala na wykorzystanie nowych reguł dostarczanych przez nowe wersje relayora, przy jednoczesnym utrzymaniu własnych reguł
    • reguły są automatycznie walidowane za pomocą promtool
    • domyślnie: nieokreślony
  • tor_gen_metricsport_htpasswd boolean

    • ta zmienna jest istotna tylko, jeśli tor_enableMetricsPort jest Prawda
    • gdy ta zmienna jest ustawiona na Prawda, tworzymy plik htpasswd, który może być używany przez serwer WWW na relayu do ochrony MetricsPort tor za pomocą podstawowej autoryzacji HTTP
    • plik ten będzie należał do root i był dostępny dla grupy serwera WWW (www-data/www - w zależności od systemu operacyjnego)
    • nie instalujemy serwera WWW, użyj innej roli do tego.
    • hasło jest automatycznie generowane i ma długość 20 znaków (każdy serwer dostaje inne hasło)
    • ścieżka do pliku na relayu jest określona w tor_metricsport_htpasswd_file
    • jawne hasło jest zapisywane w pliku na maszynie kontrolnej ansible (zobacz tor_prometheus_scrape_password_folder)
    • domyślnie: Prawda
  • tor_metricsport_htpasswd_file filepath

    • istotne tylko, jeśli tor_enableMetricsPort i tor_gen_metricsport_htpasswd są ustawione na Prawda
    • definiuje ścieżkę do pliku htpasswd (zawierającego nazwę użytkownika i hash hasła) na relayu
    • domyślnie: /etc/nginx/tor_metricsport_htpasswd
  • tor_prometheus_scrape_password_folder folderpath

    • istotne tylko, jeśli tor_enableMetricsPort jest Prawda
    • ansible automatycznie generuje jedno unikalne i losowe 20-znakowe hasło na hosta (nie na instancję tor), aby chronić MetricsPort za pomocą nginx (autoryzacja http)
    • ta zmienna definiuje folder, w którym ansible przechowa hasła w formacie tekstowym (wyszukiwanie hasła)
    • nazwy plików w tym folderze odpowiadają nazwie hosta (inventory_hostname) i nie mogą być konfigurowane
    • zmienna musi zawierać ukośnik końcowy /
    • domyślnie: ~/.tor/prometheus/scrape-passwords/
  • tor_prometheus_scrape_port integer

    • definiuje, który port docelowy jest używany do dotarcia do celu scrape (MetricsPort) przez nginx
    • domyślnie: 443
  • tor_enableControlSocket boolean

    • jeśli Prawda, tworzy plik ControlSocket dla każdej instancji tor (tj. do użycia z nyx)
    • kontrola dostępu polega na uprawnieniach systemowych
    • aby dać użytkownikowi dostęp do kontrolowanego pliku socket instancji tor, trzeba dodać go do grupy głównej instancji tor
    • ścieżka do socketu znajduje się w /var/run/tor-instances/instance-id/control
    • to ustawienie wpływa na wszystkie instancje na danym serwerze
    • konfiguracja na poziomie instancji nie jest wspierana
    • domyślnie: Fałsz
  • tor_freebsd_somaxconn integer

    • konfiguruje kern.ipc.somaxconn na FreeBSD
    • domyślnie zwiększamy tę wartość do co najmniej 1024
    • jeśli wartość jest wyższa, nie zmieniamy jej
  • tor_freebsd_nmbclusters integer

    • konfiguruje kern.ipc.nmbclusters na FreeBSD
    • domyślnie zwiększamy tę wartość do co najmniej 30000
    • jeśli wartość jest wyższa, nie zmieniamy jej
  • tor_package_state string

    • określa, jakim stanem powinna być paczka tor
    • możliwe wartości: present, latest (nieobsługiwane w BSD)
    • Uwaga: Metadane repozytoriów nie są aktualizowane, więc ustawienie tego na latest nie daje żadnych gwarancji, że to rzeczywiście jest najnowsza wersja.
    • domyślnie: present
  • tor_binary string

    • nazwa binarnego pliku tor na maszynie kontrolnej, używana do generowania kluczy offline
    • jeśli plik binarny tor nie nazywa się "tor" na twojej maszynie kontrolnej, musisz zmienić wartość domyślną (na przykład na stacjach roboczych Whonix)
    • domyślnie: tor

Etykiety Prometheus

Gdy tor_enableMetricsPort jest włączone, wypełniamy również następujące etykiety prometheus:

  • id: identyfikuje instancję tor przez IP_ORPort. Przykładowa wartość: 198.51.100.10_9000
  • relaytype: wartość to "exit" lub "nonexit" w zależności od tor_ExitRelay
  • tor_nickname: gdy nicknames są zdefiniowane (tor_nicknamefile lub tor_nickname), ta etykieta jest dodawana
  • service: "torrelay"

Możesz dodać dodatkowe etykiety prometheus, używając tor_prom_labels.

Dostępne tagi roli

Użycie tagów ansible jest opcjonalne, ale pozwala przyspieszyć uruchamianie playbooków, jeśli zarządzasz wieloma serwerami.

Są tagi specyficzne dla systemu operacyjnego:

  • debian (w tym ubuntu)
  • freebsd
  • openbsd

Taksowe tagi:

  • renewkey - zajmuje się odnawianiem tylko online kluczy Ed25519 (zakłada, że instancje tor są już w pełni skonfigurowane i działają)
  • install - instaluje tor, ale nie uruchamia ani nie włącza go
  • createdir - tworzy (puste) katalogi tylko na hoście ansible, przydatne podczas migracji
  • promconfig - regeneruje konfiguracje związane z prometheus (konfiguracja scrape, blackbox exporter, nginx)
  • reconfigure - regeneruje pliki konfiguracyjne (tor i promconfig) i przeładowuje tor (wymagana wcześniejsza konfiguracja instancji tor)

Więc jeśli masz dużą rodzinę i zamierzasz dodać hosta OpenBSD typowo robisz dwa kroki

  1. zainstaluj nowy serwer, uruchamiając tylko przeciwko nowemu serwerowi (-l) i tylko tag specyficzny dla systemu operacyjnego (openbsd)

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

  2. następnie skonfiguruj ponownie wszystkie serwery (MyFamily), uruchamiając tag "reconfigure" przeciwko wszystkim serwerom.

    ansible-playbook yourplaybook.yml --tags reconfigure

Rozważania dotyczące bezpieczeństwa

Ta rola ansible wykorzystuje funkcję OfflineMasterKey tor bez konieczności konfiguracji ręcznej.

Funkcja klucza głównego offline eksponuje jedynie tymczasowy klucz podpisujący dla relayu (ważny przez 30 dni domyślnie). Pozwala to na odzyskanie z pełnego kompromitacji serwera bez utraty reputacji relayu (brak potrzeby od nowa bootstrapować nowy stały klucz główny).

Każda instancja tor jest uruchamiana jako odrębny użytkownik systemowy. Użytkownik na poziomie instancji ma dostęp tylko do swoich własnych (tymczasowych) kluczy, ale nie do kluczy innych instancji. Nie ufamy całkowicie każdemu relayowi tor, który prowadzimy (staramy się wykonywać walidację danych wejściowych, gdy używamy przekazanych danych z relayu na hoście ansible lub innym relayu).

Bądź świadomy, że maszyna kontrolna ansible przechowuje WSZYSTKIE twoje klucze relayów (RSA i Ed25519) - stosuj odpowiednie środki bezpieczeństwa.

Jeśli korzystasz z integracji z prometheus, maszyna kontrolna ansible przechowa również wszystkie twoje dane uwierzytelniające scrape prometheus w ~/.tor/prometheus/. Rotacja tych danych uwierzytelniających jest bardzo łatwa: wystarczy usunąć ten folder i ponownie uruchomić ansible-playbook.

Każdy host serwera tor dostaje własny zestaw danych uwierzytelniających prometheus, więc skompromitowany host nie powinien umożliwiać im scrapowania wszystkich innych hostów.

Testowanie integracji

Ta rola ansible zawiera plik .kitchen.yml, który można wykorzystać do testowania relayora - za pomocą różnych konfiguracji - na maszynach Virtualbox Vagrant. Jest on przede wszystkim używany do testowania rozwoju/ integracji (wykrywanie regresji) ale możesz go także używać do zapoznania się z relayorem w takim lokalnym środowisku zabawowym. Te relaye tor nie dołączą do sieci, ponieważ są tworzone tylko do celów testowych.

kitchen pobierze pudełka Vagrant z chmury Vagrant, aby stworzyć testowe maszyny wirtualne.

Aby zacząć, zainstaluj wymagane pakiety gem:

gem install test-kitchen kitchen-ansiblepush kitchen-vagrant

Wyświetl dostępne instancje testowe za pomocą kitchen list.

Następnie możesz uruchomić wszystkie testy lub po prostu wybrać konkretne instancje, na przykład: kitchen test t-guard-debian-10.

Uwaga, aby uruchomić testy, musisz mieć także zainstalowanego Vagranta i VirtualBox.

Pochodzenie

https://github.com/david415/ansible-tor (znacznie zmieniony od tego czasu)

O projekcie

An Ansible role for Tor Relay Operators

Zainstaluj
ansible-galaxy install nusenu.relayor
Licencja
gpl-3.0
Pobrania
307
Właściciel
https://nusenu.medium.com/