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

การผสานรวม

เซิร์ฟเวอร์ต้นทางนี้ออกแบบมาเพื่อใช้เป็น สมาชิก origin pool ที่อยู่เบื้องหลัง F5 Distributed Cloud HTTP load balancer แพลตฟอร์ม F5 XC ให้บริการ ไฟร์วอลล์แอปเว็บ (WAF), Bot Defense, ความปลอดภัย API และการป้องกันฝั่งไคลเอนต์ ที่อยู่หน้าเซิร์ฟเวอร์ต้นทางนี้

End User -> F5 XC HTTP LB (WAF/Bot/API/CSD) -> Origin Server VM (nginx -> Docker apps)

สร้าง origin pool ของ F5 XC ที่ชี้ไปยัง IP สาธารณะของ VM นี้:

การตั้งค่าค่า
ประเภท Origin ServerPublic IP of Origin Server
IP Address<terraform output public_ip>
พอร์ต80
Health CheckHTTP, path /health

สร้าง HTTP load balancer พร้อม origin pool:

การตั้งค่าค่า
Domainsโดเมนสาธิตของคุณ (เช่น demo.example.com)
Origin Poolpool ที่สร้างไว้ข้างต้น
WAFแนบนโยบาย WAF ของคุณ
Bot Defenseเปิดใช้งานตามความต้องการ
API Discoveryเปิดใช้งานสำหรับ endpoint ของ VAmPI

แต่ละแอปพลิเคชันสามารถเข้าถึงได้ผ่าน path prefix ผ่าน load balancer:

F5 XC LB URLOrigin Pathแอปพลิเคชัน
https://demo.example.com/juice-shop//juice-shop/Juice Shop (4 instances, cookie sticky)
https://demo.example.com/dvwa//dvwa/DVWA (4 instances + MariaDB, cookie sticky)
https://demo.example.com/vampi//vampi/VAmPI (4 instances, ip_hash sticky)
https://demo.example.com/httpbin//httpbin/httpbin (4 instances, round-robin)
https://demo.example.com/whoami//whoami/การวินิจฉัยคำขอ (4 instances)
https://demo.example.com/csd-demo//csd-demo/CSD Demo (4 instances, ip_hash sticky)
https://demo.example.com/dvga//dvga/DVGA (4 instances, ip_hash sticky)
https://demo.example.com/restaurant//restaurant/RESTaurant (4 instances, round-robin)
https://demo.example.com/health/healthHealth check (nginx direct)

ใช้ endpoint ของ whoami เพื่อตรวจสอบว่า F5 XC ฉีด header อะไรเข้าไปในคำขอที่ไปถึงเซิร์ฟเวอร์ต้นทาง:

Terminal window
LB_DOMAIN="demo.example.com"
curl -sk "https://${LB_DOMAIN}/whoami/"

ค้นหา header ที่ F5 XC ฉีดเข้ามาเหล่านี้ในการตอบสนอง:

Headerความหมาย
X-Forwarded-Forห่วงโซ่ IP ของไคลเอนต์ผ่าน F5 XC
True-Client-IPIP ไคลเอนต์ต้นทางดั้งเดิม
X-Forwarded-Protohttps หาก TLS สิ้นสุดที่ F5 XC
X-Volterra-Bot-Typeการจำแนกประเภท Bot (เมื่อเปิดใช้งาน Bot Defense)
X-Request-IDID การติดตามคำขอของ F5 XC

เมื่อแนบนโยบาย WAF กับ HTTP load balancer แล้ว ให้ทดสอบ payload การโจมตี:

Terminal window
LB_DOMAIN="demo.example.com"
# SQL Injection (should be blocked by WAF)
curl -sk "https://${LB_DOMAIN}/dvwa/vulnerabilities/sqli/?id=%27+OR+1%3D1--&Submit=Submit"
# XSS (should be blocked by WAF)
curl -sk "https://${LB_DOMAIN}/juice-shop/rest/products/search?q=<script>alert(1)</script>"
# Command Injection (should be blocked by WAF)
curl -sk "https://${LB_DOMAIN}/dvwa/vulnerabilities/exec/" \
-d "ip=127.0.0.1;cat+/etc/passwd&Submit=Submit"
# Normal request (should pass through)
curl -sk "https://${LB_DOMAIN}/httpbin/get" | jq .

เปิดใช้งาน API Discovery บน HTTP load balancer เพื่อทำแผนที่ endpoint ของ API ของ VAmPI:

Terminal window
# These requests build the API inventory in F5 XC
curl -sk "https://${LB_DOMAIN}/vampi/users/v1"
curl -sk -X POST "https://${LB_DOMAIN}/vampi/users/v1/register" \
-H "Content-Type: application/json" \
-d '{"username":"apitest","password":"test123","email":"api@test.com"}'
curl -sk -X POST "https://${LB_DOMAIN}/vampi/users/v1/login" \
-H "Content-Type: application/json" \
-d '{"username":"apitest","password":"test123"}'

crAPI ทำงานบนพอร์ตเฉพาะ (8888) เนื่องจากเป็นแอปพลิเคชันแบบหน้าเดียวที่ hardcode พาธ API ของตนเองและไม่สามารถให้บริการผ่าน path prefix ได้ ในการผสานรวม crAPI กับ F5 XC:

การตั้งค่าค่า
ประเภท Origin ServerPublic IP of Origin Server
IP Address<terraform output public_ip>
พอร์ต8888
Health CheckHTTP, path /

สร้าง origin pool แยกต่างหาก สำหรับ crAPI บนพอร์ต 8888 หรือเพิ่มสมาชิก origin pool ที่สองใน pool ที่มีอยู่ของคุณโดยใช้พอร์ต 8888 และใช้กฎเส้นทางเพื่อนำทางทราฟฟิก:

Terminal window
# Test crAPI through F5 XC (if configured)
curl -sk "https://${LB_DOMAIN}:8888/"
# Or if using route rules on the same LB domain:
# Configure an F5 XC route rule matching Host header or path prefix
# to forward to the crAPI origin pool (port 8888)

เซิร์ฟเวอร์ต้นทางใช้ nginx sticky sessions ภายในเพื่อกำหนดเส้นทางแอปพลิเคชันที่มีสถานะไปยัง container backend ที่สม่ำเสมอ เมื่อกำหนดค่า F5 XC HTTP load balancer ควรทราบสิ่งต่อไปนี้:

แอปพลิเคชันวิธี Stickyเหตุผล
Juice Shophash $cookie_tokenสถานะเซสชัน Node.js
DVWAhash $cookie_PHPSESSIDสถานะเซสชัน PHP
VAmPIip_hashฐานข้อมูล SQLite ต่อ instance
CSD Demoip_hashบันทึก exfil ในหน่วยความจำต่อ instance
DVGAip_hashฐานข้อมูล SQLite ต่อ instance
RESTaurantRound-robinPostgreSQL backend ที่แชร์กัน
crAPI— (single port 8888)7 microservices, PostgreSQL + MongoDB
httpbinRound-robinStateless
whoamiRound-robinStateless

F5 XC ไม่จำเป็นต้องทำซ้ำ sticky sessions เหล่านี้ — nginx บน VM ต้นทางจัดการการกำหนดเส้นทาง backend F5 XC ควรปฏิบัติต่อเซิร์ฟเวอร์ต้นทางเป็น endpoint เดียว (IP สาธารณะของ VM บนพอร์ต 80)

เมื่อรวมกับตัวจำลอง CDN สถาปัตยกรรมแล็บแบบสมบูรณ์จะเป็น:

End User -> CDN Simulator (nginx cache) -> F5 XC HTTP LB -> Origin Server (this component)

ตัวจำลอง CDN ใช้ F5 XC HTTP load balancer VIP เป็นเซิร์ฟเวอร์ต้นทาง และ F5 XC load balancer ใช้เซิร์ฟเวอร์ต้นทางนี้เป็น backend ซึ่งสร้างสถาปัตยกรรมหลายชั้นที่สมจริงสำหรับการทดสอบที่ครอบคลุม