# Transcript — A3 Alicante — quedas & segurança

_session: a3-alicante-seguranca · 3 turnos_

## [1] user · alicante · 2026-07-14T12:17:18.000Z

Investigação de quedas recorrentes e análise de segurança do site Alicante (Ekyte 9890071). Produzir um A3 Toyota com o máximo de diagramas mermaid consolidando as evidências (abuse reports MySQL, ticket Ekyte, backups public_html/domains).

## [2] assistant · julia · 2026-07-14T12:17:24.000Z

Turno inicial substituido — ver a versao ATUAL do A3 no turno abaixo (v3: incorpora UptimeRobot + Relatorio de Protecao).

## [3] assistant · julia · 2026-07-14T12:28:18.000Z

> **v3** — incorpora UptimeRobot (22 quedas, 17x 403) + Relatório de Proteção blackbox. **Versão renderizada (18 diagramas):** https://claude.ai/code/artifact/1c10dd47-3ee2-40ac-899e-963f68a61645

---

# A3 — Alicante | Quedas Recorrentes & Análise de Segurança

> **Ekyte:** [task 9890071](https://app.ekyte.com/#/tasks/list/9890071/edit) · **Ambiente:** https://www.alicante.com.br/wp-admin/
> **Autor:** lead `alicante` (frota Júlia/Mukutu) · **Data:** 2026-07-14 · **Prazo:** 2026-07-14 · **v3** (incorpora UptimeRobot + Relatório de Proteção blackbox 2026-07-07)
> **Owner ticket:** Jéssica Mariano → Desenvolvimento (gabriel.fonseca) · **Projeto:** Alicante Manutenção 19227 · **Prioridade:** alta (400)
> **Host:** WordPress · LiteSpeed · PHP 8.3.30 · origin **72.61.49.79 EXPOSTO** (sem CDN) · host **Hostinger** (`u235710689`, `main-hosting.eu`) · DNS/e-mail **Locaweb** · domínio registro.br · TLS até 13/ago/2026

---

## 0. Tese (BLUF)

As quedas são **throttle host-side, não crash e não invasão** — e agora isso está **provado**. Os dados do **UptimeRobot** (22 incidentes, 06-19→07-10) mostram que **17 das 22 quedas são `403 Forbidden`** (as demais 408/timeout): o servidor **recusa ativamente**, não cai com erro 5xx. E o gatilho está fechado por **correlação temporal**: **5 dessas quedas 403 começam 1,5–4,7 min depois** de o Hostinger emitir um **MySQL Abuse Report** — é o **mesmo evento**. Ou seja: quando o fan-out **N+1** de `Polylang + ACF + taxonomia` estoura a cota de recurso do plano **shared**, o Hostinger/LiteSpeed **corta com 403** por uma janela de 15–40 min e o site "cai".

Como o origin é servido **direto, sem CDN/WAF** (risco ALTO), **nada absorve o pico** antes de chegar no banco — por isso a saturação vira queda. Em segurança, **não há evidência de comprometimento** (breach); há **exposição real de superfície**: origin exposto (ALTO), user-enum via `/wp-json/wp/v2/users` (expõe `alicante`), XML-RPC ativo, headers ausentes, DMARC `p=none` (MÉDIO).

Caminho, **maior ganho / menor esforço**: **Cloudflare na frente** — full-page cache no edge mantém a carga **fora do origin** → a cota nunca estoura → **sem 403** — e ainda entrega WAF + rate-limit + oculta o IP. Depois **hardening WordPress** + **tuning do DB**. Lacuna que os dados externos não fecham: **integridade de arquivos** (webshell) → scan de malware + `public_html.zip` é a verificação #1.

```mermaid
flowchart LR
    A["22 quedas UptimeRobot<br/>17x 403 - 5x timeout"] --> B{"403 = recusa ativa<br/>crash? invasao?"}
    B -->|"5x 403 iniciam <5min<br/>apos MySQL Abuse Report"| C["THROTTLE HOST-SIDE<br/>Hostinger corta 403 quando<br/>N+1 estoura cota shared"]
    B -->|"sem evidencia de breach"| D["Exposicao de superficie<br/>(nao comprometimento)"]
    C --> E["Cloudflare no edge:<br/>carga fora do origin = sem 403"]
    D --> F["Hardening WP +<br/>verificar file-integrity"]
    style C fill:#a8332a,color:#fff
    style D fill:#b8860b,color:#111
    style E fill:#2f7d5b,color:#fff
    style F fill:#2f7d5b,color:#fff
```

---

## 1. Background (Contexto)

Alicante é cliente de **manutenção** da Mukutu — site institucional/catálogo de pedras (Technistone, Basaltina, Onix, Quartzito). WordPress em **LiteSpeed/PHP 8.3.30**, tecnicamente **isolado** da infra própria da agência (`mukutu-mono` / `muki-vps`).

| Camada | Onde | Nota |
|---|---|---|
| Domínio | registro.br | precisa de acesso pra trocar nameservers |
| DNS + e-mail | **Locaweb** (ns1-3.locaweb.com.br) | MX Locaweb; SPF inclui RDStation + SendGrid — **não quebrar na migração** |
| Origin (WordPress) | IP **72.61.49.79** — LiteSpeed/PHP 8.3.30 | **exposto, sem CDN** |
| Banco / telemetria de abuso | Hostinger (`u235710689_micrao`, node `br-asc-web890.main-hosting.eu`) | fonte dos MySQL abuse reports |
| Borda (CDN/WAF) | **nenhuma** | risco ALTO |

> **Nota de reconciliação:** o blackbox rotulou a origem como "Locaweb", mas a telemetria autoritativa (abuse reports MySQL vindos de `main-hosting.eu`) indica host **Hostinger**; Locaweb é o provedor de **DNS/e-mail**. O IP `72.61.49.79` é do host. A distinção não altera as recomendações — confirmar no painel.

```mermaid
flowchart TB
    V["Visitantes + bots / crawlers"]
    subgraph Atual["Topologia ATUAL — sem borda"]
        direction TB
        V -->|"HTTP direto ao IP"| O["origin 72.61.49.79<br/>WordPress LiteSpeed PHP 8.3.30"]
        O --> DB[("MySQL Hostinger<br/>u235710689_micrao")]
    end
    DNS["DNS + e-mail: Locaweb<br/>ns1-3 · MX · SPF RDStation+SendGrid"] -.resolve.-> O
    style Atual fill:#2c1815,color:#fff
    style O fill:#a8332a,color:#fff
```

---

## 2. Current Condition (Condição Atual)

Fontes: **UptimeRobot** (22 incidentes, 06-19→07-10) + **8 relatórios de abuso MySQL** (Hostinger, 23/06→10/07) + **Relatório de Proteção blackbox** (2026-07-07) + **ticket Ekyte** + backups `public_html.zip` / `domains.zip` (7.5 GB cada, capturados, não processados — ver §7).

### 2.1 Padrão de downtime (UptimeRobot — evidência primária)

**22 incidentes** em 22 dias, **7.4 h** de indisponibilidade total, duração média **20 min** (15–40 min). Distribuição por causa:

| Causa (UptimeRobot) | Qtd | Leitura |
|---|---|---|
| **403 Forbidden** | **17** | servidor **recusa ativamente** — não é crash 5xx |
| 408 Request Timeout | 4 | servidor tão saturado que não responde a tempo |
| Connection Timeout | 1 | idem, conexão nem completa |

Clusters por dia: **07-01 (7×)**, **06-25 (5×)**, 06-30 (3×), 07-10 (3×), + isolados 06-19/06-23/07-02/07-05. Os dias de pico batem com os picos dos abuse reports (07-01 = pico de 1611 ms).

**🔫 Correlação decisiva — as quedas 403 SÃO os eventos de abuso de recurso:**

| Início da queda 403 | MySQL Abuse Report | Δ |
|---|---|---|
| 2026-06-23 23:59:54 | 23:57:07 | **+2,8 min** |
| 2026-06-25 12:52:58 | 12:49:55 | **+3,0 min** |
| 2026-06-30 13:53:32 | 13:52:02 | **+1,5 min** |
| 2026-07-01 16:51:09 | 16:49:13 | **+1,9 min** |
| 2026-07-10 16:47:47 | 16:43:05 | **+4,7 min** |

Cinco quedas 403 iniciam **1,5–4,7 min** após o Hostinger emitir o abuse report do mesmo instante. Não é coincidência: o **403 é o Hostinger/LiteSpeed cortando a requisição** quando a cota de recurso do plano shared estoura — o abuse report e a queda são **o mesmo evento**.

```mermaid
timeline
    title Quedas UptimeRobot por dia (nº de incidentes)
    2026-06-19 : 1x 403
    2026-06-23 : 1x 403 (=abuse report)
    2026-06-25 : 5x (3x403 + 2x408) (=abuse report)
    2026-06-30 : 3x 403 (=abuse report)
    2026-07-01 : 7x (5x403 + 2x408) PICO (=abuse 1611ms)
    2026-07-02 : 1x 403
    2026-07-05 : 1x conn-timeout
    2026-07-10 : 3x 403 (=abuse report)
```

```mermaid
flowchart LR
    BOT["Pico de trafego / bots<br/>(sem CDN absorvendo)"] --> LOAD["N+1 Polylang+ACF+taxonomia<br/>satura CPU/IO do DB"]
    LOAD --> CAP["Cota do plano shared estourada"]
    CAP --> AR["Hostinger emite<br/>MySQL Abuse Report"]
    CAP --> F403["LiteSpeed corta com<br/>403 Forbidden (15-40 min)"]
    AR -. mesmo instante .- F403
    F403 --> DOWN["UptimeRobot marca QUEDA"]
    DOWN --> RECOVER["Cooldown -> volta 200"]
    style F403 fill:#a8332a,color:#fff
    style DOWN fill:#a8332a,color:#fff
```

### 2.2 KPIs do blackbox (2026-07-07)

| KPI | Valor | Estado |
|---|---|---|
| Status HTTP | 200 OK | ● no ar |
| Latência (última leitura) | 0.32s | ● saudável |
| **CDN** | **nenhum — resposta direta do IP** | ● **EXPOSTO (ALTO)** |
| TLS | válido até 13/ago/2026 | ● válido |
| DMARC | `p=none` | ● monitor-only |
| User enum | `/wp-json/wp/v2/users` expõe `alicante` | ● exposto |

Baseline do monitor (`alicante-monitor.log`, cron 5min): `200` em 0.08–0.32s, `x-litespeed-cache: hit`. Ou seja, **quando responde, responde bem** — as quedas são **intermitentes**, coerentes com saturação sob pico e não com indisponibilidade contínua.

### 2.2 Timeline de carga do banco

| # | Data/hora | Pico (ms) | Observação |
|---|---|---|---|
| 4 | 2026-07-01 16:49 | **1611.4** | pico alto · 2 hashes rate-limit |
| 5 | 2026-07-02 18:03 | 739.4 | único `UPDATE` — housekeeping do rate-limiter |
| 7 | 2026-07-08 13:46 | **1131.2** | 2º pico |
| — | 06-23 / 06-25 / 06-30 / 07-06 / 07-10 | 0.6–483 | rotina/calmo |

```mermaid
timeline
    title Carga do DB alicante.com.br (pico ms/relatorio)
    2026-06-23 : 344.9 ms rotina
    2026-06-25 : 0.6 ms trivial
    2026-06-30 : 108.7 ms rotina
    2026-07-01 : 1611.4 ms PICO ALTO
    2026-07-02 : 739.4 ms UPDATE rate-limit
    2026-07-06 : 53.8 ms calmo
    2026-07-08 : 1131.2 ms PICO ALTO
    2026-07-10 : 482.9 ms moderado
```

### 2.3 Mapa de risco (blackbox)

| Item | Estado | Risco |
|---|---|---|
| CDN / edge network | ausente — resposta direta do IP origem | 🔴 **ALTO** |
| Enumeração de usuário | `/wp-json/wp/v2/users` expõe username `alicante` | 🟠 MÉDIO |
| XML-RPC | endpoint ativo, responde 405 em GET | 🟠 MÉDIO |
| Security headers | só CSP básico; falta HSTS, X-Frame-Options, X-Content-Type | 🟠 MÉDIO |
| DMARC | `p=none` — só relatório, não bloqueia spoof | 🟠 MÉDIO |
| Cache de página | `x-litespeed-cache: hit` — funcionando | 🟢 BAIXO |
| Certificado TLS | válido até 13/ago/2026 | 🟢 BAIXO |

```mermaid
flowchart TB
    subgraph ALTO["RISCO ALTO"]
        R1["CDN ausente<br/>origin IP exposto"]
    end
    subgraph MEDIO["RISCO MEDIO"]
        R2["User-enum wp-json"]
        R3["XML-RPC ativo"]
        R4["Headers ausentes<br/>HSTS/X-Frame/X-Content"]
        R5["DMARC p=none"]
    end
    subgraph BAIXO["RISCO BAIXO / OK"]
        R6["LiteSpeed cache hit"]
        R7["TLS ate ago/2026"]
    end
    style ALTO fill:#a8332a,color:#fff
    style MEDIO fill:#b8860b,color:#111
    style BAIXO fill:#2f7d5b,color:#fff
```

### 2.4 Mecanismo da queda

```mermaid
flowchart TD
    T["Trafego / bots batem<br/>DIRETO no origin (sem borda)"] --> N["Render dispara N+1:<br/>Polylang + ACF + taxonomia produtos"]
    N --> Q["Queries de 1.0-1.6s<br/>sem indice composto"]
    Q --> R["CPU/IO do DB ultrapassa<br/>cota do plano shared"]
    R --> AB["Hostinger: Abuse Report +<br/>LiteSpeed corta com 403"]
    AB --> DOWN["403 Forbidden 15-40 min<br/>UptimeRobot marca QUEDA"]
    DOWN --> T
    NOCDN["Sem CDN/WAF:<br/>nada absorve o pico"] -.amplifica.-> T
    style DOWN fill:#a8332a,color:#fff
    style NOCDN fill:#b5541f,color:#fff
```

### 2.5 Segurança — breach vs exposição

```mermaid
flowchart LR
    subgraph SemBreach["SEM evidencia de comprometimento (DB)"]
      direction TB
      X1["nenhum write em wp_users / usermeta"]
      X2["nenhuma escrita siteurl/home/active_plugins"]
      X3["nenhum base64 / eval / hex"]
      X4["nenhuma tabela desconhecida"]
    end
    subgraph Exposicao["Exposicao REAL de superficie (blackbox)"]
      direction TB
      E1["origin exposto sem CDN — ALTO"]
      E2["user-enum expoe 'alicante'"]
      E3["XML-RPC ativo"]
      E4["headers ausentes + DMARC p=none"]
    end
    SemBreach --> V["Nao comprometido,<br/>mas exposto"]
    Exposicao --> V
    style V fill:#b8860b,color:#111
```

---

## 3. Goal (Condição-Alvo)

| Dimensão | Atual | Alvo |
|---|---|---|
| Borda | origin exposto, sem CDN | tráfego via **Cloudflare** (IP origin oculto) |
| Disponibilidade | quedas em rajadas | uptime estável, sem throttle de DB |
| Carga de DB | picos 1.0–1.6s N+1 | queries < 200ms; sem abuse reports |
| Superfície de ataque | user-enum, XML-RPC, headers, DMARC | enum bloqueado, XML-RPC restrito, headers + DMARC endurecidos |
| Segurança file-side | **não verificada** | integridade confirmada (scan malware) |
| Observabilidade | monitor 5min (só uptime) | + Cloudflare Analytics (bot vs humano) + antes/depois |

---

## 4. Root Cause Analysis

### 4.1 Cinco Porquês

```mermaid
flowchart TD
    P1["Por que o site cai de forma recorrente?"] --> P2["Hostinger corta com 403 Forbidden<br/>(17/22 quedas) por 15-40 min"]
    P2 --> P3["Por que o DB estoura a cota?"]
    P3 --> P4["Queries N+1 de 1.0-1.6s saturam CPU/IO<br/>em picos que chegam DIRETO ao origin"]
    P4 --> P5["Por que os picos chegam direto e as queries sao pesadas?"]
    P5 --> P6["Sem CDN/WAF na borda (nada absorve) +<br/>Polylang/ACF/taxonomia sem indice/cache"]
    P6 --> P7["Por que nao foi contido antes?"]
    P7 --> P8["RAIZ: origin exposto sem borda + WP multi-idioma pesado<br/>em plano shared, sem hardening nem observabilidade de borda"]
    style P8 fill:#a8332a,color:#fff
```

### 4.2 Ishikawa

```mermaid
flowchart LR
    EFFECT["Quedas recorrentes<br/>+ superficie exposta"]
    subgraph M1["Borda / Rede"]
      A1["Sem CDN — origin exposto"]
      A2["Sem WAF / rate-limit edge"]
      A3["Sem absorcao de DDoS/bot"]
    end
    subgraph M2["Aplicacao / Codigo"]
      B1["Polylang N+1 por post"]
      B2["ACF field por post_name"]
      B3["Taxonomia produtos tree-walk"]
    end
    subgraph M3["Plataforma / DB"]
      C1["Plano shared: cota rigida"]
      C2["Indices compostos ausentes"]
      C3["Vizinhos ruidosos"]
    end
    subgraph M4["Postura de seguranca"]
      D1["user-enum wp-json"]
      D2["XML-RPC ativo"]
      D3["headers + DMARC fracos"]
      D4["file-integrity NAO verificada"]
    end
    M1 --> EFFECT
    M2 --> EFFECT
    M3 --> EFFECT
    M4 --> EFFECT
    style EFFECT fill:#a8332a,color:#fff
```

### 4.3 Hipóteses × evidência

```mermaid
flowchart TB
    H1["H1: Invasao webshell/DB"] --> H1E["Descartada como CAUSA DAS QUEDAS<br/>(403=host, nao atacante); file-integrity ainda a verificar"]
    H2["H2: Throttle 403 por N+1 sem borda"] --> H2E["PROVADO: 403 correlaciona <5min<br/>com abuse reports = CAUSA RAIZ"]
    H3["H3: DDoS volumetrico"] --> H3E["Sem assinatura; origin exposto = risco vivo, nao a causa"]
    H4["H4: Scraping / bots"] --> H4E["4 hashes rate-limit rotativos = gatilho de carga que agrava H2"]
    style H2 fill:#2f7d5b,color:#fff
    style H1 fill:#414a56,color:#fff
    style H3 fill:#b8860b,color:#111
    style H4 fill:#b8860b,color:#111
```

---

## 5. Countermeasures

```mermaid
quadrantChart
    title Impacto x Esforco das contramedidas
    x-axis "Baixo esforco" --> "Alto esforco"
    y-axis "Baixo impacto" --> "Alto impacto"
    quadrant-1 "Fazer ja"
    quadrant-2 "Planejar"
    quadrant-3 "Depois"
    quadrant-4 "Avaliar"
    "Cloudflare CDN+WAF": [0.35, 0.95]
    "Bloquear user-enum": [0.2, 0.7]
    "Restringir XML-RPC": [0.25, 0.68]
    "Rate-limit wp-login": [0.3, 0.72]
    "Security headers": [0.3, 0.6]
    "Scan malware+integridade": [0.2, 0.85]
    "Indices DB": [0.5, 0.7]
    "Atualizar core/plugins": [0.35, 0.65]
    "DMARC p=quarantine": [0.4, 0.45]
```

| # | Contramedida | Ataca | Esforço | Impacto |
|---|---|---|---|---|
| C1 | **Cloudflare na frente** — CDN + cache + WAF + rate-limit + DDoS; oculta origin IP | disponibilidade + ALTO + bots | médio | **muito alto** |
| C2 | **Scan malware (Monarx/Wordfence) + file-integrity do `public_html.zip`** | fecha gap H1 (webshell) | baixo | alto |
| C3 | Bloquear enumeração de usuário (`/wp-json/wp/v2/users`) | MÉDIO enum | baixo | alto |
| C4 | Restringir XML-RPC | MÉDIO XML-RPC | baixo | médio |
| C5 | Rate-limit em `/wp-login.php` (regra grátis Cloudflare) | brute-force | baixo | médio |
| C6 | Headers de segurança (HSTS, X-Frame-Options, X-Content-Type) | MÉDIO headers | baixo | médio |
| C7 | Atualizar core/plugins/tema (plugin travando PHP-FPM = queda clássica) | H2 estabilidade | baixo | alto |
| C8 | Índices compostos nas tabelas de taxonomia/postmeta | H2 | médio | alto |
| C9 | DMARC `p=quarantine`/`reject` (após validar SPF/DKIM) | MÉDIO spoof | médio | médio |

---

## 6. Plan (Implementação — grounded no Relatório de Proteção)

```mermaid
gantt
    title Plano de remediacao Alicante (4 fases do relatorio)
    dateFormat YYYY-MM-DD
    axisFormat %m-%d
    section 01 Pre-migracao
    Dump zone DNS (feito)            :done, p1, 2026-07-07, 1d
    Registros e-mail MX/SPF (feito)  :done, p1b, 2026-07-07, 1d
    Confirmar acesso registro.br     :crit, p1c, 2026-07-14, 1d
    Congelar baseline uptime         :active, p1d, 2026-07-07, 8d
    section 02 Cloudflare
    Criar conta + importar zone      :c2a, 2026-07-15, 1d
    Conferir records vs dump         :crit, c2b, 2026-07-15, 1d
    Trocar nameservers registro.br   :c2c, 2026-07-16, 1d
    Proxy laranja so no A (MX cinza) :crit, c2d, 2026-07-16, 1d
    SSL Full strict                  :c2e, 2026-07-16, 1d
    section 03 Hardening WP
    Atualizar core/plugins/tema      :h1, 2026-07-15, 2d
    Bloquear user-enum               :h2, 2026-07-15, 1d
    Restringir XML-RPC               :h3, 2026-07-15, 1d
    Rate-limit wp-login (CF)         :h4, 2026-07-17, 1d
    Security headers                 :h5, 2026-07-16, 1d
    section 04 Verificar + observar
    Scan malware + file-integrity    :crit, v1, 2026-07-14, 2d
    Cloudflare Analytics (bot/humano):o1, 2026-07-17, 1d
    Comparar metricas antes/depois   :o2, 2026-07-18, 3d
```

### 6.1 Fluxo seguro da migração DNS (não quebrar e-mail)

```mermaid
flowchart TD
    S["Importar zone na Cloudflare"] --> CHK{"Records batem<br/>com o dump do passo 01?"}
    CHK -->|Nao| FIX["Recriar MX + SPF<br/>(RDStation + SendGrid)"] --> CHK
    CHK -->|Sim| NS["Trocar nameservers<br/>no registro.br"]
    NS --> PX{"Proxy por record"}
    PX -->|"A do site"| ORANGE["Nuvem LARANJA<br/>(proxy + WAF + cache)"]
    PX -->|"MX / e-mail"| GREY["Nuvem CINZA<br/>(DNS only) — senao e-mail para"]
    ORANGE --> SSL["SSL mode = Full (strict)"]
    style GREY fill:#b8860b,color:#111
    style ORANGE fill:#2f7d5b,color:#fff
```

### 6.2 Verificação de segurança file-side (C2)

```mermaid
flowchart TD
    S["Scan malware<br/>+ file-integrity public_html.zip"] --> Q{"Arquivo<br/>malicioso/modificado?"}
    Q -->|Sim| INC["ESCALAR incidente:<br/>limpar, rotacionar credenciais,<br/>restaurar backup limpo"]
    Q -->|Nao| CLEAN["Confirma: exposicao sem breach<br/>seguir so com hardening + Cloudflare"]
    INC --> POST["Post-mortem + hardening reforcado"]
    CLEAN --> POST
    style INC fill:#a8332a,color:#fff
    style CLEAN fill:#2f7d5b,color:#fff
```

---

## 7. Follow-up

### 7.1 Gaps de evidência

O blackbox é **externo** e os abuse reports são snapshots de 600s — nenhum prova **integridade de arquivos**. Um webshell/PHP modificado (vetor #1 em WordPress) **não pode ser descartado** sem o scan de malware + diff do `public_html.zip` contra um WP limpo.

```mermaid
mindmap
  root((Fechar os gaps))
    File-side
      Scan Monarx Hostinger
      Wordfence malware scan
      Diff public_html.zip vs WP limpo
      Checar mu-plugins e uploads/*.php
    Identidade
      Dump wp_users / usermeta
      Admins inesperados?
    Config
      active_plugins / siteurl / home
      .htaccess / wp-config
    Borda (pos-Cloudflare)
      Analytics bot vs humano
      Regras WAF por padrao de ataque
      Confirmar origin IP oculto
```

### 7.2 KPIs de acompanhamento

```mermaid
stateDiagram-v2
    [*] --> Exposto
    Exposto --> Verificando: scan malware + integridade
    Verificando --> Comprometido: achou malware
    Verificando --> Limpo: nada encontrado
    Comprometido --> Remediando: limpar + restaurar
    Limpo --> BordaAtiva: Cloudflare CDN+WAF no ar
    Remediando --> BordaAtiva
    BordaAtiva --> Endurecido: enum/XMLRPC/headers/DMARC ok
    Endurecido --> Estavel: sem abuse report 14d + origin oculto
    Estavel --> [*]
```

| KPI | Meta |
|---|---|
| Origin IP exposto | não (atrás da Cloudflare) |
| Abuse reports MySQL / semana | 0 |
| p95 tempo de query | < 200 ms |
| Uptime (monitor 5min) | ≥ 99.9% |
| User-enum / XML-RPC | bloqueados |
| Headers HSTS/X-Frame/X-Content | presentes |
| Findings de malware | 0 confirmados |

### 7.3 Próxima ação imediata

Duas frentes paralelas, ambas **sem depender de login vivo**:
1. **C1 Cloudflare** — maior ganho/menor esforço: resolve disponibilidade + oculta origin + WAF/rate-limit. Pré-req: confirmar acesso ao **registro.br** (trocar nameservers).
2. **C2 verificação file-side** — scan de malware Hostinger (Monarx/Wordfence) + integridade do `public_html.zip`: converte "sem evidência de invasão (DB/externo)" em "postura verificada (file-side)".

---

### Apêndice — Fontes

- **Relatório de Proteção** blackbox `alicante.com.br` (2026-07-07) — KPIs, mapa de risco, plano 4 fases, `alicante-monitor.log`.
- **Ekyte** task 9890071 — investigação de quedas recorrentes + análise de segurança.
- **Google Drive** (logs) — 8× `mysql_abuse_report_*.txt`, `public_html.zip` (7.5 GB), `domains.zip` (7.5 GB).
- **repomix** superfície deploy/infra/auth/CI do `mukutu-mono` — confirmou separação da infra da agência.
