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 -> 1Sandbox
0 -> 1 (tylko na Debianie)
Zmienne roli
Wszystkie tutaj wspomniane zmienne są opcjonalne.
tor_ContactInfo
string- Ustawia pole ContactInfo relaya.
- To ustawienie jest obowiązkowe.
- Operatorzy są zachęcani do korzystania z Specyfikacji wymiany informacji ContactInfo, aby publikować przydatne informacje kontaktowe.
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
- Ta zmienna pozwala na
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
- to prosty plik csv oddzielony przecinkami przechowywany na maszynie kontrolnej ansible, definiujący ustawienie
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)
- to prosty plik csv oddzielony przecinkami przechowywany na maszynie kontrolnej ansible definiujący ustawienie
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)
- to prosty plik csv oddzielony przecinkami przechowywany na maszynie kontrolnej ansible definiujący ustawienie
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- określa twoją niestandardową politykę wyjścia
- istotne tylko, jeśli
tor_ExitRelay
jest Prawda - zobacz defaults/main.yml, aby uzyskać przykład, jak ją ustawić
- domyślnie: zredukowana polityka wyjścia (https://trac.torproject.org/projects/tor/wiki/doc/ReducedExitPolicy)
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
- to prosty plik csv oddzielony średnikami przechowywany na maszynie kontrolnej definujący ustawienie
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
itor_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
lubtor_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)
- ta zmienna jest istotna tylko wtedy, gdy włączone są
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
, ator_enableMetricsPort
lubtor_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
itor_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
- istotne tylko, jeśli zdefiniowany jest
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
- po ustawieniu, relayor dodaje niezbędną konfigurację scrape prometheus dla blackbox exportera TCP w pliku określonym przez
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)
- istotne tylko, gdy
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') }}"
- istotne tylko, gdy
tor_metricsport_nginx_config_file
filepath- ta zmienna jest istotna tylko, jeśli
tor_enableMetricsPort
jest Prawda itor_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
- ta zmienna jest istotna tylko, jeśli
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)
- istotne tylko, gdy
tor_prometheus_rules_file
filepath- istotne tylko, gdy
tor_gen_prometheus_alert_rules
jestTrue
- 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
- istotne tylko, gdy
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
- jeśli chcesz dodać własne zdefiniowane reguły, dodaj je do tego słownika, oczekuje on tego samego formatu, co w
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
- ta zmienna jest istotna tylko, jeśli
tor_metricsport_htpasswd_file
filepath- istotne tylko, jeśli
tor_enableMetricsPort
itor_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
- istotne tylko, jeśli
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/
- istotne tylko, jeśli
tor_prometheus_scrape_port
integer- definiuje, który port docelowy jest używany do dotarcia do celu scrape (
MetricsPort
) przez nginx - domyślnie: 443
- definiuje, który port docelowy jest używany do dotarcia do celu scrape (
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_9000relaytype
: wartość to "exit" lub "nonexit" w zależności odtor_ExitRelay
tor_nickname
: gdy nicknames są zdefiniowane (tor_nicknamefile
lubtor_nickname
), ta etykieta jest dodawanaservice
: "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
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
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)
ansible-galaxy install nusenu.relayor