Skip to Content

Discourse

Discourse için resmi ProxyTracer entegrasyonu. Bu eklenti topluluğunuza kurumsal düzeyde IP istihbaratı kazandırarak bilinen VPN'leri, proxy'leri, veri merkezlerini ve Tor çıkış düğümlerini otomatik olarak tespit eder; kayıt olmalarını, giriş yapmalarını veya Discourse forumunuzu tamamen görüntülemelerini engelleme seçeneği sunar.

Eklenti bu GitHub deposu üzerinden dağıtılmaktadır.

Özellikler

  • Yöneticilerin yeni kullanıcı kayıtları, mevcut kullanıcı girişleri veya genel olarak tüm site ziyaretçileri için IP doğrulamasını zorunlu kılmasına olanak tanıyan ayrıntılı denetim.
  • Yerleşik Redis önbelleği son IP adresi değerlendirmelerini saklayarak harici API çağrılarını büyük ölçüde azaltır ve sıfır gecikme sağlar.
  • API zaman aşımı veya ağ arızası durumunda eklenti, geniş çaplı erişim kilitlenmelerini önlemek için kullanıcı erişimine öncelik verir (fail-open). Bu davranış seçenekler üzerinden değiştirilebilir.
  • Tam IP ve CIDR alt ağ beyaz listesi (whitelist) için yerleşik destek.

Kurulum

  1. Sunucunuza SSH ile bağlanın ve Discourse dizininize gidin:
    cd /var/discourse
  2. Düzenlemek için konteyner yapılandırma dosyanızı açın:
    nano containers/app.yml
  3. hooks bölümünü bulun ve depo klonlama komutunu doğrudan docker_manager kurulumunun hemen altına ekleyin:
    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
  4. Yapılandırma dosyasını kaydedin ve eklentiyi derlemek için Discourse konteynerinizi yeniden oluşturun:
    ./launcher rebuild app

Yapılandırma:

  1. ProxyTracer Kontrol Panelinden standart bir API anahtarı edinin.
  2. ProxyTracer ayarlarını bulmak için Discourse yönetim panelinize gidin: Yönetici → Eklentiler → ProxyTracer.
  3. API anahtarınızı ProxyTracer API Key alanına girin.
  4. Enabled during Signup, Enabled during Login ve/veya Enabled for All Visitors seçeneklerini etkinleştirerek koruma parametrelerini açın.
  5. Güvenilir IP'leri veya CIDR aralıklarını Whitelisted IPs listesine ekleyin.
  6. (İsteğe bağlı) API zaman aşımını ve Redis önbellek süresi sınırlarını sunucunuzun özel trafik gereksinimlerine göre ayarlayın.
  7. (İsteğe bağlı) Engellenen kullanıcılara gösterilecek Engelleme Mesajını özelleştirin. Örneğin, engellemenin hatalı olduğunu düşünen kullanıcılar için site yönetimiyle iletişime geçme yönergeleri ekleyebilirsiniz.

Settings Screenshot

Ağ Yapılandırması: Cloudflare ve Ters Proxy'ler

ProxyTracer'ın doğru çalışabilmesi için Discourse uygulamasının gerçek istemci IP adresini alması gerekir. Altyapınız Cloudflare veya başka bir ters proxy kullanıyorsa, Discourse varsayılan olarak proxy düğümünün IP adresini kaydedebilir ve bu da ProxyTracer'ın tespitlerini geçersiz kılabilir.

Doğru IP iletimini sağlamak için lütfen sunucu mimarinize uygun aşağıdaki yapılandırma yönergelerini izleyin.

Doğrudan Cloudflare Entegrasyonu (Standart Kurulum)

Bu ayar, Discourse sunucunuzun doğrudan internete bağlı olduğu ve Cloudflare'i yalnızca DNS ve edge proxy için kullandığı standart kurulumlar için geçerlidir. Bu durumda Discourse'u Cloudflare IP aralıklarına güvenecek ve gelen başlıklardan gerçek istemci IP'sini çıkaracak şekilde yapılandırmanız gerekir.

  1. Sunucunuza SSH ile bağlanın ve konteyner yapılandırmanızı düzenleyin: nano /var/discourse/containers/app.yml
  2. templates: bloğunu bulun ve resmi Cloudflare şablonunu ekleyin: templates/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"
  3. Dosyayı kaydedin ve değişiklikleri uygulamak için Discourse konteynerini yeniden derleyin: ./launcher rebuild app

Çok Katmanlı Proxy Mimarisi (Cloudflare + Yerel Ters Proxy)

Bu senaryo, Discourse sunucunuz Cloudflare'in arkasında yerel bir sunucu yönetim paneli veya ters proxy (ör. CloudPanel, Nginx Proxy Manager, Traefik, Plesk) üzerinden yönlendirildiğinde geçerlidir. Çok katmanlı bir ters proxy mimarisinde, trafik Discourse'a doğrudan Cloudflare tarafından değil yerel ağ arayüzünüz tarafından iletildiği için standart cloudflare.template.yml şablonu çalışmaz. Bu senaryoda Cloudflare şablonunu kullanmayın.

Bunun yerine yerel ters proxy'nizi, gerçek istemci IP'sini CF-Connecting-IP başlığından çıkaracak şekilde yapılandırmalısınız; ancak bu işlem yalnızca güvenilir Cloudflare IP adreslerinden gelen trafik için yapılmalıdır. Kaynağı doğrulamadan bu başlığı doğrudan iletmek, kötü niyetli kullanıcıların IP başlıklarını taklit ederek hız sınırlarını ve yasakları atlamasına olanak tanır.

Nginx Örneği: İlk olarak, server bloğu yapılandırmanızda (location bloğunun dışında) Cloudflare IP aralıklarını güvenilir proxy'ler olarak tanımlayın:
# IPv4 Cloudflare IP'leri, bkz. 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; # IPv6 Cloudflare IP'leri 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;

Ardından location / veya @reverse_proxy yönergenizi bulun. Yukarıdaki yapılandırma sayesinde Nginx, yalnızca istek gerçekten Cloudflare üzerinden geçmişse $remote_addr değişkenini gerçek istemci IP'sine güvenle çözecektir. IP iletme başlıklarınızı aşağıdaki gibi düzenleyin:

location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ... }

Yapılandırmayı kaydedin ve ana sunucunuzun Nginx servisini yeniden yükleyin (systemctl reload nginx). Bu adım için Discourse konteynerini yeniden derlemek gerekmez.

Doğrulama ve Test

Ağ yapılandırmanızın ProxyTracer'a doğru verileri ilettiğini doğrulamak için:

  1. Discourse yönetim panelinize gidin: Yönetici → Kullanıcılar.
  2. Son aktiviteler için Kayıt IP'si veya Son IP sütunlarını inceleyin.
    • Hatalı Kurulum: Cloudflare IP'leri (tam liste için buraya bakın) veya yerel ağ IP'leri (ör. 127.0.0.1, 172.x.x.x) görüyorsanız, IP iletme yapılandırması başarısız olmuştur. ProxyTracer bu durumda sitenizi koruyamaz.
    • Doğru Kurulum: Standart, benzersiz konut IP adresleri görüyorsanız, ağ mimariniz doğru yapılandırılmıştır ve ProxyTracer trafiğinizi aktif olarak denetlemektedir.

Acil Durum Erişimi

💡
Erişiminiz mi kesildi? ProxyTracer'ı yapılandırırken yanlışlıkla kendi IP adresinizi engellerseniz (örneğin o sırada bir VPN'e bağlıysanız), eklentiyi SSH üzerinden devre dışı bırakarak erişimi yeniden kazanabilirsiniz:
cd /var/discourse ./launcher enter app rails c SiteSetting.proxytracer_enabled = false exit exit

Lisans

Bu eklenti GNU Affero Genel Kamu Lisansı v3.0 (AGPLv3) kapsamında lisanslanmıştır.

Son güncelleme tarihi