Pular para o conteúdo

Integrar

Este servidor de origem foi projetado para ser utilizado como membro de um origin pool atrás de um balanceador de carga HTTP do F5 Distributed Cloud. A plataforma F5 XC fornece WAF, Bot Defense, API Security e Client-Side Defense na frente desta origem.

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

Crie um origin pool do F5 XC apontando para o IP público desta VM:

ConfiguraçãoValor
Tipo de Servidor de OrigemIP Público do Servidor de Origem
Endereço IP<terraform output public_ip>
Porta80
Health CheckHTTP, caminho /health

Crie um balanceador de carga HTTP com o origin pool:

ConfiguraçãoValor
DomíniosSeu domínio de demonstração (ex.: demo.example.com)
Origin PoolO pool criado acima
WAFAnexe sua política de WAF
Bot DefenseHabilite conforme necessário
API DiscoveryHabilite para os endpoints do VAmPI

Cada aplicação está acessível por meio de seu prefixo de caminho através do balanceador de carga:

URL do F5 XC LBCaminho de OrigemAplicação
https://demo.example.com/juice-shop//juice-shop/Juice Shop (4 instâncias, cookie sticky)
https://demo.example.com/dvwa//dvwa/DVWA (4 instâncias + MariaDB, cookie sticky)
https://demo.example.com/vampi//vampi/VAmPI (4 instâncias, ip_hash sticky)
https://demo.example.com/httpbin//httpbin/httpbin (4 instâncias, round-robin)
https://demo.example.com/whoami//whoami/Diagnóstico de requisições (4 instâncias)
https://demo.example.com/csd-demo//csd-demo/CSD Demo (4 instâncias, ip_hash sticky)
https://demo.example.com/dvga//dvga/DVGA (4 instâncias, ip_hash sticky)
https://demo.example.com/restaurant//restaurant/RESTaurant (4 instâncias, round-robin)
https://demo.example.com/health/healthHealth check (nginx direto)

Utilize o endpoint whoami para verificar quais cabeçalhos o F5 XC injeta nas requisições que chegam à origem:

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

Procure pelos seguintes cabeçalhos injetados pelo F5 XC na resposta:

CabeçalhoSignificado
X-Forwarded-ForCadeia de IP do cliente através do F5 XC
True-Client-IPIP original do cliente
X-Forwarded-Protohttps se o TLS for encerrado no F5 XC
X-Volterra-Bot-TypeClassificação de bot (quando o Bot Defense está habilitado)
X-Request-IDID de rastreamento de requisição do F5 XC

Com uma política de WAF anexada ao balanceador de carga HTTP, teste payloads de ataque:

Terminal window
LB_DOMAIN="demo.example.com"
# SQL Injection (deve ser bloqueado pelo WAF)
curl -sk "https://${LB_DOMAIN}/dvwa/vulnerabilities/sqli/?id=%27+OR+1%3D1--&Submit=Submit"
# XSS (deve ser bloqueado pelo WAF)
curl -sk "https://${LB_DOMAIN}/juice-shop/rest/products/search?q=<script>alert(1)</script>"
# Command Injection (deve ser bloqueado pelo WAF)
curl -sk "https://${LB_DOMAIN}/dvwa/vulnerabilities/exec/" \
-d "ip=127.0.0.1;cat+/etc/passwd&Submit=Submit"
# Requisição normal (deve passar)
curl -sk "https://${LB_DOMAIN}/httpbin/get" | jq .

Habilite a API Discovery no balanceador de carga HTTP para mapear os endpoints de API do VAmPI:

Terminal window
# Estas requisições constroem o inventário de API no 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"}'

O crAPI é executado em uma porta dedicada (8888) porque é uma aplicação de página única (SPA) que codifica seus caminhos de API de forma fixa e não pode ser servida atrás de um prefixo de caminho. Para integrar o crAPI com o F5 XC:

ConfiguraçãoValor
Tipo de Servidor de OrigemIP Público do Servidor de Origem
Endereço IP<terraform output public_ip>
Porta8888
Health CheckHTTP, caminho /

Crie um origin pool separado para o crAPI na porta 8888, ou adicione um segundo membro ao seu pool existente com a porta 8888 e utilize regras de roteamento para direcionar o tráfego:

Terminal window
# Testar crAPI através do F5 XC (se configurado)
curl -sk "https://${LB_DOMAIN}:8888/"
# Ou se estiver usando regras de roteamento no mesmo domínio do LB:
# Configure uma regra de rota no F5 XC que corresponda ao cabeçalho Host ou prefixo de caminho
# para encaminhar ao origin pool do crAPI (porta 8888)

Considerações sobre Sessões Persistentes (Sticky Sessions)

Seção intitulada “Considerações sobre Sessões Persistentes (Sticky Sessions)”

O servidor de origem utiliza sessões persistentes do nginx internamente para rotear aplicações com estado para contêineres de backend consistentes. Ao configurar o balanceador de carga HTTP do F5 XC, esteja ciente de:

AplicaçãoMétodo de PersistênciaMotivo
Juice Shophash $cookie_tokenEstado de sessão Node.js
DVWAhash $cookie_PHPSESSIDEstado de sessão PHP
VAmPIip_hashBanco de dados SQLite por instância
CSD Demoip_hashLog de exfiltração em memória por instância
DVGAip_hashBanco de dados SQLite por instância
RESTaurantRound-robinBackend PostgreSQL compartilhado
crAPI— (porta única 8888)7 microsserviços, PostgreSQL + MongoDB
httpbinRound-robinSem estado
whoamiRound-robinSem estado

O F5 XC não precisa replicar essas sessões persistentes — o nginx na VM de origem gerencia o roteamento para o backend. O F5 XC deve tratar a origem como um único endpoint (o IP público da VM na porta 80).

Quando combinado com o Simulador de CDN, a arquitetura completa do laboratório é:

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

O Simulador de CDN utiliza o VIP do balanceador de carga HTTP do F5 XC como sua origem, e o balanceador de carga F5 XC utiliza este servidor de origem como seu backend. Isso cria uma arquitetura multicamadas realista para testes abrangentes.