Discourse
Oficjalna integracja ProxyTracer dla platformy Discourse. Ta wtyczka wprowadza zaawansowaną analizę adresów IP do Twojej społeczności, automatycznie wykrywając znane sieci VPN, proxy, centra danych i węzły Tor oraz umożliwiając blokowanie rejestracji, logowania lub całego dostępu do forum Discourse.
Wtyczka jest dystrybuowana za pośrednictwem tego repozytorium GitHub.
Funkcje
- Szczegółowa kontrola pozwalająca administratorom wymusić walidację IP podczas rejestracji nowych użytkowników, logowania istniejących kont lub globalnie dla wszystkich odwiedzających.
- Wbudowane buforowanie w Redis przechowuje ostatnie wyniki oceny adresów IP, drastycznie zmniejszając liczbę zapytań do zewnętrznego API i zapewniając zerowe opóźnienia.
- W przypadku przekroczenia limitu czasu API lub awarii sieci wtyczka stawia na dostępność dla użytkowników (fail-open), aby zapobiec masowym blokadom. Zachowanie to można zmienić w opcjach.
- Wbudowana obsługa białej listy (whitelist) dla konkretnych adresów IP oraz podsieci CIDR.
Instalacja
-
Połącz się z serwerem przez SSH i przejdź do katalogu instalacji Discourse:
cd /var/discourse -
Otwórz plik konfiguracyjny kontenera do edycji:
nano containers/app.yml -
Znajdź sekcję
hooksi dodaj polecenie klonowania repozytorium bezpośrednio pod instalacjądocker_manager:hooks: after_code: - exec: cd: $home/plugins cmd: - git clone https://github.com/discourse/docker_manager.git - git clone https://github.com/proxytracer/discourse-proxytracer.git -
Zapisz plik konfiguracyjny i przebuduj kontener Discourse, aby skompilować wtyczkę:
./launcher rebuild app
Konfiguracja:
- Pobierz standardowy klucz API z Panelu ProxyTracer.
- Przejdź do panelu administracyjnego Discourse: Admin → Wtyczki → ProxyTracer, aby otworzyć ustawienia ProxyTracer.
-
Wprowadź swój klucz API w polu
Klucz API ProxyTracer. -
Włącz parametry ochrony, zaznaczając
Włączone podczas rejestracji,Włączone podczas logowaniai/lubWłączone dla wszystkich odwiedzających. -
Dodaj zaufane adresy IP lub zakresy CIDR do listy
Biała lista adresów IP. - (Opcjonalnie) Dostosuj limit czasu API (timeout) i czas trwania pamięci podręcznej Redis do specyfiki ruchu na Twoim serwerze.
- (Opcjonalnie) Dostosuj treść komunikatu o blokadzie wyświetlanego zablokowanym użytkownikom. Możesz na przykład dodać instrukcje kontaktu z administracją serwisu w przypadku uznania blokady za bezpodstawną.

Konfiguracja sieciowa: Cloudflare i Reverse Proxy
Postępuj zgodnie z poniższymi wytycznymi konfiguracyjnymi dopasowanymi do architektury Twojego serwera, aby zapewnić prawidłowe przekazywanie adresów IP.
Bezpośrednia integracja z Cloudflare (Instalacja standardowa)
Dotyczy to sytuacji, gdy Twój serwer Discourse łączy się bezpośrednio z internetem i korzysta z Cloudflare wyłącznie do obsługi DNS i proxy brzegowego. W tej standardowej konfiguracji musisz skonfigurować Discourse tak, aby ufał zakresom IP Cloudflare i wyodrębniał prawdziwe IP klienta z nagłówków przychodzących.
-
Połącz się z serwerem przez SSH i edytuj konfigurację kontenera:
nano /var/discourse/containers/app.yml -
Znajdź blok
templates:i dodaj oficjalny szablon Cloudflaretemplates/cloudflare.template.yml:templates: - "templates/postgres.template.yml" - "templates/redis.template.yml" - "templates/web.template.yml" - "templates/web.ratelimited.template.yml" - "templates/cloudflare.template.yml" -
Zapisz plik i przebuduj kontener Discourse, aby zastosować zmiany:
./launcher rebuild app
Architektura wielowarstwowego proxy (Cloudflare + lokalny reverse proxy)
Dotyczy sytuacji, gdy instancja Discourse działa za lokalnym panelem zarządzania serwerem lub reverse proxy (np. CloudPanel, Nginx Proxy Manager, Traefik, Plesk), który z kolei znajduje się za Cloudflare. W architekturze wielowarstwowego proxy standardowy szablon cloudflare.template.yml nie zadziała, ponieważ ruch jest przekazywany do Discourse przez lokalny interfejs sieciowy, a nie bezpośrednio przez Cloudflare. Nie używaj szablonu Cloudflare w tym scenariuszu.
Zamiast tego musisz skonfigurować lokalne reverse proxy tak, aby wyodrębniało prawdziwy adres IP klienta z nagłówka CF-Connecting-IP, ale wyłącznie dla ruchu pochodzącego z zaufanych adresów IP Cloudflare. Bezwarunkowe przekazywanie tego nagłówka bez weryfikacji źródła pozwala złośliwym użytkownikom omijać limity zapytań i bany poprzez podszywanie się pod cudze IP.
# Adresy IPv4 Cloudflare, zobacz https://www.cloudflare.com/ips/
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 131.0.72.0/22;
# Adresy IPv6 Cloudflare
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;
real_ip_header CF-Connecting-IP;Następnie znajdź dyrektywę location / lub @reverse_proxy. Dzięki powyższej konfiguracji Nginx bezpiecznie przypisze zmiennej $remote_addr prawdziwy adres IP klienta tylko wtedy, gdy żądanie rzeczywiście przeszło przez Cloudflare. Zmodyfikuj nagłówki przekazywania IP w następujący sposób:
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
...
}Zapisz konfigurację i przeładuj usługę Nginx na hoście. Ponowne przebudowanie kontenera Discourse nie jest w tym kroku wymagane.
Walidacja i testowanie
Aby upewnić się, że konfiguracja sieciowa poprawnie przekazuje dane do ProxyTracer:
- Przejdź do panelu administracyjnego Discourse: Admin → Użytkownicy.
-
Sprawdź kolumny
IP rejestracjilubOstatni adres IPdla ostatnich aktywności.-
Niepoprawna konfiguracja: Jeśli widzisz adresy IP Cloudflare (zobacz tutaj pełną listę) lub lokalne adresy sieciowe (np.
127.0.0.1,172.x.x.x), przekazywanie IP nie działa poprawnie. ProxyTracer nie może chronić Twojej witryny w tym stanie. - Poprawna konfiguracja: Jeśli widzisz standardowe, unikalne adresy IP użytkowników, architektura sieciowa jest skonfigurowana prawidłowo i ProxyTracer aktywnie monitoruje ruch.
-
Niepoprawna konfiguracja: Jeśli widzisz adresy IP Cloudflare (zobacz tutaj pełną listę) lub lokalne adresy sieciowe (np.
Dostęp awaryjny
cd /var/discourse
./launcher enter app
rails c
SiteSetting.proxytracer_enabled = false
exit
exitLicencja
Ta wtyczka jest objęta licencją GNU Affero General Public License v3.0 (AGPLv3).