تأمين OpenReplay
تقييد الوصول إلى العقدة
Section titled تقييد الوصول إلى العقدةيُوصى بشدة بالسماح فقط بفتح المنفذين 80/443 على الجهاز باستخدام مجموعات الأمان. توجد بعض المكونات التي تستمع إلى العنوان 0.0.0.0 لتسهيل الاتصال الشبكي، مثل واجهة برمجة تطبيقات خادم k3s، وواجهة برمجة تطبيقات flannel، وما إلى ذلك.
تكوين SSL
Section titled تكوين SSLإذا كنت تستخدم شهادتك الخاصة، فأنشئ سرّ 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 لإعادة تحميل الخدمة.
تعزيز X-Frame-Options
Section titled تعزيز X-Frame-Optionsللإشارة إلى ما إذا كان يجب السماح للمتصفح بعرض صفحة في <frame>, <iframe>, <embed> أو <object> وتجنب هجمات الاختطاف بالنقر (click-jacking)، قم بتعيين ترويسة الاستجابة X-Frame-Options عن طريق تحرير التكوين باستخدام openreplay -e:
ingress-nginx: &ingress-nginx
controller:
addHeaders:
X-Frame-Options: "SAMEORIGIN"
ثم احفظ واخرج باستخدام :wq لإعادة تحميل الخدمة.
إعداد reCaptcha
Section titled إعداد reCaptchaيدعم OpenReplay خدمة reCaptcha (الإصدار الثاني) لمزيد من الأمان. لتمكين هذه الحماية:
- احصل على مفتاح reCaptcha من الإصدار الثاني من Google، مع تمكين الوضع
invisible، أي عدم المطالبة بـtick I am not a human. - افتح
/var/lib/openreplay/vars.yamlثم قم بإلغاء التعليق وتحديث متغيرات البيئة أدناه في قسمchalice:
captcha_server: عنوان URL لخدمة reCaptcha الخاصة بك (مثل https://www.google.com/recaptcha/api/siteverify)captcha_key: مفتاح reCaptcha السري الخاص بك
- حرّر ملف
.envفيopenreplay/frontend/(انسخ.env.sampleإذا لم يكن موجودًا) واستبدل المتغيرCAPTCHA_SITE_KEYبمفتاح موقع reCaptcha الخاص بك. - أعد بناء الواجهة الأمامية (frontend):
cd openreplay/frontend
IMAGE_TAG=my-custom-image PUSH_IMAGE=1 DOCKER_REPO=my-docker-user-name bash -x build.sh
- افتح
/var/lib/openreplay/vars.yamlوحدد صورة الواجهة الأمامية التي بنيتها حديثًا في كتلةfrontend:
frontend:
image:
repository: "my-docker-username/frontend"
tag: "my-custom-image"
- أعد تشغيل خدمتي الواجهة الأمامية وخادم الويب لتسري التغييرات:
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 الخاص بك واتبع الخطوات أدناه:
- شغّل
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.
- احفظ واخرج باستخدام
:wqلتطبيق سياسة CSP التي أضفتها حديثًا
تمكين CORS
Section titled تمكين CORSيُسمح بالطلبات عبر النطاقات، افتراضيًا، من جميع المصادر (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 التي أضفتها حديثًا.
هل لديك أسئلة؟
Section titled هل لديك أسئلة؟إذا كانت لديك أي أسئلة حول هذه العملية، فلا تتردد في التواصل معنا على Slack الخاص بنا أو الاطلاع على المنتدى الخاص بنا.