Discourse
التكامل الرسمي لـ ProxyTracer مع منصة Discourse. يضيف هذا الملحق استخبارات IP المؤسسية لمجتمعك، ويكتشف تلقائياً شبكات VPN والبروكسيات ومراكز البيانات وعقد Tor المعروفة، ويمنحك خيار منعهم من التسجيل، أو تسجيل الدخول، أو حتى عرض منتدى Discourse بالكامل.
يتم توزيع هذا الملحق عبر مستودع Github هذا.
الميزات
- تحكم دقيق يسمح للمشرفين بفرض التحقق من IP أثناء تسجيل الأعضاء الجدد، أو مصادقة الأعضاء الحاليين، أو عالمياً لجميع زوار الموقع.
- تخزين مؤقت مدمج عبر Redis يخزن تقييمات عناوين IP الحديثة، مما يقلل استدعاءات API الخارجية بشكل كبير ويضمن صفر زمن تأخير.
- في حال انقضاء مهلة API أو انقطاع الشبكة، يمنح الملحق الأولوية لوصول المستخدم لمنع حالات الحظر واسعة النطاق. يمكن تعديل هذا السلوك عبر الخيارات.
- دعم مدمج للقائمة البيضاء لعناوين IP المحددة ونطاقات شبكات CIDR الفرعية.
التثبيت
-
اتصل بخادمك عبر SSH وتوجه إلى مجلد Discourse الخاص بك:
cd /var/discourse -
افتح ملف تكوين الحاوية للتعديل:
nano containers/app.yml -
حدد قسم
hooksوأضف أمر استنساخ المستودع مباشرة أسفل تثبيت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 -
احفظ ملف التكوين وأعد بناء حاوية Discourse لتجميع الملحق:
./launcher rebuild app
التكوين:
- احصل على مفتاح API قياسي من لوحة تحكم ProxyTracer.
- انتقل إلى لوحة إدارة Discourse: الإدارة ← الملحقات ← ProxyTracer للعثور على إعدادات ProxyTracer.
-
أدخل مفتاح API الخاص بك في حقل
ProxyTracer API Key. -
قم بتفعيل معلمات الحماية بتبديل
Enabled during SignupوEnabled during Loginو/أوEnabled for All Visitors. -
أضف أي عناوين IP أو نطاقات CIDR موثوقة إلى قائمة
Whitelisted IPs. - (اختياري) اضبط مهلة API ومدة التخزين المؤقت في Redis بما يناسب متطلبات حركة المرور الخاصة بخادمك.
- (اختياري) خصص رسالة الحظر التي تظهر للمستخدمين المحظورين. على سبيل المثال، يمكنك إضافة إرشادات للتواصل مع إدارة الموقع في حال اعتقدوا أن الحظر غير مبرر وأنهم لا يتصلون عبر بروكسي أو VPN.

تكوين الشبكة: Cloudflare والبروكسيات العكسية
يرجى اتباع إرشادات التكوين أدناه المطابقة لبنية خادمك لضمان التمرير الدقيق لعناوين IP.
التكامل المباشر مع Cloudflare (التثبيت القياسي)
ينطبق هذا إذا كان خادم Discourse الخاص بك يتصل مباشرة بالإنترنت ويستخدم Cloudflare حصرياً لـ DNS والبروكسي الحافي. في هذا الإعداد القياسي، يجب عليك تكوين Discourse للوثوق بنطاقات IP لـ Cloudflare واستخراج IP الحقيقي للعميل من الترويسات الواردة.
-
اتصل بخادمك عبر SSH وعدل تكوين الحاوية:
nano /var/discourse/containers/app.yml -
حدد كتلة
templates:وأضف قالب Cloudflare الرسمي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" -
احفظ الملف وأعد بناء حاوية Discourse لتطبيق التغييرات:
./launcher rebuild app
بنية البروكسي متعددة الطبقات (Cloudflare + بروكسي عكسي محلي)
ينطبق هذا إذا كان مثيل Discourse موجهاً عبر لوحة إدارة خادم محلية أو بروكسي عكسي (مثل CloudPanel أو Nginx Proxy Manager أو Traefik أو Plesk) موجود خلف Cloudflare. في بنية البروكسي العكسي متعددة الطبقات (أو المزدوجة)، سيفشل قالب Discourse القياسي cloudflare.template.yml لأن حركة المرور تسلم لـ Discourse بواسطة واجهة شبكتك المحلية وليس مباشرة من Cloudflare. لا تستخدم قالب Cloudflare في هذا السيناريو.
بدلاً من ذلك، يجب عليك تكوين البروكسي العكسي المحلي لاستخراج IP الحقيقي للعميل من ترويسة CF-Connecting-IP، ولكن فقط لحركة المرور القادمة من عناوين IP الموثوقة لـ Cloudflare. تمرير هذه الترويسة دون التحقق من المصدر يسمح للمستخدمين الخبثاء بتجاوز الحدود والحظر بتزييف عنوان IP الخاص بهم.
# عناوين IPv4 لـ Cloudflare، راجع 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
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;بعد ذلك، حدد تعليمة location / أو @reverse_proxy. بفضل التكوين أعلاه، سيحل Nginx الآن $remote_addr بأمان إلى عنوان IP الحقيقي للعميل فقط إذا مر الطلب بالفعل عبر Cloudflare. عدل ترويسات تمرير IP كالتالي:
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
...
}احفظ التكوين وأعد تحميل خدمة Nginx في مضيفك. لا يلزم إعادة بناء حاوية Discourse لهذه الخطوة.
التحقق والاختبار
للتحقق من أن تكوين الشبكة لديك يمرر البيانات الصحيحة بنجاح إلى ProxyTracer:
- انتقل إلى لوحة إدارة Discourse: الإدارة ← المستخدمون.
-
راجع أعمدة
Registration IPأوLast IPلمعرفة أحدث الأنشطة.-
إعداد غير صحيح: إذا لاحظت عناوين IP تابعة لـ Cloudflare (انظر هنا للقائمة الكاملة) أو عناوين شبكة محلية (مثل
127.0.0.1أو172.x.x.x)، فإن تمرير IP يفشل. لا يمكن لـ ProxyTracer حماية موقعك في هذه الحالة. - إعداد صحيح: إذا لاحظت عناوين IP سكنية قياسية وفريدة، فإن بنية شبكتك مهيأة بشكل صحيح و ProxyTracer يراقب حركة المرور بنشاط.
-
إعداد غير صحيح: إذا لاحظت عناوين IP تابعة لـ Cloudflare (انظر هنا للقائمة الكاملة) أو عناوين شبكة محلية (مثل
الوصول في حالات الطوارئ
cd /var/discourse
./launcher enter app
rails c
SiteSetting.proxytracer_enabled = false
exit
exitالترخيص
هذا الملحق مرخص بموجب رخصة جنو أفيرو العمومية الإصدار 3.0 (AGPLv3).