Skip to content

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

  1. 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.
  2. TS + Go split por hot-path — Go onde performance importa (agents, personas, exporters), TypeScript onde DX/iteração importa (dashboard, cloner, sidecars).
  3. 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.)
  4. K8s-native — design assume Kubernetes desde o primeiro commit. Portabilidade pra qualquer cluster (EKS, GKE, AKS, on-prem K3s/RKE2, airgap-friendly).
  5. 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.
  6. 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.
  7. 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