ข้ามไปยังเนื้อหา

ผสานการทำงานกับเซิร์ฟเวอร์ต้นทาง

หน้านี้ครอบคลุมสองขั้นตอนของการผสานการทำงาน:

  1. การผสานงานโดยตรง — CDN edge ส่งต่อไปยังเซิร์ฟเวอร์ต้นทางโดยตรง (การทดสอบพื้นฐาน)
  2. F5 XC insertion — F5 XC HTTP load balancer แทรกระหว่าง CDN และต้นทาง (การสาธิตความปลอดภัย)

เริ่มต้นด้วยการผสานงานโดยตรงเพื่อสร้างฐานอ้างอิง จากนั้นแทรก F5 XC เมื่อพร้อม

ส่วนประกอบห้องปฏิบัติการ origin-server ให้บริการแอปพลิเคชันเว็บที่มีช่องโหว่สำหรับการทดสอบความปลอดภัย

คุณสมบัติค่า
เอกสารf5-sales-demo.github.io/origin-server
ที่เก็บโค้ดgithub.com/f5-sales-demo/origin-server
พอร์ตเริ่มต้น80
การตรวจสอบสุขภาพGET /health

ดึงแคตตาล็อกแอปพลิเคชันปัจจุบันจาก manifest ที่เผยแพร่ของ origin-server:

Terminal window
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

หากยังไม่มี release ให้ใช้แหล่งที่มาของที่เก็บโค้ดโดยตรง:

Terminal window
curl -sf https://raw.githubusercontent.com/f5-sales-demo/origin-server/main/manifest.json | python3 -m json.tool

manifest แสดงรายการเส้นทางแอปพลิเคชัน การตรวจสอบสุขภาพ container image และการแมปฟีเจอร์สาธิตทั้งหมด

เส้นทางแอปพลิเคชันฟีเจอร์สาธิต
/หน้า Landing
/healthการตรวจสอบสุขภาพ
/juice-shop/OWASP Juice Shopไฟร์วอลล์แอปเว็บ (WAF), การป้องกัน Bot มาตรฐาน, ความปลอดภัย API
/dvwa/DVWAไฟร์วอลล์แอปเว็บ (WAF), การป้องกัน Bot มาตรฐาน
/vampi/VAmPIความปลอดภัย API
/httpbin/httpbinการวินิจฉัย
/whoami/whoamiการตรวจสอบ header
/csd-demo/CSD Demoการป้องกันฝั่งไคลเอนต์
┌──────────┐ ┌──────────────────────┐ ┌─────────────────────┐
│ 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 │
└─────────────────────┘

ตั้งค่า IP ของเซิร์ฟเวอร์ต้นทางในไฟล์คอนฟิก NGINX ของ CDN edge:

Terminal window
ssh azureuser@<CDN_EDGE_IP>
sudo sed -i 's|proxy_pass .*;|proxy_pass http://<ORIGIN_IP>;|' /etc/nginx/conf.d/cdn-edge.conf
sudo rm -rf /var/cache/nginx/cdn/*
sudo nginx -t && sudo systemctl reload nginx

หรือตั้งค่าในขณะ deploy ด้วย Terraform ผ่าน terraform.tfvars:

origin_server = "http://<ORIGIN_IP>"

ทดสอบแต่ละแอปพลิเคชันต้นทางผ่าน CDN:

Terminal window
CDN=<CDN_EDGE_IP>
# การตรวจสอบสุขภาพ (CDN local)
curl -sf "http://$CDN/health" | python3 -m json.tool
# หน้า Landing
curl -sf -o /dev/null -w "/ : HTTP %{http_code}\n" "http://$CDN/"
# Juice Shop
curl -sf -o /dev/null -w "/juice-shop/ : HTTP %{http_code}\n" "http://$CDN/juice-shop/"
# DVWA (ติดตาม redirect ไปยัง login)
curl -sf -o /dev/null -w "/dvwa/ : HTTP %{http_code}\n" -L "http://$CDN/dvwa/"
# VAmPI API
curl -sf "http://$CDN/vampi/users/v1" | python3 -m json.tool | head -5
# httpbin headers (แสดง CDN headers ในรูปแบบ JSON)
curl -sf "http://$CDN/httpbin/headers" | python3 -m json.tool | head -10
# whoami (แสดง header ทั้งหมดที่ต้นทางได้รับ)
curl -sf "http://$CDN/whoami/"
# CSD Demo
curl -sf -o /dev/null -w "/csd-demo/ : HTTP %{http_code}\n" "http://$CDN/csd-demo/"

เส้นทางทั้งหมดควรส่งคืน HTTP 200 (DVWA ส่งคืน 302 แล้ว 200 เมื่อติดตาม)

endpoint /whoami/ แสดง header ทุกรายการที่ต้นทางได้รับ เมื่อเข้าถึงผ่าน CDN จะแสดง header ของผู้ขายทั้งหมด 67+ รายการ:

Terminal window
curl -sf "http://$CDN/whoami/"

ตรวจสอบว่า header สำคัญเหล่านี้มีอยู่:

ผู้ขายHeaderค่าที่คาดหวัง
มาตรฐานX-Forwarded-For<your_ip>, <cdn_edge_ip>
AkamaiTrue-Client-Ip<your_ip>
CloudflareCf-Connecting-Ip<your_ip>
CloudFrontCloudfront-Viewer-CountryUS
FastlyFastly-Client-Ip<your_ip>
Azure FDX-Azure-Clientip<your_ip>

เปรียบเทียบบันทึกการเข้าถึงบนทั้งสองเซิร์ฟเวอร์เพื่อตรวจสอบการไหลของทราฟฟิก:

Terminal window
# บันทึก CDN edge — แสดง IP ของไคลเอนต์ของคุณเป็นต้นทาง
ssh azureuser@<CDN_EDGE_IP> "sudo tail -5 /var/log/nginx/access.log"
# บันทึกต้นทาง — แสดง IP ของ CDN edge เป็นต้นทาง
ssh azureuser@<ORIGIN_IP> "sudo tail -5 /var/log/nginx/access.log"

บันทึกต้นทางควรแสดง IP ของ CDN edge เป็นไคลเอนต์ที่เชื่อมต่อ ในขณะที่ IP ของไคลเอนต์จริงถูกส่งผ่าน X-Forwarded-For และ header เฉพาะของผู้ขาย

Terminal window
# คำขอแรก — 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 HTTP load balancer ระหว่าง CDN และต้นทาง:

┌──────────┐ ┌────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Client │────▶│ CDN Edge │────▶│ F5 XC HTTP LB │────▶│ Origin Server │
│ │ │ (NGINX) │ │ WAF + Bot + API │ │ │
└──────────┘ └────────────────┘ └──────────────────┘ └─────────────────┘
  1. สร้าง F5 XC HTTP load balancer โดยมีเซิร์ฟเวอร์ต้นทางอยู่ใน origin pool
  2. อัปเดต CDN edge ให้ชี้ไปยัง F5 XC VIP แทนที่จะเป็นต้นทางโดยตรง:
Terminal window
ssh azureuser@<CDN_EDGE_IP>
sudo sed -i 's|proxy_pass .*;|proxy_pass https://<F5XC_LB_VIP>;|' /etc/nginx/conf.d/cdn-edge.conf
sudo rm -rf /var/cache/nginx/cdn/*
sudo nginx -t && sudo systemctl reload nginx
  1. ตรวจสอบการบังคับใช้ WAF ผ่านห่วงโซ่ทั้งหมด:
Terminal window
# SQL injection ผ่าน CDN → F5 XC WAF ควรบล็อก
curl -I "http://$CDN/dvwa/vulnerabilities/sqli/?id=%27+OR+1%3D1--"
# คำขอปกติควรผ่านได้
curl -sf -o /dev/null -w "%{http_code}" "http://$CDN/juice-shop/"
  1. กำหนดค่า Trusted Client IP Header ใน F5 XC เพื่ออ่าน IP ของไคลเอนต์จริงจาก CDN headers (เช่น True-Client-IP สำหรับการจำลอง Akamai, CF-Connecting-IP สำหรับการจำลอง Cloudflare)
ส่วนประกอบที่เก็บโค้ดวัตถุประสงค์
CDN Edge (นี่)cdn-simulatorการแคช, vendor headers
เซิร์ฟเวอร์ต้นทางorigin-serverแอปเว็บที่มีช่องโหว่
F5 XC Configหลากหลาย (waf, api-protection, bot-*, ฯลฯ)นโยบายความปลอดภัย

แต่ละส่วนประกอบเผยแพร่เอกสารที่ผู้ช่วย AI อ่านเพื่อ deploy โครงสร้างพื้นฐาน origin-server เผยแพร่ endpoint manifest เป็น GitHub Release artifact ที่แสดงรายการเส้นทางแอปพลิเคชันและการตรวจสอบสุขภาพทั้งหมด