Salta ai contenuti

Integra

Questo server di origine è progettato per essere utilizzato come membro di un origin pool dietro un load balancer HTTP F5 Distributed Cloud. La Piattaforma F5 XC fornisce Firewall per applicazioni web (WAF), Bot Defense, Sicurezza API e Difesa lato client davanti a questo server di origine.

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

Crea un origin pool F5 XC che punta all’IP pubblico di questa VM:

ImpostazioneValore
Tipo di Server di OrigineIP pubblico del Server di Origine
Indirizzo IP<terraform output public_ip>
Porta80
Health CheckHTTP, percorso /health

Crea un load balancer HTTP con l’origin pool:

ImpostazioneValore
DominiIl tuo dominio demo (es., demo.example.com)
Origin PoolIl pool creato in precedenza
WAFAllega la tua policy WAF
Bot DefenseAbilita secondo necessità
API DiscoveryAbilita per gli endpoint VAmPI

Ogni applicazione è accessibile tramite il proprio prefisso di percorso attraverso il load balancer:

URL F5 XC LBPercorso di OrigineApplicazione
https://demo.example.com/juice-shop//juice-shop/Juice Shop (4 istanze, sticky per cookie)
https://demo.example.com/dvwa//dvwa/DVWA (4 istanze + MariaDB, sticky per cookie)
https://demo.example.com/vampi//vampi/VAmPI (4 istanze, sticky ip_hash)
https://demo.example.com/httpbin//httpbin/httpbin (4 istanze, round-robin)
https://demo.example.com/whoami//whoami/Diagnostica delle richieste (4 istanze)
https://demo.example.com/csd-demo//csd-demo/CSD Demo (4 istanze, sticky ip_hash)
https://demo.example.com/dvga//dvga/DVGA (4 istanze, sticky ip_hash)
https://demo.example.com/restaurant//restaurant/RESTaurant (4 istanze, round-robin)
https://demo.example.com/health/healthHealth check (nginx diretto)

Utilizza l’endpoint whoami per verificare quali header F5 XC inietta nelle richieste che raggiungono il server di origine:

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

Cerca questi header iniettati da F5 XC nella risposta:

HeaderSignificato
X-Forwarded-ForCatena IP del client attraverso F5 XC
True-Client-IPIP originale del client
X-Forwarded-Protohttps se TLS termina su F5 XC
X-Volterra-Bot-TypeClassificazione bot (quando Bot Defense è abilitata)
X-Request-IDID di tracciamento richiesta F5 XC

Con una policy WAF collegata al load balancer HTTP, testa i payload di attacco:

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

Abilita API Discovery sul load balancer HTTP per mappare gli endpoint API di VAmPI:

Terminal window
# Queste richieste costruiscono l'inventario API 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 è in esecuzione su una porta dedicata (8888) perché è un’applicazione a pagina singola che codifica in modo rigido i propri percorsi API e non può essere servita dietro un prefisso di percorso. Per integrare crAPI con F5 XC:

ImpostazioneValore
Tipo di Server di OrigineIP pubblico del Server di Origine
Indirizzo IP<terraform output public_ip>
Porta8888
Health CheckHTTP, percorso /

Crea un origin pool separato per crAPI sulla porta 8888, oppure aggiungi un secondo membro all’origin pool esistente con la porta 8888 e utilizza regole di routing per indirizzare il traffico:

Terminal window
# Testa crAPI tramite F5 XC (se configurato)
curl -sk "https://${LB_DOMAIN}:8888/"
# Oppure se si utilizzano regole di routing sullo stesso dominio LB:
# Configura una regola di routing F5 XC che corrisponda all'header Host o al prefisso di percorso
# per inoltrare all'origin pool crAPI (porta 8888)

Il server di origine utilizza sessioni sticky nginx internamente per instradare le applicazioni con stato verso contenitori backend consistenti. Quando si configura il load balancer HTTP F5 XC, tenere presente:

ApplicazioneMetodo StickyMotivo
Juice Shophash $cookie_tokenStato sessione Node.js
DVWAhash $cookie_PHPSESSIDStato sessione PHP
VAmPIip_hashDatabase SQLite per istanza
CSD Demoip_hashLog di esfiltrazione in memoria per istanza
DVGAip_hashDatabase SQLite per istanza
RESTaurantRound-robinBackend PostgreSQL condiviso
crAPI— (porta singola 8888)7 microservizi, PostgreSQL + MongoDB
httpbinRound-robinStateless
whoamiRound-robinStateless

F5 XC non deve replicare queste sessioni sticky — nginx sulla VM di origine gestisce il routing verso i backend. F5 XC deve trattare il server di origine come un singolo endpoint (l’IP pubblico della VM sulla porta 80).

Quando combinata con il Simulatore CDN, l’architettura completa del laboratorio è:

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

Il Simulatore CDN utilizza il VIP del load balancer HTTP F5 XC come proprio server di origine, e il load balancer F5 XC utilizza questo server di origine come proprio backend. Ciò crea un’architettura multi-livello realistica per test approfonditi.