حماية البروكسي والصورة المشفرة و CDN من الروابط الساخنة

موقع Discourse الخاص بي مليء بالصور. نظرًا للعديد من الصور، أستخدم مزيجًا من S3/CDN لتخزين الصور وتقديمها. ضمن CDN، أستخدم تدابير مختلفة لمنع اختطاف الصور. أحد التدابير هو إيقاف جميع الوصول المباشر إلى الصور والسماح بالوصول فقط من قائمة أسماء المضيفين المحددة.

يعمل Discourse مع هذا الإعداد، باستثناء صور الأفاتار. تتوقف صور الأفاتار عن العمل عند تشغيل حماية الارتباط المباشر.

السبب هو أن Discourse يستخدم إعداد وكيل (proxy) لصور الأفاتار. يستخدم HTML رابط وكيل (proxy) لصور الأفاتار. هيكل الرابط هو https://discourse.forum/user_avatar/discourse.forums/username/24/616_2.png.
بمجرد حل رابط الوكيل (proxy)، يطلب المتصفح الوصول المباشر إلى ملف الصورة.

يمنع CDN الخاص بي الوصول المباشر بخطأ 403 عند إجراء هذا الطلب المباشر. وتصبح جميع صور الأفاتار المخصصة صورًا ظلية.

ما هي الخيارات المتاحة لدينا لإزالة الوكيل (proxy)؟
هل يمكننا تغيير صورة الأفاتار إلى هيكل ملف صورة قياسي؟

ألا يمكنك إضافة عنوان IP الخاص بـ Discourse إلى القائمة البيضاء؟

يأتي استدعاء رابط الوصول المباشر من عنوان IP الخاص بالمستخدم. يقوم الخادم بحل المعلومات، ولكن المتصفح المحلي يقوم بالاستدعاء.

لست متأكدًا من أن هذا يعمل بهذه الطريقة. اعتمادًا على التكوين الخاص بك، يقوم الوكيل بالوكالة فعليًا أو يبدأ شبكة توصيل المحتوى أولاً. هل يمكنك توضيح كيفية إعداد هذا؟

أكره الأسئلة الغامضة. ماذا كنت تفكر عندما طلبت “هذا”؟

هذه هي إعداداتي الحالية:

إعداد Discourse:

  • تثبيت قياسي في حاوية واحدة
  • تم الإعداد كعنوان فرعي: forums.domain.tld
  • إعداد S3 قياسي للملفات المحملة
  • يتم حفظ الملفات المحملة على S3

إعداد S3:

  • Digital Ocean S3 Bucket
  • تم تشغيل Bucket للوصول الخارجي
  • لا توجد طبقات أمان أو أذونات أخرى

إعداد CDN:

  • bunny CDN
  • تم إعداد المراجع المسموح بها: domain.tld و *.domain.tld
  • المفتاح الذي أدى إلى تعطيل الوصول إلى الصور الرمزية هو “حظر الوصول المباشر إلى ملفات URL”.

عند تشغيله، تلقت جميع الصور الرمزية خطأ 403. عند إيقافه، تظهر الصور الرمزية.

الصور غير الرمزية:

  • عنوان URL في Discourse: https://cdn.domain.tld/optimized/3X/3/1/filename_#_size.jpeg

الصور الرمزية:

  • عنوان URL في Discourse: https://forums.domain.tld/user_avatar/forums.domain.tld/mazzini/48/776_2.png

يشير منشور سابق، كيف يتم تخزين الصور الرمزية والوصول إليها؟، إلى أن Discourse يستخدم وكيلًا للصور الرمزية. وبالتالي، فإن بنية عنوان URL للصور الرمزية ليست بنية عنوان URL قياسية للصور.

ضمن نظامي، تتوفر الصور الرمزية إما من S3 أو CDN. يشير هذا إلى أنه في مكان ما/بطريقة ما يتم تحويل عنوان URL للصورة الرمزية إلى عنوان URL لـ CDN.

عندما يحدث هذا، يعتبر CDN عنوان URL رابط وصول مباشر ويحظر الوصول برمز 403.

آمل أن أكون قد أجبت على سؤال “هذا”؟

وأنا أكره عندما يرد الناس بهذه الطريقة عندما أقضي وقتي في مساعدتهم، لذا فهذا يجعلها تعادلًا :wink:.

نعم، و"وكيل" يعني أن الطلب يمر عبر Discourse. لا يقوم المتصفح بإجراء الطلب إلى شبكة توصيل المحتوى (CDN) بل يقوم Discourse بذلك.

هل قمت بإعداد شبكة توصيل المحتوى (CDN) كشبكة توصيل محتوى للموقع بالكامل أم كشبكة توصيل محتوى S3؟ أشك في الثانية. وفي هذه الحالة، يقوم Discourse بإجراء الطلب إلى شبكة توصيل المحتوى (CDN)، بدون مُحيل. ولكن لا يزال بإمكان شبكة توصيل المحتوى (CDN) التعرف على أنه طلب شرعي لأن الطلب ينشأ من عنوان IP الخاص بـ Discourse. ومن هنا تأتي نصيحتي بإدراجه في القائمة البيضاء.

تعديل: يمكنك التحقق عن طريق إيقاف تشغيل الحماية لفترة قصيرة والنظر في السجلات في Bunny، ومعرفة عناوين IP التي تأتي منها.

أقدر مساعدتك. بعد عقود عديدة من العمل في تطوير ودعم تكنولوجيا المعلومات، فإن الأسئلة والاستجابات الغامضة تخلق عملاً أكثر من اللازم. بناءً على خبرتك، أعتقد أنك ستتفق معي.

تم إعداد شبكة توصيل المحتوى (CDN) فقط لدلو S3.

لقد قمت بالتحقق من سجلات شبكة توصيل المحتوى (CDN) لعنوان IP الخاص بـ Discourse المتعلق بأخطاء 403 قبل تقديم الموضوع الأصلي. لم يكن موجودًا في ملفات السجل.

بناءً على تعليقاتك، عدت وأعدت تحليل السجلات. بعد مراجعة أكبر عناوين IP المخالفة، وجدت أن أعلى عنوانين هما بوابات لشركة الاستضافة.

التحدي هو أنني لا أرغب في تتبع عناوين IP لبوابة Digital Ocean حتى يتمكن خادم Discourse الخاص بي من عرض الصور بشكل صحيح.

شكراً للمساعدة.