التكامل مع خادم المصدر
تغطي هذه الصفحة مرحلتين من مراحل التكامل:
- التكامل المباشر — تقوم حافة CDN بإعادة التوجيه إلى خادم المصدر مباشرةً (اختبار خط الأساس)
- إدراج F5 XC — يُدرج موازن تحميل F5 XC HTTP بين CDN وخادم المصدر (عرض توضيحي للأمان)
ابدأ بالتكامل المباشر لإرساء خط الأساس، ثم أدرج F5 XC عند الاستعداد.
مرجع خادم المصدر
Section titled “مرجع خادم المصدر”يوفر مكوّن المختبر origin-server تطبيقات ويب تحتوي على ثغرات مخصصة لاختبار الأمان.
| الخاصية | القيمة |
|---|---|
| التوثيق | f5-sales-demo.github.io/origin-server |
| المستودع | github.com/f5-sales-demo/origin-server |
| المنفذ الافتراضي | 80 |
| فحص الصحة | GET /health |
التطبيقات المتاحة
Section titled “التطبيقات المتاحة”استرجع كتالوج التطبيقات الحالي من بيان خادم المصدر المنشور:
MANIFEST_URL=$(curl -sf https://api.github.com/repos/f5-sales-demo/origin-server/releases/latest \ | python3 -c "import sys,json; assets=json.load(sys.stdin).get('assets',[]); print(next((a['browser_download_url'] for a in assets if a['name']=='manifest.json'),''))")curl -sf "$MANIFEST_URL" | python3 -m json.toolإذا لم يكن هناك إصدار موجود بعد، استخدم مصدر المستودع مباشرةً:
curl -sf https://raw.githubusercontent.com/f5-sales-demo/origin-server/main/manifest.json | python3 -m json.toolيسرد البيان جميع مسارات التطبيقات وفحوصات الصحة وصور الحاويات وتعيينات ميزات العرض التوضيحي.
مسارات التطبيقات
Section titled “مسارات التطبيقات”| المسار | التطبيق | ميزات العرض التوضيحي |
|---|---|---|
/ | صفحة الهبوط | — |
/health | فحص الصحة | — |
/juice-shop/ | OWASP Juice Shop | جدار حماية تطبيقات الويب (WAF)، دفاع Bot، أمان API |
/dvwa/ | DVWA | جدار حماية تطبيقات الويب (WAF)، دفاع Bot |
/vampi/ | VAmPI | أمان API |
/httpbin/ | httpbin | التشخيصات |
/whoami/ | whoami | التحقق من الترويسات |
/csd-demo/ | CSD Demo | الدفاع من جهة العميل |
المرحلة الأولى: التكامل المباشر (خط الأساس)
Section titled “المرحلة الأولى: التكامل المباشر (خط الأساس)”┌──────────┐ ┌──────────────────────┐ ┌─────────────────────┐│ Client │────▶│ CDN Edge (NGINX) │────▶│ Origin Server ││ │ │ 20.65.90.112 │ │ 20.12.78.159 │└──────────┘ │ 67+ CDN headers │ │ Juice Shop, DVWA, │ │ Disk cache │ │ VAmPI, httpbin, │ └──────────────────────┘ │ whoami, CSD Demo │ └─────────────────────┘تهيئة خادم المصدر
Section titled “تهيئة خادم المصدر”عيّن عنوان IP لخادم المصدر في إعدادات NGINX لحافة CDN:
ssh azureuser@<CDN_EDGE_IP>sudo sed -i 's|proxy_pass .*;|proxy_pass http://<ORIGIN_IP>;|' /etc/nginx/conf.d/cdn-edge.confsudo rm -rf /var/cache/nginx/cdn/*sudo nginx -t && sudo systemctl reload nginxأو عيّنه عند وقت النشر عبر Terraform من خلال terraform.tfvars:
origin_server = "http://<ORIGIN_IP>"التحقق من جميع التطبيقات
Section titled “التحقق من جميع التطبيقات”اختبر كل تطبيق من تطبيقات خادم المصدر عبر CDN:
CDN=<CDN_EDGE_IP>
# فحص الصحة (محلي على CDN)curl -sf "http://$CDN/health" | python3 -m json.tool
# صفحة الهبوطcurl -sf -o /dev/null -w "/ : HTTP %{http_code}\n" "http://$CDN/"
# Juice Shopcurl -sf -o /dev/null -w "/juice-shop/ : HTTP %{http_code}\n" "http://$CDN/juice-shop/"
# DVWA (يتبع إعادة التوجيه إلى صفحة تسجيل الدخول)curl -sf -o /dev/null -w "/dvwa/ : HTTP %{http_code}\n" -L "http://$CDN/dvwa/"
# VAmPI APIcurl -sf "http://$CDN/vampi/users/v1" | python3 -m json.tool | head -5
# ترويسات httpbin (تعرض ترويسات CDN بصيغة JSON)curl -sf "http://$CDN/httpbin/headers" | python3 -m json.tool | head -10
# whoami (يعرض جميع الترويسات التي يستقبلها خادم المصدر)curl -sf "http://$CDN/whoami/"
# CSD Democurl -sf -o /dev/null -w "/csd-demo/ : HTTP %{http_code}\n" "http://$CDN/csd-demo/"يجب أن تُعيد جميع المسارات HTTP 200 (تُعيد DVWA الاستجابة 302 ثم 200 عند المتابعة).
التحقق من ترويسات CDN عند خادم المصدر
Section titled “التحقق من ترويسات CDN عند خادم المصدر”تعرض نقطة النهاية /whoami/ كل ترويسة يستقبلها خادم المصدر. عند الوصول إليها عبر CDN، تعرض جميع ترويسات البائع البالغة 67 أو أكثر:
curl -sf "http://$CDN/whoami/"تحقق من وجود هذه الترويسات الرئيسية:
| البائع | الترويسة | القيمة المتوقعة |
|---|---|---|
| قياسي | X-Forwarded-For | <your_ip>, <cdn_edge_ip> |
| Akamai | True-Client-Ip | <your_ip> |
| Cloudflare | Cf-Connecting-Ip | <your_ip> |
| CloudFront | Cloudfront-Viewer-Country | US |
| Fastly | Fastly-Client-Ip | <your_ip> |
| Azure FD | X-Azure-Clientip | <your_ip> |
الربط التبادلي للسجلات
Section titled “الربط التبادلي للسجلات”قارن سجلات الوصول على كلا الخادمين للتحقق من تدفق حركة المرور:
# سجل حافة CDN — يعرض عنوان IP الخاص بعميلك كمصدرssh azureuser@<CDN_EDGE_IP> "sudo tail -5 /var/log/nginx/access.log"
# سجل خادم المصدر — يعرض عنوان IP لحافة CDN كمصدرssh azureuser@<ORIGIN_IP> "sudo tail -5 /var/log/nginx/access.log"يجب أن يعرض سجل خادم المصدر عنوان IP لحافة CDN باعتباره العميل المتصل، بينما يُنقل عنوان IP الفعلي للعميل عبر X-Forwarded-For والترويسات الخاصة بكل بائع.
سلوك ذاكرة التخزين المؤقت
Section titled “سلوك ذاكرة التخزين المؤقت”# الطلب الأول — MISS (مُسترجع من خادم المصدر)curl -s -I "http://$CDN/whoami/" | grep X-Cache-Status
# الطلب الثاني — HIT (مُقدَّم من ذاكرة تخزين CDN المؤقتة)curl -s -I "http://$CDN/whoami/" | grep X-Cache-Statusالمرحلة الثانية: إدراج F5 XC (العرض التوضيحي للأمان)
Section titled “المرحلة الثانية: إدراج F5 XC (العرض التوضيحي للأمان)”بعد اختبار خط الأساس، أدرج موازن تحميل F5 XC HTTP بين CDN وخادم المصدر:
┌──────────┐ ┌────────────────┐ ┌──────────────────┐ ┌─────────────────┐│ Client │────▶│ CDN Edge │────▶│ F5 XC HTTP LB │────▶│ Origin Server ││ │ │ (NGINX) │ │ WAF + Bot + API │ │ │└──────────┘ └────────────────┘ └──────────────────┘ └─────────────────┘- أنشئ موازن تحميل F5 XC HTTP مع إضافة خادم المصدر في مجموعة المصادر الخاصة به
- حدّث حافة CDN لتشير إلى VIP الخاص بـ F5 XC بدلاً من الإشارة المباشرة إلى خادم المصدر:
ssh azureuser@<CDN_EDGE_IP>sudo sed -i 's|proxy_pass .*;|proxy_pass https://<F5XC_LB_VIP>;|' /etc/nginx/conf.d/cdn-edge.confsudo rm -rf /var/cache/nginx/cdn/*sudo nginx -t && sudo systemctl reload nginx- تحقق من تطبيق WAF عبر السلسلة الكاملة:
# حقن SQL عبر CDN ← يجب أن يحجب جدار حماية تطبيقات الويب (WAF) الخاص بـ F5 XC هذا الطلبcurl -I "http://$CDN/dvwa/vulnerabilities/sqli/?id=%27+OR+1%3D1--"
# يجب أن يمر الطلب العاديcurl -sf -o /dev/null -w "%{http_code}" "http://$CDN/juice-shop/"- هيّئ ترويسة IP العميل الموثوق في F5 XC لقراءة عنوان IP الفعلي للعميل من ترويسات CDN (مثلاً:
True-Client-IPلمحاكاة Akamai، وCF-Connecting-IPلمحاكاة Cloudflare)
بنية متعددة المكونات
Section titled “بنية متعددة المكونات”| المكوّن | المستودع | الغرض |
|---|---|---|
| حافة CDN (هذا) | cdn-simulator | التخزين المؤقت وترويسات البائع |
| خادم المصدر | origin-server | تطبيقات الويب المكشوفة |
| إعدادات F5 XC | متنوعة (waf, api-protection, bot-*, إلخ) | سياسات الأمان |
ينشر كل مكوّن وثائق تقرأها مساعدات الذكاء الاصطناعي لنشر البنية التحتية. يُصدر خادم المصدر بيان نقطة النهاية كأداة إصدار على GitHub تسرد جميع مسارات التطبيقات وفحوصات الصحة.