- หน้าแรก
- ตัวจำลอง CDN
- ผสานการทำงานกับเซิร์ฟเวอร์ต้นทาง
ผสานการทำงานกับเซิร์ฟเวอร์ต้นทาง
หน้านี้ครอบคลุมสองขั้นตอนของการผสานการทำงาน:
- การผสานงานโดยตรง — CDN edge ส่งต่อไปยังเซิร์ฟเวอร์ต้นทางโดยตรง (การทดสอบพื้นฐาน)
- 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:
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 ให้ใช้แหล่งที่มาของที่เก็บโค้ดโดยตรง:
curl -sf https://raw.githubusercontent.com/f5-sales-demo/origin-server/main/manifest.json | python3 -m json.toolmanifest แสดงรายการเส้นทางแอปพลิเคชัน การตรวจสอบสุขภาพ 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 | การป้องกันฝั่งไคลเอนต์ |
ขั้นตอนที่ 1: การผสานงานโดยตรง (พื้นฐาน)
หัวข้อที่มีชื่อว่า “ขั้นตอนที่ 1: การผสานงานโดยตรง (พื้นฐาน)”┌──────────┐ ┌──────────────────────┐ ┌─────────────────────┐│ 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:
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หรือตั้งค่าในขณะ deploy ด้วย Terraform ผ่าน terraform.tfvars:
origin_server = "http://<ORIGIN_IP>"ตรวจสอบแอปพลิเคชันทั้งหมด
หัวข้อที่มีชื่อว่า “ตรวจสอบแอปพลิเคชันทั้งหมด”ทดสอบแต่ละแอปพลิเคชันต้นทางผ่าน CDN:
CDN=<CDN_EDGE_IP>
# การตรวจสอบสุขภาพ (CDN local)curl -sf "http://$CDN/health" | python3 -m json.tool
# หน้า Landingcurl -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 (ติดตาม redirect ไปยัง login)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 headers (แสดง CDN headers ในรูปแบบ JSON)curl -sf "http://$CDN/httpbin/headers" | python3 -m json.tool | head -10
# whoami (แสดง header ทั้งหมดที่ต้นทางได้รับ)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 Headers ที่ต้นทาง
หัวข้อที่มีชื่อว่า “ตรวจสอบ CDN Headers ที่ต้นทาง”endpoint /whoami/ แสดง header ทุกรายการที่ต้นทางได้รับ เมื่อเข้าถึงผ่าน CDN จะแสดง header ของผู้ขายทั้งหมด 67+ รายการ:
curl -sf "http://$CDN/whoami/"ตรวจสอบว่า header สำคัญเหล่านี้มีอยู่:
| ผู้ขาย | Header | ค่าที่คาดหวัง |
|---|---|---|
| มาตรฐาน | 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> |
การเชื่อมโยง Cross-Reference กับบันทึก
หัวข้อที่มีชื่อว่า “การเชื่อมโยง Cross-Reference กับบันทึก”เปรียบเทียบบันทึกการเข้าถึงบนทั้งสองเซิร์ฟเวอร์เพื่อตรวจสอบการไหลของทราฟฟิก:
# บันทึก 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 เฉพาะของผู้ขาย
พฤติกรรมของแคช
หัวข้อที่มีชื่อว่า “พฤติกรรมของแคช”# คำขอแรก — MISS (ดึงมาจากต้นทาง)curl -s -I "http://$CDN/whoami/" | grep X-Cache-Status
# คำขอที่สอง — HIT (ให้บริการจากแคช CDN)curl -s -I "http://$CDN/whoami/" | grep X-Cache-Statusขั้นตอนที่ 2: F5 XC Insertion (การสาธิตความปลอดภัย)
หัวข้อที่มีชื่อว่า “ขั้นตอนที่ 2: F5 XC Insertion (การสาธิตความปลอดภัย)”หลังจากการทดสอบพื้นฐาน ให้แทรก F5 XC HTTP load balancer ระหว่าง CDN และต้นทาง:
┌──────────┐ ┌────────────────┐ ┌──────────────────┐ ┌─────────────────┐│ Client │────▶│ CDN Edge │────▶│ F5 XC HTTP LB │────▶│ Origin Server ││ │ │ (NGINX) │ │ WAF + Bot + API │ │ │└──────────┘ └────────────────┘ └──────────────────┘ └─────────────────┘- สร้าง F5 XC HTTP load balancer โดยมีเซิร์ฟเวอร์ต้นทางอยู่ใน origin pool
- อัปเดต CDN edge ให้ชี้ไปยัง F5 XC VIP แทนที่จะเป็นต้นทางโดยตรง:
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 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/"- กำหนดค่า 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 ที่แสดงรายการเส้นทางแอปพลิเคชันและการตรวจสอบสุขภาพทั้งหมด