Stack Tecnológico — TLSStress.Art
Scope status (post-Scope-Freeze 2026-05-10) — See ARCHITECTURE.md
for the canonical 37 MÓDULOs + 7 Test Kinds + DOM/CPOS/PIE-PA
safety architecture. ADRs 0014, 0019-0025 cover post-Freeze
additions.
Documento de referência completo: cada componente, cada camada, cada
escolha justificada. Companion legível do PDF marketing
(docs/marketing/TLSStress-Art-Tech-Stack.pdf ).
Status: vivo — atualizado a cada release que adiciona ou substitui tecnologia.
Filosofia: standards-first · open-source com licenças permissivas · supply-chain hardened do primeiro commit ao deploy.
Visão geral em uma página
%%{init: {'theme':'dark','themeVariables':{'primaryColor':'#0F1A2E','primaryBorderColor':'#00D8FC','primaryTextColor':'#FCFCFC','lineColor':'#00D8FC','secondaryColor':'#162338','tertiaryColor':'#0A0F1F','fontFamily':'monospace'}}}%%
flowchart LR
subgraph CLIENT["TEST CLIENTS · geração de tráfego"]
PW["browser engine<br/>(Node.js + Chromium headful)<br/>H2/H3 com TLS real"]
K6AGENT["k6<br/>(Go runtime)<br/>load high-throughput"]
end
subgraph DUT["DEVICE UNDER TEST"]
NGFW["NGFW<br/>Cisco · Fortinet · PAN<br/>Check Point · Sophos · Juniper<br/>Forcepoint · WatchGuard · Huawei"]
end
subgraph PERSONA["PERSONAS · web origin"]
CADDY["Caddy 2.8.x<br/>(Go) — TLS H2+H3<br/>autoTLS · ECDHE+AEAD"]
SALEOR["Saleor (Django)<br/>real-app shop"]
GHOST["Ghost (Node.js)<br/>real-app news"]
MOCK["mock-engine + har-engine<br/>(Go)"]
CM["cert-manager<br/>K8s PKI · IP SANs por VLAN"]
end
subgraph TESTINFRA["TEST INFRASTRUCTURE"]
FRR["FRR<br/>BGP saturation<br/>dual-stack v4+v6"]
VYOS["VyOS<br/>VPN router (planejado)"]
IPERF["iperf3<br/>RFC 6349"]
end
subgraph PLATFORM["PLATFORM · K8s + rede"]
K3S["K3s / RKE2<br/>K8s LTS leve"]
MULTUS["Multus + macvlan<br/>multi-NIC"]
NEXUS["Cisco Nexus 9000<br/>L2 fabric (opcional)"]
end
subgraph DATA["STORAGE & DB"]
PG["PostgreSQL 16+<br/>OLTP DB"]
PGB["PgBouncer<br/>conn pool"]
MINIO["MinIO<br/>S3-compatible local"]
BACKUP["Velero + WAL-G + Restic<br/>RTO < 30min · RPO < 5min"]
end
subgraph OBSERV["OBSERVABILITY"]
PROM["Prometheus<br/>TSDB · 15d retention"]
GRAF["Grafana<br/>dashboards"]
LOKI["Loki + Promtail<br/>logs"]
SNMP["snmp_exporter<br/>NGFW/switch SNMP"]
end
subgraph DASH["DASHBOARD & UI"]
NEXT["Next.js 15 + React 19<br/>(TypeScript)"]
DRIZZLE["Drizzle ORM"]
TAILWIND["Tailwind CSS<br/>brand tokens · dark mode"]
CMDK["cmdk · Cmd+K<br/>react-flow · diagrams"]
ZOD["Zod schemas<br/>API+DB single source"]
end
subgraph SIDE["SIDECARS"]
CLONER["Cloner<br/>Node + browser engine headful<br/>scrape vendor portals"]
ANSIBLE["Ansible-orchestrator<br/>FastAPI + ansible-runner<br/>SSH/Telnet vendor automation"]
end
subgraph SUPPLY["SUPPLY CHAIN & CI/CD"]
COSIGN["Sigstore / cosign<br/>keyless OIDC"]
SYFT["Syft (SPDX SBOM)"]
TRIVY["Trivy + CodeQL<br/>vuln + SAST"]
GHA["GitHub Actions<br/>multi-arch CI"]
GARBLE["garble<br/>Tier B binary obfuscation"]
end
subgraph ZTP["ZTP-PREM 12/12 CAMADAS (v3.7.0)"]
ADMIT["admission webhook<br/>audit · enforce · break-glass"]
AUDIT["sealed audit hash-chain<br/>WORM · cross-correlation"]
DLPP["DLP egress + anomaly<br/>5 baseline rules · 4 detectors"]
LICART["UTXO token vault<br/>LICENSE.Art envelope (Go ↔ Node)"]
CCTPM["CC + TPM probes<br/>SEV-SNP · TDX · CCA · TPM 2.0"]
end
CLIENT -->|TLS leg 1| DUT
DUT -->|TLS leg 2| PERSONA
TESTINFRA -.->|peer / VPN| DUT
PLATFORM --- CLIENT
PLATFORM --- PERSONA
PLATFORM --- TESTINFRA
PLATFORM --- SIDE
DASH -->|reads| DATA
DASH -->|metrics| OBSERV
DASH -->|delegates| SIDE
CLIENT -->|metrics| OBSERV
PERSONA -->|metrics| OBSERV
ZTP -.->|enforces| DASH
ZTP -.->|enforces| PLATFORM
SUPPLY -.->|signs + scans| PLATFORM
SUPPLY -.->|signs + scans| SIDE
SUPPLY -.->|signs + scans| DASH
SUPPLY -.->|garbles| ZTP
classDef cyan stroke:#00D8FC,stroke-width:2px,fill:#0F1A2E,color:#FCFCFC
classDef blue stroke:#0054FC,stroke-width:1.5px,fill:#0A0F1F,color:#FCFCFC
classDef ztp stroke:#00D8FC,stroke-width:2px,fill:#000018,color:#FCFCFC
class CLIENT,DUT,PERSONA,TESTINFRA cyan
class PLATFORM,DATA,OBSERV,DASH,SIDE,SUPPLY blue
class ZTP ztp
Princípios de escolha
Standards-first — adotamos o padrão da comunidade pra cada nicho (FRR pra BGP, Caddy pra TLS, Prometheus pra metrics, K8s pra orquestração). Evita lock-in e maximiza talento disponível no mercado.
TS + Go split por hot-path — Go onde performance importa (agents, personas, exporters), TypeScript onde DX/iteração importa (dashboard, cloner, sidecars).
Open-source com licenças permissivas — toda a stack runtime é Apache 2.0 / MIT / BSD / MPL-2.0. Nada proprietário pago obrigatório. (O próprio TLSStress.Art usa PolyForm Noncommercial.)
K8s-native — design assume Kubernetes desde o primeiro commit. Portabilidade pra qualquer cluster (EKS, GKE, AKS, on-prem K3s/RKE2, airgap-friendly).
Supply-chain hardened — cosign + SBOM + Trivy + CodeQL + gitleaks como gates de CI; nada vai pra produção sem attestation. Forensic chain-of-custody com asset-hashes manifest por release.
i18n-ready first-class — pt-BR / en / es desde o dia 1, com parity test no CI. Mercado-alvo é BR/LATAM, não retrofit americano-only.
Reserved-resources policy — infra (Postgres / Prometheus / Grafana / Dashboard / Cloner / Ansible-sidecar) sempre tem CPU/RAM/disk reservados ANTES de alocar agents/personas. Estabilidade > horse power.
Camadas detalhadas
Camada I — Test Agents
Componente
Tecnologia
Por quê escolhemos
browser engine
Node.js + Chromium headful
Único stack que cobre HTTP/2 e HTTP/3 (QUIC) com TLS handshake real e instrumentação completa por sessão.
k6
Go runtime
Load testing high-throughput (milhões de req/s/nó); scriptável em JS, runtime compilado, baixo overhead.
Camada II — Personas (web origin servers)
Componente
Tecnologia
Por quê escolhemos
Caddy 2.8.x
Go — TLS server
H2 + H3 nativo, autoTLS, ECDHE+AEAD apenas (6 suites ECDSA-first), session tickets disabled.
Saleor + Ghost
Django + Node.js
Apps reais open-source — geram tráfego "verdadeiro" para testes de App-ID em NGFWs.
mock-engine + har-engine
Go custom
Controle total sobre payloads, baixo footprint vs real-app. HAR replay para reproduzir capturas de tráfego reais.
cert-manager
K8s controller
PKI K8s-native; emite certs com IP SANs por VLAN via persona-ca-issuer ClusterIssuer.
Camada III — Test Infrastructure
Componente
Tecnologia
Por quê escolhemos
FRR (FRRouting)
C — container
BGP speaker IETF-padrão, dual-stack v4+v6, suporta 1M+ routes. Usado pelo bgp-router-peer na BGP Saturation feature.
VyOS (planejado)
Debian-based
VPN router open-source — IPsec strongSwan + WireGuard. Controle CLI completo.
iperf3 (planejado)
C
TCP/UDP throughput padrão da indústria, RFC 6349 alinhado. Mede capacity da VPN.
Camada IV — Orchestration & Networking
Componente
Tecnologia
Por quê escolhemos
K3s / RKE2
Kubernetes LTS
K8s leve, low-overhead, built-in ingress/storage; airgap-friendly.
Multus
CNI plugin
Multi-NIC K8s; permite NetworkAttachmentDefinitions por VLAN.
macvlan
Linux NIC mode
Bypassa iptables/NetworkPolicy nas data planes; necessário pra performance line-rate.
NetworkAttachmentDefinition
K8s CRD
Declarativo — descrição YAML de cada rede secundária.
Cisco Nexus 9000 (opcional)
Hardware switch
L2 fabric quando l2_fabric: nexus. Ausente em single-node lab (config l2_fabric: none).
Camada V — Storage & Database
Componente
Tecnologia
Por quê escolhemos
PostgreSQL 16+
RDBMS
TimescaleDB-friendly, Drizzle-friendly, pgvector ready (futuro AI/ML layer). 24+ migrations versionadas.
PgBouncer
Connection pool
Reduz overhead de conexão; essencial em scale com agents reportando metrics simultaneamente.
MinIO
S3-compatible
Backup target local airgap-friendly. Deployed via k8s/backup/.
Velero + WAL-G + Restic
Backup tools
K8s-native (Velero) + PostgreSQL PITR (WAL-G) + file-level (Restic). RTO < 30min, RPO < 5min (ADR 0017).
Camada VI — Observability
Componente
Tecnologia
Por quê escolhemos
Prometheus
TSDB
Padrão K8s; PromQL expressivo; SLA scrape ≤ 15s; 15-day default retention.
Grafana
Dashboarding
Provisionável via JSON/YAML; alerting integrado; theme tlsstress-art-dark brandeado.
Loki + Promtail (planejado)
LogQL
Mesma stack Grafana; LogQL = PromQL-like; cost-effective vs Elastic.
snmp_exporter
Prometheus exporter
Lê NGFW/switches via SNMP v2c/v3 — métricas que vendor não expõe via REST.
Camada VII — Dashboard & UI
Componente
Tecnologia
Por quê escolhemos
Next.js 15 + React 19
TypeScript framework
App Router, React Server Components, ecossistema maduro.
Drizzle ORM
TypeScript-native
Type-safe queries; migrations SQL-first auditáveis.
Tailwind CSS
Utility-first CSS
Brand tokens (cyan/navy/blue), dark mode nativo, design system embarcado.
cmdk
Command palette
Cmd+K pattern Vercel/Linear-grade; ARIA + keyboard nav nativos; ~5KB.
react-flow (planejado)
Diagram library
Drag-and-drop pra Lab Affinity wizard; zoom/pan/minimap built-in.
Zod
Schema validator
Runtime + compile-time; mesma source de truth pra API + DB.
i18n (pt/en/es)
Dictionary + parity test
CI enforces parity entre as 3 línguas. Mercado-alvo BR/LATAM first-class.
Camada VIII — Sidecars
Componente
Tecnologia
Por quê escolhemos
Cloner
Node.js + TS + browser engine headful
Mesma engine dos agents; headful evita bot detection ao scrape vendor portals para Catalog Refresh + Patch Fetch + API Discovery.
Ansible-orchestrator
Python + FastAPI + ansible-runner
Sidecar para SSH/Telnet vendor automation. ansible-runner é a lib oficial do AWX (skipping AWX por overhead).
Vendor Ansible collections
cisco.ios · fortinet.fortios · paloaltonetworks.panos · arista.eos · vyos.vyos · etc.
Ansible Galaxy oficial dos vendors — mantidas pela comunidade e pelos próprios fabricantes.
Camada IX — Supply Chain & CI/CD
Componente
Tecnologia
Por quê escolhemos
Sigstore / cosign
Image signing
Keyless OIDC via GitHub Actions — sem chave a guardar; auditável via OIDC issuer.
Syft
SBOM (SPDX format)
Padrão open; integra com cosign attestation. Slim SBOM filtrada pra caber no 16 MiB cap do GitHub Attestation API.
Trivy
Vuln scanner
CVE + secrets + misconfig em container images; gate de CI.
CodeQL
SAST
Análise estática integrada ao GitHub Security tab.
gitleaks
Secret scan
Pre-commit + CI; histórico completo do repo.
GitHub Actions
CI/CD
Multi-arch (amd64+arm64) via QEMU + buildx; auto-merge gated por 8 status checks.
asset-hashes manifest
Forensic chain-of-custody
SHA-256 dos owned YAMLs por release; prova de derivação se replicado por terceiro.
Linguagens & ecossistemas
Linguagem
Onde
TypeScript
dashboard · agent · cloner · persona-seeder · mock-engine · har-engine · bgp-router-peer · ansible client lib
Go
synthetic-load agents · k6-executor · mock-engine workers · har-engine workers · persona-seeder
Python
ansible-orchestrator · scripts auxiliares de catalog/manifest generation
Bash
scripts de deploy, host tuning, Nexus config, scripts de backup
SQL
Drizzle migrations (Postgres)
YAML
catalog (NGFW/server/switch) · K8s manifests · Ansible playbooks · Grafana dashboards
HCL/Terraform
— não usamos (K8s manifests + scripts são suficientes pro nosso escopo airgap)
Cobertura multi-vendor (catalog atual)
Categoria
Vendors modelados
NGFW (10)
Cisco FTD · Cisco Secure Router · Fortinet FortiGate · Palo Alto · Check Point Quantum · HPE Juniper SRX · Sophos XGS · Forcepoint NGFW · WatchGuard Firebox · Huawei NGFW
Server (4)
DELL PowerEdge · HPE ProLiant · Huawei FusionServer · Lenovo ThinkSystem
Switch (7+)
Cisco Nexus + Catalyst · HPE Juniper · DELL · Arista · Huawei · Extreme · Fortinet
Total SKUs
~115 (NGFW) + 24 (server, com 6 Lenovo recém-adicionados) + ~50 (switch)
Documentos relacionados