통합
F5 XC 오리진 풀 통합
섹션 제목: “F5 XC 오리진 풀 통합”이 오리진 서버는 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 부하 분산기 구성
섹션 제목: “HTTP 부하 분산기 구성”오리진 풀을 사용하여 HTTP 부하 분산기를 생성합니다:
| 설정 | 값 |
|---|---|
| 도메인 | 데모 도메인 (예: demo.example.com) |
| 오리진 풀 | 위에서 생성한 풀 |
| WAF | WAF 정책 연결 |
| 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 직접) |
F5 XC 헤더 삽입 검증
섹션 제목: “F5 XC 헤더 삽입 검증”whoami 엔드포인트를 사용하여 F5 XC가 오리진에 도달하는 요청에 삽입하는 헤더를 확인합니다:
LB_DOMAIN="demo.example.com"
curl -sk "https://${LB_DOMAIN}/whoami/"응답에서 다음 F5 XC 삽입 헤더를 확인합니다:
| 헤더 | 의미 |
|---|---|
X-Forwarded-For | F5 XC를 통한 클라이언트 IP 체인 |
True-Client-IP | 원래 클라이언트 IP |
X-Forwarded-Proto | F5 XC에서 TLS가 종료되는 경우 https |
X-Volterra-Bot-Type | Bot 분류 (Bot 방어가 활성화된 경우) |
X-Request-ID | F5 XC 요청 추적 ID |
F5 XC를 통한 WAF 테스트
섹션 제목: “F5 XC를 통한 WAF 테스트”HTTP 부하 분산기에 WAF 정책이 연결된 경우 공격 페이로드를 테스트합니다:
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 .API 보안 테스트
섹션 제목: “API 보안 테스트”HTTP 부하 분산기에서 API 검색을 활성화하여 VAmPI의 API 엔드포인트를 매핑합니다:
# 이 요청들은 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)
섹션 제목: “crAPI 통합 (포트 8888)”crAPI는 전용 포트(8888)에서 실행됩니다. 이는 API 경로를 하드코딩하는 단일 페이지 애플리케이션으로, 경로 접두사 뒤에서 서비스할 수 없기 때문입니다. crAPI를 F5 XC와 통합하려면:
| 설정 | 값 |
|---|---|
| 오리진 서버 유형 | 오리진 서버의 공개 IP |
| IP 주소 | <terraform output public_ip> |
| 포트 | 8888 |
| 상태 확인 | HTTP, 경로 / |
포트 8888에서 crAPI에 대한 별도의 오리진 풀을 생성하거나, 포트 8888로 기존 풀에 두 번째 오리진 풀 멤버를 추가하고 라우트 규칙을 사용하여 트래픽을 전달합니다:
# F5 XC를 통한 crAPI 테스트 (구성된 경우)curl -sk "https://${LB_DOMAIN}:8888/"
# 또는 동일한 LB 도메인에서 라우트 규칙을 사용하는 경우:# Host 헤더 또는 경로 접두사를 일치시키는 F5 XC 라우트 규칙을 구성하여# crAPI 오리진 풀(포트 8888)로 전달스티키 세션 인식
섹션 제목: “스티키 세션 인식”오리진 서버는 nginx 스티키 세션을 내부적으로 사용하여 상태 저장 애플리케이션을 일관된 백엔드 컨테이너로 라우팅합니다. F5 XC HTTP 부하 분산기를 구성할 때 다음 사항에 유의하십시오:
| 애플리케이션 | 스티키 방식 | 이유 |
|---|---|---|
| Juice Shop | hash $cookie_token | Node.js 세션 상태 |
| DVWA | hash $cookie_PHPSESSID | PHP 세션 상태 |
| VAmPI | ip_hash | 인스턴스별 SQLite 데이터베이스 |
| CSD 데모 | ip_hash | 인스턴스별 메모리 내 exfil 로그 |
| DVGA | ip_hash | 인스턴스별 SQLite 데이터베이스 |
| RESTaurant | Round-robin | 공유 PostgreSQL 백엔드 |
| crAPI | — (단일 포트 8888) | 7개 마이크로서비스, PostgreSQL + MongoDB |
| httpbin | Round-robin | 상태 비저장 |
| whoami | Round-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 부하 분산기는 이 오리진 서버를 백엔드로 사용합니다. 이를 통해 포괄적인 테스트를 위한 현실적인 다중 계층 아키텍처가 구성됩니다.