تأمين OpenReplay

قم بتأمين OpenReplay عن طريق تكوين SSL وreCaptcha.

تأمين OpenReplay

تقييد الوصول إلى العقدة

Section titled تقييد الوصول إلى العقدة

يُوصى بشدة بالسماح فقط بفتح المنفذين 80/443 على الجهاز باستخدام مجموعات الأمان. توجد بعض المكونات التي تستمع إلى العنوان 0.0.0.0 لتسهيل الاتصال الشبكي، مثل واجهة برمجة تطبيقات خادم k3s، وواجهة برمجة تطبيقات flannel، وما إلى ذلك.

إذا كنت تستخدم شهادتك الخاصة، فأنشئ سرّ SSL باستخدام الأمر التالي: kubectl create secret tls openreplay-ssl -n app --key="private_key_file.pem" --cert="certificate.crt".

ملاحظة: إذا لم تكن لديك شهادة، فأنشئ شهادة ذاتية التجديد للنطاق الفرعي الخاص بك (النطاق الذي قدمته أثناء التثبيت) باستخدام Let’s Encrypt. ما عليك سوى الاتصال بمثيل OpenReplay، وتشغيل cd openreplay/scripts/helmcharts && bash certmanager.sh واتباع الخطوات.

إذا كنت ترغب في تمكين إعادة التوجيه من http إلى https (موصى به)، فقم بتحرير التكوين باستخدام openreplay -e، ثم قم بإلغاء التعليق على الكتلة أدناه، ضمن قسم ingress-nginx:

ingress-nginx: &ingress-nginx
  controller:
    config:
      ssl-redirect: true
      force-ssl-redirect: true

ملاحظة: يعمل ingress-nginx الخاص بنا افتراضيًا على المنفذين 80|443، ولكن يمكن تغيير ذلك بسهولة، عند الحاجة، في vars.yaml:

ingress-nginx: &ingress-nginx
  controller:
    service:
      ports:
        http: 80
        https: 443

احفظ واخرج باستخدام :wq لإعادة تحميل الخدمة.

للإشارة إلى ما إذا كان يجب السماح للمتصفح بعرض صفحة في <frame>, <iframe>, <embed> أو <object> وتجنب هجمات الاختطاف بالنقر (click-jacking)، قم بتعيين ترويسة الاستجابة X-Frame-Options عن طريق تحرير التكوين باستخدام openreplay -e:

ingress-nginx: &ingress-nginx
  controller:
    addHeaders:
      X-Frame-Options: "SAMEORIGIN"

ثم احفظ واخرج باستخدام :wq لإعادة تحميل الخدمة.

يدعم OpenReplay خدمة reCaptcha (الإصدار الثاني) لمزيد من الأمان. لتمكين هذه الحماية:

  1. احصل على مفتاح reCaptcha من الإصدار الثاني من Google، مع تمكين الوضع invisible، أي عدم المطالبة بـ tick I am not a human.
  2. افتح /var/lib/openreplay/vars.yaml ثم قم بإلغاء التعليق وتحديث متغيرات البيئة أدناه في قسم chalice:
  1. حرّر ملف .env في openreplay/frontend/ (انسخ .env.sample إذا لم يكن موجودًا) واستبدل المتغير CAPTCHA_SITE_KEY بمفتاح موقع reCaptcha الخاص بك.
  2. أعد بناء الواجهة الأمامية (frontend):
cd openreplay/frontend
IMAGE_TAG=my-custom-image PUSH_IMAGE=1 DOCKER_REPO=my-docker-user-name bash -x build.sh
  1. افتح /var/lib/openreplay/vars.yaml وحدد صورة الواجهة الأمامية التي بنيتها حديثًا في كتلة frontend:
frontend:
  image:
    repository: "my-docker-username/frontend"
    tag: "my-custom-image"
  1. أعد تشغيل خدمتي الواجهة الأمامية وخادم الويب لتسري التغييرات:
 openreplay -R

سياسة أمان المحتوى (CSP)

Section titled سياسة أمان المحتوى (CSP)

فيما يلي مثال على سياسة (CSP) للسماح لـ OpenReplay بتسجيل الجلسات. يجب تكييف هذا المثال بناءً على نطاقك ومتطلبات الأمان لديك:

worker-src ‘self’ blob: https://openreplay.mycompany.com https://*.openreplay.com; script-src ‘self’ https://openreplay.mycompany.com https://*.openreplay.com;

لتطبيق سياسة CSP الخاصة بك على NGINX، اتصل بمثيل OpenReplay الخاص بك واتبع الخطوات أدناه:

  1. شغّل openreplay -e وأضف سياسة CSP الخاصة بك في كتلة frontend. تأكد من التحديث
frontend:
  ingress:
    cspSnippet: |
      add_header Content-Security-Policy "worker-src 'self' blob: https://openreplay.mycompany.com https://*.openreplay.com; script-src 'self' https://openreplay.mycompany.com https://*.openreplay.com;";

ملاحظة: تأكد من استبدال جميع مواضع ظهور https://openreplay.mycompany.com في سياسة CSP أعلاه باسم نطاق OpenReplay الخاص بك. يجب أن تكون القيمة نفسها مثل DOMAIN_NAME في ملف /var/lib/openreplay/vars.yaml.

  1. احفظ واخرج باستخدام :wq لتطبيق سياسة CSP التي أضفتها حديثًا

يُسمح بالطلبات عبر النطاقات، افتراضيًا، من جميع المصادر (Access-Control-Allow-Origin: *). إذا كنت ترغب في تقييد التسجيلات على عدد قليل من النطاقات فقط، فشغّل openreplay -e وقم بتحديث كتلة http بإضافة التعليقات التوضيحية (annotations) أدناه:

http:
  ingress:
    annotations:
      nginx.ingress.kubernetes.io/cors-allow-methods: POST
      nginx.ingress.kubernetes.io/cors-allow-headers: Content-Type,Authorization,Content-Encoding
      nginx.ingress.kubernetes.io/cors-allow-origin: https://app1.mycompany.com,https://app2.mycompany.com,https://*.mycompany.com
      nginx.ingress.kubernetes.io/enable-cors: "true"
			nginx.ingress.kubernetes.io/cors-expose-headers: "Content-Length"

ثم احفظ واخرج باستخدام :wq لتطبيق سياسة CSP التي أضفتها حديثًا.

إذا كانت لديك أي أسئلة حول هذه العملية، فلا تتردد في التواصل معنا على Slack الخاص بنا أو الاطلاع على المنتدى الخاص بنا.