콘텐츠로 이동

통합

이 오리진 서버는 F5 Distributed Cloud HTTP 부하 분산기 뒤에 오리진 풀 멤버로 사용되도록 설계되었습니다. F5 XC 플랫폼은 이 오리진 앞단에서 웹 앱 방화벽 (WAF), Bot 방어, API 보안 및 클라이언트 측 방어를 제공합니다.

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

이 VM의 공개 IP를 가리키는 F5 XC 오리진 풀을 생성합니다:

설정
오리진 서버 유형오리진 서버의 공개 IP
IP 주소<terraform output public_ip>
포트80
상태 확인HTTP, 경로 /health

오리진 풀을 사용하여 HTTP 부하 분산기를 생성합니다:

설정
도메인데모 도메인 (예: demo.example.com)
오리진 풀위에서 생성한 풀
WAFWAF 정책 연결
Bot 방어필요에 따라 활성화
API 검색VAmPI 엔드포인트에 대해 활성화

각 애플리케이션은 부하 분산기를 통해 경로 접두사로 접근할 수 있습니다:

F5 XC LB URL오리진 경로애플리케이션
https://demo.example.com/juice-shop//juice-shop/Juice Shop (4개 인스턴스, cookie sticky)
https://demo.example.com/dvwa//dvwa/DVWA (4개 인스턴스 + MariaDB, cookie sticky)
https://demo.example.com/vampi//vampi/VAmPI (4개 인스턴스, ip_hash sticky)
https://demo.example.com/httpbin//httpbin/httpbin (4개 인스턴스, round-robin)
https://demo.example.com/whoami//whoami/요청 진단 (4개 인스턴스)
https://demo.example.com/csd-demo//csd-demo/CSD 데모 (4개 인스턴스, ip_hash sticky)
https://demo.example.com/dvga//dvga/DVGA (4개 인스턴스, ip_hash sticky)
https://demo.example.com/restaurant//restaurant/RESTaurant (4개 인스턴스, round-robin)
https://demo.example.com/health/health상태 확인 (nginx 직접)

whoami 엔드포인트를 사용하여 F5 XC가 오리진에 도달하는 요청에 삽입하는 헤더를 확인합니다:

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

응답에서 다음 F5 XC 삽입 헤더를 확인합니다:

헤더의미
X-Forwarded-ForF5 XC를 통한 클라이언트 IP 체인
True-Client-IP원래 클라이언트 IP
X-Forwarded-ProtoF5 XC에서 TLS가 종료되는 경우 https
X-Volterra-Bot-TypeBot 분류 (Bot 방어가 활성화된 경우)
X-Request-IDF5 XC 요청 추적 ID

HTTP 부하 분산기에 WAF 정책이 연결된 경우 공격 페이로드를 테스트합니다:

Terminal window
LB_DOMAIN="demo.example.com"
# SQL 인젝션 (WAF에 의해 차단되어야 함)
curl -sk "https://${LB_DOMAIN}/dvwa/vulnerabilities/sqli/?id=%27+OR+1%3D1--&Submit=Submit"
# XSS (WAF에 의해 차단되어야 함)
curl -sk "https://${LB_DOMAIN}/juice-shop/rest/products/search?q=<script>alert(1)</script>"
# 명령 인젝션 (WAF에 의해 차단되어야 함)
curl -sk "https://${LB_DOMAIN}/dvwa/vulnerabilities/exec/" \
-d "ip=127.0.0.1;cat+/etc/passwd&Submit=Submit"
# 정상 요청 (통과되어야 함)
curl -sk "https://${LB_DOMAIN}/httpbin/get" | jq .

HTTP 부하 분산기에서 API 검색을 활성화하여 VAmPI의 API 엔드포인트를 매핑합니다:

Terminal window
# 이 요청들은 F5 XC에서 API 인벤토리를 구축합니다
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)에서 실행됩니다. 이는 API 경로를 하드코딩하는 단일 페이지 애플리케이션으로, 경로 접두사 뒤에서 서비스할 수 없기 때문입니다. crAPI를 F5 XC와 통합하려면:

설정
오리진 서버 유형오리진 서버의 공개 IP
IP 주소<terraform output public_ip>
포트8888
상태 확인HTTP, 경로 /

포트 8888에서 crAPI에 대한 별도의 오리진 풀을 생성하거나, 포트 8888로 기존 풀에 두 번째 오리진 풀 멤버를 추가하고 라우트 규칙을 사용하여 트래픽을 전달합니다:

Terminal window
# F5 XC를 통한 crAPI 테스트 (구성된 경우)
curl -sk "https://${LB_DOMAIN}:8888/"
# 또는 동일한 LB 도메인에서 라우트 규칙을 사용하는 경우:
# Host 헤더 또는 경로 접두사를 일치시키는 F5 XC 라우트 규칙을 구성하여
# crAPI 오리진 풀(포트 8888)로 전달

오리진 서버는 nginx 스티키 세션을 내부적으로 사용하여 상태 저장 애플리케이션을 일관된 백엔드 컨테이너로 라우팅합니다. F5 XC HTTP 부하 분산기를 구성할 때 다음 사항에 유의하십시오:

애플리케이션스티키 방식이유
Juice Shophash $cookie_tokenNode.js 세션 상태
DVWAhash $cookie_PHPSESSIDPHP 세션 상태
VAmPIip_hash인스턴스별 SQLite 데이터베이스
CSD 데모ip_hash인스턴스별 메모리 내 exfil 로그
DVGAip_hash인스턴스별 SQLite 데이터베이스
RESTaurantRound-robin공유 PostgreSQL 백엔드
crAPI— (단일 포트 8888)7개 마이크로서비스, PostgreSQL + MongoDB
httpbinRound-robin상태 비저장
whoamiRound-robin상태 비저장

F5 XC는 이러한 스티키 세션을 복제할 필요가 없습니다 — 오리진 VM의 nginx가 백엔드 라우팅을 처리합니다. F5 XC는 오리진을 단일 엔드포인트(포트 80의 VM 공개 IP)로 취급해야 합니다.

CDN 시뮬레이터와 결합하면 전체 랩 아키텍처는 다음과 같습니다:

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

CDN 시뮬레이터는 F5 XC HTTP 부하 분산기 VIP를 오리진으로 사용하고, F5 XC 부하 분산기는 이 오리진 서버를 백엔드로 사용합니다. 이를 통해 포괄적인 테스트를 위한 현실적인 다중 계층 아키텍처가 구성됩니다.