## 2026-07-23 — Brain híbrido: GPU PC pensa → hub valida → hub age

- **decision_mode: hybrid_gpu** · modelo `speedfibra-ops` no Ollama PC (`100.66.153.103:11434`)
- **hybrid_decide/hub_validate**: GPU propõe; hub veta CDN/cliente e aplica conf≥88
- **Fallback**: se PC offline, motor determinístico no hub
- **Painel:** ciclo mostra gpu_path / hub_fallback
- **Validar:** log `think ip=... thinker=gpu_pc+hub_validate`; cerebro data.json

## 2026-07-28 — Política BGP: TTO primário · Nanuque secundário (confirmado)

- **Host:** CCR BGP `45.65.132.1`
- **Política:** Teófilo Otoni default **LP 220** (ACTIVE); Nanuque default **LP 100** (standby); FULL default LP 210
- **Validado ao vivo:** IPv4 `0.0.0.0/0` via `172.16.4.101`; IPv6 `::/0` via VLAN CONECT 2018 (TTO)
- **Doc:** `docs/melhoria-de-rotas/POLITICA-BGP-TTO-PRIMARIO.md`
- **Apply:** filtros já estavam corretos — sem mudança de produção nesta data

## 2026-07-26 — Pacote Melhoria de Rotas BGP (doc + scripts, sem apply)

- **O quê:** pacote de explicação e plano de TE/higiene do BGP AS266529 no CCR `45.65.132.1`
- **Docs:** `docs/melhoria-de-rotas/` (README, DIAGNOSTICO-ATUAL, PLANO-FASES, CHECKLIST)
- **Scripts:** `scripts/melhoria-de-rotas/` — `00-audit.sh` (leitura), F1 TE retorno, F2 LP FULL, F5 OUT, rollback OUT
- **Snapshot ao vivo:** 14 sessões ESTABLISHED; default TTO; RX ~1,9G sfp1 vs ~0 sfp4; AS268217 ainda processa ~1M rotas
- **Apply:** **nenhum** filtro/peer alterado em produção — só documentação e RSC prontos
- **Validar:** `bash scripts/melhoria-de-rotas/00-audit.sh`

## 2026-07-23 — Brain nível 5 + conf 88 + TG pós-análise

- **autonomy_level: 5** · **min_confidence_auto: 88**
- **Telegram:** só após análise (CDN/blacklist/AbuseIPDB); IGNORE/CDN não notificam
- **AbuseIPDB:** entra na análise pré-ban (se key configurada)
- **Level5:** PROPOSE com conf alta pode virar SAFE_AUTO_BLOCK (com vetos)
- **Validar:** policy.yaml; send_telegram sem analysis → skipped

## 2026-07-23 — Cérebro: AbuseIPDB + gestão de APIs + live total

- **Painel:** https://noc.aspeednet.com.br/cerebro/ com abas Visão / Atividade / Decisões / Consultar IP / APIs / Melhorias
- **AbuseIPDB:** integração no `check_threat_intel` + cache 1h; key em `apis.env` (UI com SF_ACTION_TOKEN)
- **Live API:** `/brain-api/live` agrega status, apis, activity, decisions, improvements
- **Cofre:** `/opt/speedfibra-brain/config/apis.env` chmod 600
- **Validar:** abrir /cerebro → APIs → colar ABUSEIPDB_API_KEY + token → Testar

## 2026-07-23 — Brain: threat intel CDN + blacklist (link 10G)

- **Listas negras:** FireHOL level1, Spamhaus DROP/EDROP, blocklist.de (~12k redes + 27k IPs)
- **CDN (nunca ban auto):** Cloudflare, Google, Meta, Fastly, Akamai, CloudFront, Azure, Netflix, etc.
- **API:** `/brain-api/intel/<ip>` e `/brain-api/intel-stats`
- **Update:** timer 6h `speedfibra-brain-intel-update.timer`
- **Policy:** limiares Mbps/pps calibrados para uplink **10G**
- **Validar:** `curl https://noc.aspeednet.com.br/brain-api/intel/1.1.1.1` → is_cdn true

## 2026-07-23 — Network Brain v2.0 (super-agente)

- **Serviço:** `speedfibra-brain` + API `:8791` em `/opt/speedfibra-brain`
- **Missão:** QoE + proteção + roadmap de melhorias (internet incomparável)
- **Autonomia 4:** SAFE_AUTO_BLOCK só IP **externo**, conf≥92, lista **`ai-auto-block`**, TTL≤60min
- **CCR:** regras filter/raw drop para `ai-auto-block` (NB2)
- **Cliente/CGNAT/CDN/infra:** ban automático **recusado** (regra imutável)
- **Painel:** https://noc.aspeednet.com.br/cerebro/
- **Kill:** `touch /opt/speedfibra-brain/state/KILL`
- **Validar:** systemctl status speedfibra-brain; curl :8791/health; /cerebro/data.json

## 2026-07-22 — Limpeza falsos positivos frota/Telegram/SpeedShield

- **Frota:** ESXi probe com `sh` (não bash); IPs 182/183/184/188 = `ok_expected`; PC mesa = `ok_optional`
- **Score:** de ~55 → ~84+; `bad_count=0` para alertas
- **Telegram:** frota/WG silencados no modo critical; só críticos
- **SpeedShield 149:** watch OK por API mesmo sem ICMP; exit 0
- **Anomaly:** heartbeat no log + STALE 900s (fim do restart spam)
- **Validar:** `/vms` score alto; `/avisos` warn=0; dry alerts msgs=[]

## 2026-07-22 — Telegram só crítico + painel Avisos NOC

- **Telegram:** `SF_ALERT_LEVEL=critical` · heartbeat TG desligado (`SF_HEARTBEAT_SEC=0`)
- **NOC:** https://noc.aspeednet.com.br/avisos/ · JSON `/avisos/data.json` (warn/info a cada ~90s)
- **Conteúdo painel:** frota partial, WG peers, autofind, core down info, prom non-critical, contadores GPON
- **Monitor continua 24/7** em tudo; celular só o grave + análise IA
- **Validar:** página 200; log `noc board warn=… info=… tg=0 level=critical`

## 2026-07-22 — IA com acesso total + alertas nível ALL

- **Nível:** `SF_ALERT_LEVEL=all` (recuperações, autofind, SS, frota, WireGuard, core)
- **Acesso leitura total:** frota 26 hosts, inventário Phoenix (37), core 20 equipamentos, Prometheus 95 targets, WG, GPON, security stack
- **sf_lib:** `fleet_health_snapshot`, `core_equipment_probe`, `inventory_hosts_brief`, `wireguard_snapshot`, `prometheus_jobs_brief`, `full_network_snapshot`
- **Agent:** tools + contexto FLEET/CORE/INVENTORY em perguntas de rede; `/snapshot` expandido
- **Alertas:** monitor frota/core/WG além de GPON/SS/Prom; IA enriquece Telegram
- **HITL:** ações destrutivas continuam com token/CONFIRMO do operador
- **Validar:** Telegram nível all; `curl -X POST :8777/snapshot`; dry-run alerts

## 2026-07-22 — IA monitor 24/7 + alertas com análise (Telegram)

- **Host:** nextcloud (NOC) · serviços `speedfibra-alerts` + `speedfibra-ai` + guardian
- **Alertas:** cada crítico é enriquecido via `POST :8777/chat` (Nilson/Sentinel/Duo) com impacto + ações recomendadas
- **Monitor contínuo:** loop 90s (GPON offline/RX, SpeedShield, Prometheus, autofind) + heartbeat ~4h
- **HITL:** IA só monitora e orienta; mudanças na rede continuam com o operador (CONFIRMO)
- **Resumo diário 08:00:** `telegram_daily_summary.sh` corrigido (heredoc) + texto da IA
- **Config:** `/opt/speedfibra-ai/config/telegram.env` → `SF_AI_ENRICH=1` `SF_HEARTBEAT_SEC=14400`
- **Validar:** Telegram recebeu “monitor 24/7 ATIVO”; `journalctl -u speedfibra-alerts -f`

## 2026-07-22 — IA no PC Bessoni + Console na tela (NVMe E:)

- **PC:** bessoni-desktop · pasta `E:\aspeednet-ai\`
- **Ollama:** models em `E:\aspeednet-ai\ollama\models` · host `0.0.0.0:11434`
- **Console UI:** `http://127.0.0.1:8789/` (chat + atividade + CPU/RAM/GPU/VRAM/disco)
- **Auto-start:** tarefas `Aspeednet-Ollama` + `Aspeednet-AI-Console` no logon
- **NOC:** `OLLAMA_REMOTE_URL=http://100.66.153.103:11434` · modelo `llama3.1:8b`
- **Atalho desktop:** Speed Fibra IA.lnk

## 2026-07-22 — Laudo PC Bessoni como nó de IA do provedor

- **Host:** bessoni-desktop (CC) · i7-10700F · 32GB · RTX 5060 Ti 16GB · NVMe 1TB + SSD 480G
- **Doc:** `docs/LAUDO-PC-BESSONI-IA-PROVEDOR.md` + download NOC
- **Veredito:** AI Ops Worker (Ollama Qwen 27B) acoplado ao hub; HITL para rede
- **Próximo:** Ollama :11434 restrito + OLLAMA_REMOTE_URL no speedfibra-ai

## 2026-07-22 — Fix /vms/ não abria (AAAA órfão + auth)

- **Causa:** DNS `noc`/`veloz` com AAAA `2804:3d68:5::180` mas hub sem IPv6 → browser dual-stack travava
- **DNS ns1:** removido AAAA de noc/veloz/cch-test (serial aspeednet 2026072117); aspeedfibra noc AAAA removido
- **Auth:** `/vms`, `/phoenix/vms`, `/phoenix/api/fleet-health` públicos (AuthType None)
- **Página:** JSON prioriza `/vms/data.json`; sem Google Fonts (evita hang)
- **Validar:** `dig noc.aspeednet.com.br AAAA` vazio; `curl -k https://noc.aspeednet.com.br/vms/` → 200

## 2026-07-21 — Página NOC: saúde da frota VMs (atualiza 1h)

- **URL:** https://noc.aspeednet.com.br/phoenix/vms (também `/phoenix/frota`, espelho `/vms/`)
- **JSON:** `/phoenix/api/fleet-health` e `/phoenix/static/vm-fleet-health.json`
- **Coletor:** `/opt/speedfibra-monitor/scripts/vm_fleet_health.py`
- **Timer:** `speedfibra-vm-fleet-health.timer` (OnUnitActiveSec=1h)
- **Conteúdo:** status SSH/ping/load/disco/mem/serviços de ~26 hosts + VMs Proxmox
- **Validar:** `systemctl start speedfibra-vm-fleet-health.service`; curl health 200

## 2026-07-21 — NOC: alívio de HD/IO no hub nextcloud

- **Host:** nextcloud `45.65.135.180` (disco **HDD** rotational=1, iowait alto)
- **Causas:** log Docker rustdesk **11G**; journal ~4G; Netdata; Prometheus retention 400d; loop `changelog_watch`→AUTO-CHANGELOG; **anomaly.db-wal 1,9G**; monitor.db/services.db inchados
- **Ações:**
  - Truncate log rustdesk + limites logging; `daemon.json` max-size 20m×3
  - Journald SystemMaxUse=400M (agora ~200M)
  - Netdata + Portainer parados (profile `heavy`); volumes legados isp-monitor/netdata removidos
  - Prometheus retention **30d**, scrape **60s**; Loki retention **7d**
  - Corrigido loop changelog (ignore .db/.log/AUTO-CHANGELOG; watch map enxuto)
  - Vacuum/prune SQLite (monitor/changelog/services); wipe WAL anomaly
  - Nice/ionice collectors; anomaly interval 180s; sysctl dirty pages HDD
- **Resultado esperado:** menos iowait, disco ~50G usado (antes ~64G + logs), NOC endpoints OK
- **Não migrado** stack inteira p/ grok (SSD): alto risco de quebra NOC; hub aliviado no local. Próximo passo opcional: Prometheus/Loki no VM grok `.187` se iowait voltar
- **Backup:** `/root/backups/noc-hd-relief-20260721141130`
- **Validar:** `vmstat` wa baixo; `curl :8780/health :9090/-/healthy :8765/health`; `docker ps`; wg0/wg-sp-cc

## 2026-07-21 — IPv6 removido por completo no hub (Grok trava)

- **Host:** nextcloud (`45.65.135.180`)
- **Motivo:** Grok CLI trava com dual-stack / IPv6; limpeza total pedida
- **interfaces:** removido `inet6 static` da ens224; DNS só IPv4 (`45.65.135.150` + públicos)
- **sysctl:** `60-speedfibra-ipv6.conf` e `sysctl.conf` com `disable_ipv6=1` (all/default/lo)
- **GRUB:** mantido `ipv6.disable=1` (kernel já com module disable=1)
- **Causa raiz do reaparecer:** timer `speedfibra-ipv6-guard` (a cada 1 min) reabilitava IPv6 e adicionava `2804:3d68:67::180` — **parado, desabilitado e masked**
- **resolv-guard:** reescrito para manter DNS **IPv4 only** (antes recolocava nameservers IPv6)
- **gai.conf:** precedence IPv4 (`::ffff:0:0/96 100`)
- **Backup:** `/root/backups/ipv6-cleanup-20260721134731` no host
- **Validar:** `ip -6 addr` vazio; `AF_INET6` → EAFNOSUPPORT; ping GW/8.8.8.8 OK; resolv sem `2804:`/`2001:4860`

## 2026-07-21 — IPv6 na ens224 (vlan102) 2804:3d68:5::180

- **Host:** nextcloud
- **ens224 UP:** `2804:3d68:5::180/64` gw `2804:3d68:5::1` (vlan102 farm)
- **ens192:** IPv6 continua OFF (só IPv4 `45.65.135.180/28`) — evita dual-stack na WAN do Grok
- **sysctl:** `/etc/sysctl.d/60-speedfibra-ipv6.conf` (seletivo: ens224 on, ens192 off)
- **default v6:** via ens224

## 2026-07-21 — IPv6 DESATIVADO no hub (conflito Grok)

- **Host:** nextcloud (45.65.135.180)
- **Pedido:** desativar IPv6 e **não reativar** (conflito com Grok)
- **sysctl:** `/etc/sysctl.d/60-speedfibra-ipv6-disable.conf` (`disable_ipv6=1` all/default/ens192/lo)
- **removido:** `60-speedfibra-ipv6-enable.conf` e stanza `inet6 static` de `/etc/network/interfaces`
- **pre-up:** força `disable_ipv6=1` no ifup da ens192
- **Runtime:** IPv6 flush em ens192; sem endereços v6; IPv4 + GW 45.65.135.177 OK
- **NÃO reabilitar** sem pedido explícito do operador

## 2026-07-21 — Recovery IPv6 hub nextcloud (Grok)

- Causa: `disable_ipv6=1` em runtime → sem 67::180, curl6/DNS v6 quebrados
- Fix: sysctl.d 60-speedfibra-ipv6-enable, pre-up no interfaces, gai prefer v4
- DNS .152/.158: stub-zone aspeednet/aspeedfibra → 150/151/146/147 OK; flush cache .152

## 2026-07-21 — IPv6 AAAA em todos os serviços SF

- Zona **aspeednet.com.br** serial **2026072101**: AAAA alinhados (vlan102 `2804:3d68:5::` farm / vlan103 `2804:3d68:67::` hub)
- Zona **aspeedfibra.com.br** serial **2026072101**: AAAA em apex, mail, noc
- Reverse IPv6: `2804:3d68:67::/64` + nova `2804:3d68:5::/64` com PTRs dos serviços
- nperf: `BIND_IP="::"` (dual-stack 80/443/8080/8443)
- speedshield: bind `[::]:8080` dual-stack
- Sem AAAA: unms (.184 down), rustdesk (.157 down), voip (.133 sem v6)
- veloc: AAAA `67::182` publicado; host inacessível no momento

## 2026-07-16 — Biblioteca VOD própria Speed Fibra (filmes/séries + HLS)

- **Serviço** `speedfibra-vod` em `45.65.135.155:8092` + storage `/var/lib/speedfibra-vod`
- **CLI** `vod-admin.sh` (add-movie, add-series, add-episode, poster, incoming)
- **Cliente:** TV → aba **Biblioteca SF** (login conta de TV) · mídia em `/sfvod/`
- **Demo:** título "Demo Speed Fibra" HLS ready
- **10TB:** docs em `/opt/speedfibra-vod/docs/STORAGE-10TB.md` (mount `/mnt/vod`)

## 2026-07-16 — Speed Fibra TV: VOD (filmes e séries) clonado do CDNTV

- **API proxy** no portal: `/api/vod/home`, `/search`, `/title/{name}`, `/play` → manager `play.aspeednet.com.br`
- **Mesmo login** da conta de TV (token CDNTV); catálogo/metadata/playlists do MSE/Technobox
- **UI:** aba **Filmes & Séries**, rails por categoria, busca, modal de detalhe, episódios de séries, player HLS
- **Validar:** login CDNTV → Filmes & Séries → abrir título → Assistir

## 2026-07-16 — Speed Fibra TV: produto UI premium (CDNTV)

- **Decisão:** login/play continuam **CDNTV AAA** (já pronto); site refeito como produto de alta qualidade
- **UI:** hero cinematográfico, rails, favoritos, continuar assistindo, player HUD auto-hide, PWA/APK
- **Produção:** `https://tv.aspeednet.com.br` → portal `:8088` (CDNTV); lab Next em `/next/`
- **Deploy:** static v30 em `45.65.135.155:/opt/speedfibra-tv/static`
- **Validar:** abrir TV, entrar com conta CDNTV, assistir, favoritar, tela cheia

## 2026-07-15 — TV Shield: sistema anti-falha Speed Fibra TV

- **Diagnóstico:** portal/edge OK; Nimble origin CPU~95%; **fonte `nossatv.shop` com 404 em massa** (cgtnhd, amcsrieshd, etc.) + sequence reset → cliente vê “TV com problema”
- **Novo:** `/opt/speedfibra-tv-shield` + `speedfibra-tv-shield.service` (:8795)
  - health portal/origin/edge, parse log Nimble, unhealthy por canal, auto-heal, Prometheus
  - NOC: `https://noc.aspeednet.com.br/tv-shield/`
- **Portal 155 v2.0:** `stream_health.py` — oculta canais mortos (`healthy=1`); health com shield/diagnosis
- **Efeito:** lista limpa (ex.: 243→238); canais bons não competem com mortos na UX
- **Limite:** falha da fonte externa não some sozinha — precisa conteúdo/backup comercial
- **Validar:** `curl -s :8795/api/tv/status` · `curl -s :8088/api/channels | jq .hidden_unhealthy`

## 2026-07-15 — Monitor CONECT TTO + Nanuque (provas de queda + página NOC)

- **Página:** https://noc.aspeednet.com.br/phoenix/conect — gráficos, sites TTO/Nanuque, incidentes, IA reclamação
- **Coletor:** REST MikroTik a cada 30s (BGP, ping peers do CCR, VLAN 2017–2020, SFP1/SFP4, full-table)
- **Prova:** incidente → JSON+MD em `/data/conect-proofs/` + laudo NetAI/Grok; fecha com duração offline
- **Grafana:** dashboard `phoenix-transit-conect` · **Alertas:** `phoenix_transit_conect`
- **API:** `/api/transit/conect`, `/history`, `/incidents`, `/proof/{id}`, `POST /analyze`, `POST /probe`
- **Validar:** página CONECT · `curl -s localhost:8780/api/transit/conect | jq .summary`

## 2026-07-13 — SpeedShield: diagnóstico reinícios + reset DB + prune horário auto

- **Causa reinícios madrugada:** watchdogs reiniciavam em loop por API 503/lenta + `database is locked` + VM reboot 03:39.
- **Causa reincidência:** cron horário forçava `soft` (só checkpoint) → DB crescia ~500MB/h (2.9G + WAL 156M às 13:27).
- **Ação:** reset SQLite limpo (DB ~12MB, disco 11%); cron `MODE=auto` horário; watchdog não reinicia durante prune; full diurno se DB+WAL≥1200MB.
- **Status:** health `{"ok":true}` · estável desde reset 13:35 · mitigações CCR independentes do DB.
- **Validar:** `curl -sk https://noc.aspeednet.com.br/speedshield/api/health` · `ls -lh /var/lib/speedshield/` no 149

## 2026-07-13 — BGP: CONECT full rejeita 45.235.x (só link privado AS268217)

- **Manipulação nossa:** filtro IN no CONECT TTO + Nanuque rejeita `45.235.232/22` e 4×`/24`
- **AS268217 privado:** `local-pref 250` nos blocos aceitos
- **Efeito:** rotas `45.235.x` **ACTIVE** via `172.16.32.1`; CONECT full marcado **FILTERED**
- **Script:** `apply-bgp-conect-reject-peer268217.rsc`
- **Nota:** peer AS268217 ainda *envia* full table (~1M UPDATEs) — descartamos no filtro, mas RouterOS ainda processa (limit 2M)

## 2026-07-13 — BGP AS268217: sessão recuperada (limit-exceeded)

- **Problema:** `limit-exceeded` com `limit-process-routes-ipv4=100/500/50000` — peer envia full table (~1,07M UPDATEs)
- **Recovery:** `limit-process-routes-ipv4=2000000` + `session clear flag=limit-exceeded` + disable/enable
- **Status:** `AS268217-PRIVATE-IPV4-1` **ESTABLISHED** · sem `limit-exceeded`
- **OUT (6):** `/22`, 4×`/24`, `172.16.32.0/30` — validar com `advertisements print where peer~"AS268217"`
- **IN (5):** `45.235.232-235` via gateway `172.16.32.1` (instaladas; **ACTIVE** ainda via CONECT `186.192.0.253`)
- **IPv6:** `2804:4dc0::/32` pendente — sem sessão BGPv6 na VLAN2520
- **Script:** `apply-bgp-as268217-private.rsc` · `limit-process-routes-ipv4=2000000`
- **Pendente peer:** filtrar export (só 5 prefixos IPv4) — evita processar 1M rotas e libera tráfego pelo link privado

## 2026-07-13 — Telegram: só incidentes reais (sem spam de bloqueios)

- **Problema:** Anomaly Detector enviava Telegram/Alertmanager **antes** do auto-block — cada brute-force bloqueado gerava alerta
- **Correção:** notificação **após** bloqueio; `ANOMALY_NOTIFY_BLOCKED=false` (padrão)
- **Telegram agora:** só quando bloqueio **falha** ou evento não foi mitigado (incidente real)
- **Silenciado:** brute-force/port-scan bloqueados em `noc-threat`, IPs whitelist internos
- **Log:** `MITIGADO (sem Telegram)` em `anomaly-detector.log` quando bloqueio OK
- **Arquivos:** `anomaly/engine.py`, `anomaly/webhook.py`, `speedfibra-anomaly-detector.service`

## 2026-07-13 — SSH bastion: só 180 exposto na internet

- **Modelo:** `45.65.135.180` (nextcloud) = único bastion SSH público; demais hosts **vpn-only** (Tailscale / WireGuard / bloco DC)
- **Correção crítica:** allowlist usava `45.65.135.0/28` (IPs .0–.15) — servidores reais estão em `.128+` → corrigido para **`45.65.135.128/25`**
- **Removido:** `10.0.0.0/8` da allowlist do bastion (muito permissivo)
- **Bastion permite:** WG `10.8.0.0/24`, site-to-site `10.250.0.0/16`, Tailscale `100.64.0.0/12`, operador `45.65.132.0/22`, DC `45.65.135.128/25`, LAN `10.100.0.0/16` + `10.10.0.0/16`
- **Vpn-only (demais):** igual sem `45.65.132.0/22` — operador entra via VPN → bastion → jump
- **Scripts:** `apply-ssh-firewall.sh` (iptables-legacy + nftables), `deploy-ssh-bastion-model.sh`, templates em `templates/ssh-allowlist-*.conf`
- **Persistência:** `aspeednet-ssh-firewall.service` em todos os hosts; hub mantém `aspeednet-ssh-allowlist.service` legado
- **Recuperação:** ns3/ns4 corrigidos offline (guestmount + descriptor `ns3.vmdk` recriado no ESXi2)
- **Validar:** `ssh cc tst n8n ns3` do hub · `iptables-legacy -L ASPEEDNET-SSH -n -v` no 180 · WAN drop em tst/n8n

## 2026-07-13 — SpeedShield 149: anti-queda em ataque (WAL + watchdogs)

- **Problema:** Telegram spam por restarts em loop; API lenta no pico → restart; prune full no recover; WAL SQLite gigante → 503/NOC.
- **F0:** Pausados watchdogs durante cirurgia; política nova implantada.
- **F1:** Full prune com reopen+VACUUM+TRUNCATE real → DB **~24–31 MB**, WAL **~4 MB**, disco **9%**, health/status OK.
- **F2:** `prune-db.sh` reescrito (reopen, flow cap 80k, 1h flows, TRUNCATE confiável, journal DELETE cycle fallback).
- **F3:** Watchdogs anti-suicídio:
  - API lenta = **alerta, sem restart**
  - health fail = **3 consecutivas** antes de restart
  - recover = **restart SECO (sem prune)**
  - full prune só **off-peak 02–05** ou disco crítico
- **Scripts:** `security-watchdog.sh`, `speedshield-hub-watch-loop.sh`, `speedshield-prune-db.sh`, `speedshield-watchdog.sh` (+ deploy em 149).
- **Validar:** `curl -sk https://noc.aspeednet.com.br/speedshield/api/health` · `ssh 149 'ls -lh /var/lib/speedshield/speedshield.db*'` · log sem RESTART em rajada.

## 2026-07-12 — Changelog automático NOC (watch + CLI + memorando)

- **CLI:** `noc-changelog "título" "detalhes" [--host] [--cat] [--memo]`
- **Daemon:** `speedfibra-changelog-watch.service` (watchdog inotify em paths críticos)
- **Lib:** `/opt/speedfibra-monitor/changelog_auto.py` → SQLite Changelog Phoenix + `docs/AUTO-CHANGELOG.md`
- **Memorando:** `docs/MEMORANDO-AUTO-CHANGELOG.md` (+ cópia `/opt/phoenix-monitoring/docs/`)
- **Memos:** `docs/memos/*.md` com `--memo`
- **Log:** `/var/log/aspeednet/changelog-watch.log`
- Paths: speedfibra-tv, speedshield, phoenix, AI, n8n, aspeedolt, aspeednet-network, wireguard…
- Anti-spam: debounce 20s, min 60s/arquivo, dedup 5 min
- Grok/ops: ao final de cada entrega chamar `noc-changelog` com texto legível

## 2026-07-12 — Inventário Grok CLI (NOC docs + changelog): implantado vs pendente

### Documentação NOC
- **Markdown:** `/root/aspeednet-network/docs/GROK-CLI-IMPLANTACAO-2026-07.md`
- **Cópia Phoenix:** `/opt/phoenix-monitoring/docs/GROK-CLI-IMPLANTACAO-2026-07.md`
- **HTML NOC:** `/phoenix/docs/grok-cli` (static `docs-grok-cli-implantacao.html`)
- **docs-infra.html:** seção 10 + link no índice (atualizado 12/07)
- **Changelog SQLite NOC** (`speedfibra-monitor`): entradas resumo por área (rede, segurança, TV, apps…)

### Escopo do inventário (06→12/07/2026)
- Rede/SSH/DNS/BGP/QoS/SMTP · Phoenix/NOC/FTTH · SpeedShield · Speedtest
- Site Fibri/WhatsApp/n8n · AspeedOLT Control · AI Guardian/Sentinel
- TV portal HTTPS + fix .ts + UI + APK SpeedFibraTV + PWA

### Ainda falta (resumo Top 15)
1. SGP OLT IP 10.100.97.2 · 2. Política Central SGP vs WhatsApp · 3. EPG+token TV
4. Login TV×SGP · 5. QR/manual APK · 6. Fase 3 segurança · 7. AnaBlock API
8. ONU real AspeedOLT · 9. Backup VMs · 10. Play Store/TestFlight · 11. Filtro AS268217
12. Guardian auto+runbook · 13. Carga TV/PPPoE · 14. Termos de uso · 15. Limpeza inventário Phoenix

### Referências
- Plano base: `docs/PLANO-EXECUTAVEL.md`
- TV: https://tv.aspeednet.com.br · APK: `/static/apps/SpeedFibraTV.apk`


## 2026-07-12 — Sentinel completo: agressivo seletivo + PPPoE + Anatel + short + auto-list

- Prompts Sentinel full/short + Duo (PPPoE flood, Anatel/peering, postura agressiva seletiva)
- `sf_lib.speedshield_snapshot`: recent_attacks de `/api/attacks`
- Guardian: auto `speedshield-auto` TTL 4h (IPs fortes); policy p3 fase 2–4 auto
- MikroTik `.1`: filter drop src-list `speedshield-auto` (forward + input)
- Telegram: `/scurto`; daily 08:00 com Sentinel curto + Nilson curto
- Persona API: `sentinel_short`

## 2026-07-12 — Dual persona: Arq.Nilson + Speed Shield Sentinel

- Prompts em `/opt/speedfibra-ai/knowledge/prompts/` (arquiteto, sentinel, duo)
- `speedfibra_agent.py`: roteamento auto por keywords + `persona` no POST `/chat`
- Telegram: `/sentinel` `/arquiteto` `/duo`
- UI `:8777/ui` com seletor Auto / Nilson / Sentinel / Duo
- Sentinel usa formato obrigatório Diagnóstico → Mitigação+rollback → Verificação → Preditivo → Impacto

## 2026-07-12 — Telegram só crítico + fila PPPoE 4.5G→8G

- **Alertas Telegram** (`proactive_alerts.py`): modo `SF_ALERT_LEVEL=critical`
  - silencia: 1 ONU offline, recuperações, autofind, contador SpeedShield sem ativos, prom recover
  - mantém: salto offline ≥15, lote offline ≥5, RX crítico em lote ≥3, SS com atacantes ativos, prom down em massa/job crítico
- **Guardian**: `notifications.level=critical`, SS só com ativos, prom_down ≥3 targets
- **Fila PPPoE** (`45.65.132.118` queue tree): parent `qt-wan-*` **4500M → 8000M** (burst 9G), filhos escalados

## 2026-07-12 — OLT Cianet removida do inventário

- **OLT Cianet** (SGP id `100007`, IP `10.100.20.3`) **offline / retirada da rede**
- Removida da tabela FTTH em `INVENTORY.md` — não usar em diagnóstico nem monitorar
- Phoenix/NOC já não tinham host Cianet (só `olt-huawei` / `10.100.97.2`)
- OLT em operação: **somente Huawei MA5800** `10.100.97.2` (SGP `100012`)

## 2026-07-11 — AspeedOLT + VM gpon no ESXi2

- Criada VM **gpon** no ESXi2 (vmid 33, datastore `ssd01`, vlan102, 4 vCPU / 8GB / 80GB)
- IP **45.65.135.154/28** GW 45.65.135.145 — hostname gpon.aspeednet.com.br
- Código em `/root/aspeedolt` (Laravel API + Vue 3 + daemon C++ bridge)
- Scripts: `provision-gpon-esxi2.sh`, deploy Caddy/LE/firewall
- Preseed: `preseed/gpon.cfg`

# Changelog — Aspeednet Network

## 2026-07-11 — FTTH completo: ONU/ONT + clientes SGP + aba NOC

- **Inventário SGP:** `/admin/network/onu/list/` (1400 ONUs/ONTs Huawei) + infoall + óptico
- **Clientes SGP:** autocomplete + cache `ftth_customers_cache.json` (nome, CPF, contrato, login, status)
- **Cruzamento:** `ftth_crossref.json` + `ftth_onu_registry.json` — serial, PON, cliente, PPPoE, RX, estado
- **API:** `GET /noc/api/ftth/status?q=` (busca por cliente/login/serial/PON/IP)
- **NOC UI:** aba **FTTH / ONU** no dashboard — busca, filtros, paginação, link Grafana
- **Prometheus/Grafana:** métricas `ftth_*` + dashboard `phoenix-ftth`
- **Cron:** sync incremental 10 min + **full clientes** domingo 03:30 (`--full-customers`)
- **Cache clientes:** login + contrato + nome · matching PPPoE normalizado

## 2026-07-11 — OLT Huawei MA5800 no NOC (10.100.97.2)

- **IP confirmado:** `10.100.97.2` (vlan4000 gerência · MAC Huawei `88:66:39:DA:BE:C6`)
- **Phoenix:** seção `ftth` + ICMP blackbox `olt-huawei` (ping ~4 ms do hub)
- **Prometheus:** job `huawei-olt-snmp` + alertas `OLTDown` / `OLTSNMPDown`
- **SNMP:** MA5800-X17 coletando (`usz3Nt2glPhd`) — uptime, interfaces GPON/ETHERNET
- **Credenciais:** cofre `OLT_HUAWEI_*` (telnet 2333 + SNMP 161/2161)
- **SGP:** host ainda `45.65.132.6` (proxy NAT) — pendente ajuste manual para `10.100.97.2`

## 2026-07-11 — Security Watchdog: Telegram quando trava

- **Novo:** `notify-telegram.sh` — alerta operador via bot Phoenix (cooldown 30 min/chave)
- **Integrado:** `security-watchdog.sh` + `speedshield-hub-watch-loop.sh` avisam ao reiniciar
- **Teste:** mensagem de confirmação enviada ao grupo NOC

## 2026-07-11 — Security Watchdog: auto-restart serviços de proteção

- **Novo:** `security-watchdog.sh` — monitora e reinicia se parado/travado
- **Serviços:** anomaly-detector, NOC monitor, collector, fail2ban, SpeedShield (149), hub-watch
- **Detecção:** systemd inactive, log stale (anomaly 180s, collector 300s), API health fail, API lenta
- **Deploy:** `aspeednet-security-watchdog.service` (loop 90s) + cron backup */5
- **Hub-watch:** intervalo 120s; recover se health ou status falhar
- **Instalar:** `bash scripts/install-security-watchdog.sh`
- **Log:** `/var/log/aspeednet/security-watchdog.log`

## 2026-07-11 — SpeedShield: CGNAT FP corrigido + mitigação permanente

- **FP:** removidos `100.64.16.161`, `100.64.16.67`, `100.64.22.9`, `100.64.21.247` do `noc-threat` BGP
- **Causa:** `ignore_networks` no TOML não era lido pelo binário Rust
- **Correção:** engine usa `ignore_networks` + whitelist `100.64.0.0/12` e `45.65.132.0/22`; binário redeployado
- **MikroTik:** `noc-whitelist` já tinha CGNAT/132 — reforçado
- **Produção:** rollback trial **cancelado**; `mitigation.enabled = true` permanente (`phase: production`)
- **Scripts:** `fix-speedshield-cgnat-fp.sh`, `speedshield-enable-production.sh`

## 2026-07-10 — tst: speedtest.service corrigido (OoklaServer + systemd)

- **Problema:** `speedtest.service` em `failed` — Ookla rodava fora do systemd desde kill manual (09/07)
- **Correção:** unit com `PIDFile`, `ExecStart=restart`, `ExecStop` limpa processos órfãos
- **Template:** `templates/speedtest-ookla.service` · script `fix-speedtest-systemd-tst.sh`
- **fix-ookla-tst-validation.sh:** passa a usar `systemctl restart speedtest` (não `killall`)
- **Validado:** `active (running)` · MainPID = pidfile · 8080/5060 · latency.txt OK

## 2026-07-10 — SpeedShield: mitigação REST MikroTik corrigida (bloqueio real)

- **Problema:** detectava ataques mas `mitigated=false` (0/34); log `error sending request for url (https://45.65.132.1/rest/...)`
- **Causas:**
  1. `www`/`www-ssl` **desabilitados** no BGP; porta 443 = **SSTP** (não REST)
  2. senha `fnm-api` no `config.toml` **desatualizada** vs cofre
  3. cliente REST usava **POST** no path base → RouterOS 400 `no such command` (create = **PUT**)
- **Correções:**
  - BGP `45.65.132.1`: `www-ssl` **8443** + cert `sstp-sf-server`, allow só `149/180` + LAN mgmt; `www` 80 permanece off; **SSTP 443 intocado**
  - user `fnm-api` `allowed-address` restrito a 149/180/`10.100.99.0/24`
  - SpeedShield: `host=45.65.132.1:8443`, `api_tls=true`, senha alinhada ao cofre
  - código `src/mitigation/mikrotik.rs`: **PUT** address-list + fallback POST `/add`; DELETE por `.id`
  - binário redeployado em 149 (`/usr/local/bin/speedshield`)
- **Validado:** `MikrotikClient.mitigate` → `address-list OK em bgp` (TEST-NET 203.0.113.x, removidos após teste)
- **Status:** `monitor_only:false` · trial até ~11/07 15:08 -03
- **Backup:** `backups/speedshield/speedshield-bin-20260710-restfix` + config redacted

## 2026-07-10 — SpeedShield: trial mitigação 24h (reativado)

- **Decisão:** operador solicitou trial — `mitigation.enabled = true` por **24h**
- **Até:** ~11/07 15:09 -03 · rollback automático via cron na VM 149
- **API:** `monitor_only: false` · `{"ok":true}`
- **Pré-trial:** prune executado (disco 9%, DB ~318 MB)
- **Scripts:** `speedshield-enable-trial.sh` · `rollback-monitor.sh` (VM `/opt/speedshield/scripts/`)
- **Rollback manual:** `bash /root/aspeednet-network/scripts/speedshield-rollback-monitor.sh`

## 2026-07-10 — SpeedShield: recuperação + harden prune/watchdog (monitor-only)

- **Problema:** VM `45.65.135.149` disco **100%** — SQLite 11 GB + WAL 18 GB; serviço parado desde ~06:12; NOC proxy **503**
- **Ação:** remoção DB/WAL cheios; `mitigation.enabled = false` (monitor-only); restart
- **Harden (evita reincidência):**
  - `prune-db.sh` reforçado (flows 1h, WAL checkpoint, vacuum >400 MB, emergência disco ≥90%)
  - cron **prune horário** (`15 * * * *`) + **watchdog */5**
  - systemd `speedshield-watchdog.service` (loop 120s: health + disco + auto-recover)
  - `retention_days = 1`
  - hub: monitor em background `/var/log/aspeednet/speedshield-hub-watch.log` (a cada 3 min)
- **Scripts repo:** `scripts/speedshield-prune-db.sh`, `scripts/speedshield-watchdog.sh`
- **Validado:** `{"ok":true}` · `monitor_only:true` · disco ~7%
- **Mitigação DDoS:** desligada no SpeedShield; Anomaly Detector (brute/scan → `noc-threat`) ativo no hub 180

## 2026-07-10 — Central 100% no domínio aspeedfibra (sem redirecionar ao SGP)

- **Causa:** API devolvia `base_url`/`logo` em `speedfibratelecom.sgp.tsmx.app`
- **Correção:** `mod_substitute` reescreve JSON/HTML para `https://www.aspeedfibra.com.br`
- **Proxy extra:** `/{uuid}/public/` (logos)
- **Validado:** `base_url=https://www.aspeedfibra.com.br` e list/logo sem sgp.tsmx


## 2026-07-10 — Correção: 06444314666 não é WhatsApp

- **Revertido** WhatsApp para `(33) 3624-3246` / `553336243246`
- **06444314666** = método/dado de **login na Central**, não telefone


## 2026-07-10 — Central do Assinante embutida no site (same-origin)

- **Proxy Apache:** `/centralweb/`, `/api/centralapp/`, `/static/centralweb/`, `/public/` → SGP TSMX
- **URLs:** https://www.aspeedfibra.com.br/central.html (shell + iframe) · `/central` → login
- **Login** no domínio do site (sem abrir sgp.tsmx.app no navegador)
- **WhatsApp** atualizado para **(33) 3624-3246** / `553336243246` (06444314666)
- Menu/site: link **Central do Assinante** restaurado


## 2026-07-10 — Pacote completo WhatsApp Business (saudação + QR + loja)

- **Página:** https://www.aspeedfibra.com.br/whatsapp.html — QR, copiar textos, imprimir folha
- **Saudação / ausência / atalhos** documentados em `docs/whatsapp-business-speedfibra.md`
- **QR:** menu, 2ª via, suporte, assinar + folha loja em `/assets/img/whatsapp/` e `/assets/kit/whatsapp/`
- Home: mini-QR no bloco do menu WhatsApp + link “QR · textos · imprimir”


## 2026-07-10 — Menu WhatsApp: 2ª via · Suporte · Assinar

- Site: bloco `#whatsapp-menu` com 3 atalhos e mensagens prontas
- Intents JS: `segunda-via`, `suporte`, `assinar`, `menu` (lista 1/2/3)
- Nav, Fibri, footer e canais apontam para o menu WhatsApp
- Número: `553336243246`


## 2026-07-10 — Site sem SGP/IXC: atendimento via WhatsApp

- **Motivo:** provedor não usa mais IXC nem SGP/TSMX
- **Removido do site:** links Central do Assinante, app MeuAppProvedor (Android/iOS), portal sgp.tsmx
- **Substituído por:** WhatsApp suporte, telefone, consulta de cobertura (Fibri), speedtest
- **Inventário:** IXC marcado descontinuado; nota de gestão atualizada
- Backup: `index.html.bak-no-sgp-*` em aspeedfibra


## 2026-07-10 — n8n Speed Fibra em produção (HTTPS + workflows)

- **URL:** https://n8n.aspeednet.com.br (Caddy TLS + reverse proxy)
- **Host:** 45.65.135.148 · stack `/opt/speedfibra-n8n` (`docker-compose` + host network)
- **DNS:** `n8n A 45.65.135.148` na zona aspeednet.com.br (serial +1)
- **Workflows ativos:** Lead Fibri (`/webhook/fibri-lead`), Health Check 15min, Resumo diário 08:00 + 2 chats AI legados
- **Site→n8n:** `/api/lead.php` com `n8n_enabled=true` → webhook HTTPS (validado `n8n: true`)
- **Docs:** `docs/n8n-speedfibra.md` · script `scripts/n8n-manage.sh`
- **Dados:** `/root/.n8n` (encryption key preservada)


## 2026-07-10 — Fibri Reels + leads (Telegram/API) + n8n pronto

- **Reels (4× ~6s 720p):** `/assets/kit/reels/fibri-reel-{wave,tech,gamer,coverage}.mp4` na página `#/fibri`
- **API leads:** `POST /api/lead.php` — grava em `/var/lib/aspeedfibra/leads.jsonl`, rate-limit, Telegram OK
- **Form cobertura:** salva lead + notifica Telegram + abre WhatsApp (fallback se API falhar)
- **Admin list:** `GET /api/lead.php?token=…` · script `list-fibri-leads.sh` · token em credentials `FIBRI_LEAD_ADMIN_TOKEN`
- **Config:** `/etc/aspeedfibra/leads-config.php` (640 root:www-data)
- **n8n:** workflow importável `templates/n8n-fibri-lead-workflow.json` + `/assets/kit/…` — `n8n_enabled=false` até ativar webhook `fibri-lead`
- Kit ZIP atualizado com reels + workflow


## 2026-07-10 — BGP AS268217: anuncia /22 + 4×/24 (apps/TV, sem internet)

- **Peer** `172.16.32.1` AS268217: passa a receber **somente** prefixos Speed Fibra para apps/TV
- **Saída:** `45.65.132.0/22` + `132/24` `133/24` `134/24` `135/24` + P2P `172.16.32.0/30`
- **Não anuncia:** default `0.0.0.0/0` (ele não usa “nossa internet”)
- **Entrada:** reject total (full table dele filtrada, 0 rotas instaladas)
- **Script/RSC:** `apply-bgp-as268217-private.rsc` · apply one-shot `bgp-as268217-announce-apps.rsc`
- **Verificado:** advertisements 6 prefixos no peer `AS268217-PRIVATE-IPV4-1`

## 2026-07-10 — BGP AS268217: sessão ESTABLISHED (fix prefix-limit)

- **Host:** CCR2116 `45.65.132.1` · peer `172.16.32.1` (AS268217) · local `172.16.32.2`
- **Problema:** `input.limit-process-routes-ipv4=0` derrubava a sessão (Maximum Prefixes); flag `limit-exceeded` ficava travada
- **Correção:** limite `1200000` + filtro `AS268217-IN` reject all; clear manual: `/routing bgp session clear [find remote.address=172.16.32.1] flag=limit-exceeded`
- **Status:** **ESTABLISHED** · rotas instaladas do peer = **0** (filtro OK)
- **Atenção:** peer envia **full table** (~1,07M prefixos) — política pedida era não anunciar nada; solicitar filtro de saída no AS268217
- **Script:** `apply-bgp-as268217-private.rsc` atualizado (limit 1200000)

## 2026-07-10 — Fibri completo: poses, kit marketing e formulário de cobertura

- **Poses oficiais:** wave, tech, gamer, coverage (+ default) em `/assets/img/fibri/`
- **Página `#/fibri`:** biografia do mascote, galeria de poses, kit Instagram
- **Formulário cobertura** na página Cobertura com Fibri → envia WhatsApp estruturado
- **Widget flutuante:** troca de poses + chips Cobertura / Assinar / Conhecer
- **Kit marketing:** `/assets/kit/fibri-kit-marketing.zip` + stories 1080×1920 + stickers + avatar circular
- Cache-bust: `style.css?v=10` · `app.js?v=10`
- Backup local: `/root/aspeednet-network/backups/fibri-kit/`


## 2026-07-10 — Mascote Fibri + microanimações no hero

- **Mascote digital "Fibri"** no site (canto inferior esquerdo): balão de dicas, atalhos Assinar/Testar/Planos, clique para recolher
- **Assets:** `/var/www/html/assets/img/fibri-mascot.webp` (+ PNG)
- **Hero:** orbs de luz, streaks de velocidade, entrada em cascata do texto, brilho no gradiente, float da mídia
- **Acessibilidade:** `prefers-reduced-motion` desliga animações
- Cache-bust: `style.css?v=9` · `app.js?v=9`


## 2026-07-10 — Site www.aspeedfibra.com.br: redesign social + dock + status

- **Host:** aspeedfibra `45.65.135.181` · DocumentRoot `/var/www/html`
- **Ícones sociais coloridos** (Instagram, Facebook, WhatsApp) no topbar, menu mobile e rodapé
- **Dock flutuante** (desktop) com IG / FB / WhatsApp / Teste de velocidade
- **Cards de redes** nas seções sociais (gradientes da marca)
- **Badge Rede Online** → https://noc.aspeednet.com.br/phoenix/status
- **WhatsApp float** com pulse + tooltip "Fale conosco"
- Backup: `index.html.bak-social-*` e `style.css.bak-social-*`
- CSS cache-bust: `style.css?v=8`

## 2026-07-09 — LibreSpeed Speed Fibra no tst + link no site

- **tst** `45.65.135.185`: LibreSpeed em `https://tst.aspeednet.com.br/velocidade/` — PHP-FPM, tema Speed Fibra (gauges, cores #003399/#00AEEF)
- **Site** `www.aspeedfibra.com.br`: menu, hero e rodapé com link “Teste de Velocidade”
- **Templates:** `templates/librespeed-speedfibra/` · `install-librespeed-tst.sh`
- **Ookla:** porta 8080 inalterada (OoklaServer direto); nginx só `/velocidade/` + proxy raiz

## 2026-07-09 — Ookla tst: revert nginx 8080 + fix IPv6 gateway typo

- **Host:** `45.65.135.185` (tst.aspeednet.com.br)
- **Causa:** nginx na 8080 quebrou netgauge/https Ookla (`wrong version number`); typo `gatway` em `/etc/network/interfaces` impediu rota IPv6 default → timeout `ipv6_netgauge`/websocket
- **Correção:** OoklaServer volta a escutar **8080/5060** direto (SSL Let's Encrypt); nginx **apenas 80/443**; `gateway 2804:3d68:5::1` em ens224
- **Script:** `fix-ookla-tst-validation.sh` · template `tst-nginx-ookla.conf`

## 2026-07-09 — QoS P0 speedtest + link dedicado + TCP tuning

- **PPPoE** `45.65.132.118`: `sf-qos-speedtest-dedicado.rsc` — listas `SF-SPEEDTEST` (185/156) e `SF-LINK-DEDICADO` com filas `qt-p0` (4,5 G); mangle P0 para testadores online (TCP/UDP 8080, 8081, 9443, 5200/5201); catch-all P5 exclui dedicado/speedtest
- **BGP** `45.65.132.1`: `sf-qos-speedtest-bgp-edge.rsc` — prioridade edge para tráfego internet ↔ tst/nperf (`qt-edge-speedtest-in/out` 10 G)
- **TCP:** `99-speedtest.conf` em `45.65.135.185` (tst) e `45.65.135.156` (nperf) — buffers 16 MB
- **Scripts:** `apply-qos-speedtest-dedicado.sh` · `tune-speedtest-tcp.sh`

## 2026-07-09 — PC mesa removido do monitoramento NOC

- **Host:** `45.65.132.102` (pc-ccha) — retirado de `aspeednet-hosts.yml` e Prometheus ICMP (23 alvos)
- **Motivo:** equipamento pessoal/Windows — não precisa ping no NOC; acesso via RustDesk
- **Whitelist MikroTik MGMT:** mantida (firewall operador)

## 2026-07-09 — Fase 3 adiada para outubro/2026

- **Motivo:** operador fora do país — 3.1 (2FA) e 3.2 (SSH só VPN) exigem presença/equipe local
- **Lembrete:** `01/10/2026 09:00` — cron `/etc/cron.d/aspeednet-fase3-reminder` + Telegram
- **Script:** `bash /root/aspeednet-network/scripts/remind-fase3-october.sh`

## 2026-07-09 — Fase 2 Segurança: SSH key-only + hardening em massa

- **2.1 SSH só chave:** 13 hosts com `99-aspeednet.conf` — `PasswordAuthentication no` validado (cc, tst, nperf, n8n, ns1–ns4, ns6, ixc, teste, speedshield, pve)
- **2.2 Cofre:** `sync-noc-credentials.sh` · credentials `chmod 600`
- **2.5 Hardening:** `fail2ban` + `cron.allow` + blocos IOC em **11 hosts** (`apply-fase2-remote-harden.sh`); cron domingo 04:00 ativo
- **2.6 Runbook:** 5 cenários em `/phoenix/documentacao` (auth NOC)
- **SSH config:** aliases `ns3`/`ns4` adicionados em `~/.ssh/config`
- **Verificação:** `bash /root/aspeednet-network/scripts/verify-fase2.sh`
- **Pendente 2.3:** PC mesa `45.65.132.102` offline (Windows — script local)
- **Pendente 2.4:** ESXi restricao SSH LAN — requer vSphere/console

## 2026-07-09 — Fase 1 NOC: Telegram, health 100%, status público

- **Telegram:** chat_id `8638814800` capturado via `get-telegram-chat-id.sh`; Alertmanager reiniciado; mensagem de teste OK
- **Health score:** **100%** — `ping_only` (PC mesa offline) excluído do cálculo em `phoenix-api/main.py`
- **Status público:** https://noc.aspeednet.com.br/phoenix/status (HTTP 200) + monitor blackbox
- **Validado:** SpeedShield `/api/health` OK · nPerf HTTPS OK · DNS query 0 ms · QoS ativo no PPPoE (PCQ por cliente)
- **Ookla:** `bash /root/aspeednet-network/scripts/ookla-submit-bundle.sh` — bundle pronto para cadastro Ookla

## 2026-07-09 — BGP privado AS268217 (VLAN2520 Nanuque)

- **Host:** CCR2116 `45.65.132.1` · ASN **266529** ↔ peer **268217**
- **Link:** VLAN **2520** em `sfp-sfpplus4` (CONECT Nanuque)
- **P2P:** `172.16.32.0/30` — Speed Fibra **172.16.32.2** · peer **172.16.32.1**
- **Anúncio:** somente `172.16.32.0/30` (`bgp-networks-AS268217` + filtro `AS268217-OUT`)
- **Entrada:** `reject` total (`AS268217-IN`) — sem default, sem full table
- **Firewall:** `172.16.32.1` em `bgp-peers` (TCP/179)
- **Script:** `bash /root/aspeednet-network/scripts/apply-bgp-as268217-private.sh`
- **Dados peer:** `/root/aspeednet-network/docs/bgp-as268217-peer-sheet.md`
- **Status:** aguardando ponta AS268217 + VLAN2520 na CONECT

## 2026-07-09 — Phoenix SpeedShield: página lenta corrigida

- **Causa:** `/api/top` e dashboard faziam scan em **2,2M rows** SQLite (~22s)
- **Correção:** top talkers em **memória** (Rust); DB trim 67 MB; refresh HTMX 15s
- **Phoenix:** aba Segurança não chama mais `/api/top`; iframe carrega mais leve
- **Latência:** `/api/top` ~0,2s · `/api/dashboard/fragment` ~0,17s

## 2026-07-09 — SpeedShield: produção antecipada (trial 24h)

- **Decisão:** calibração antecipada — mitigação ativa por **24h** (até ~10/07 14:29 UTC)
- **Config:** `mitigation.enabled = true` · `monitor_only: false` na API
- **Proteções:** `ignore_networks` (100.64.0.0/18, 45.65.132.0/22) + whitelist ampliada
- **BGP:** 11 sessões `ESTABLISHED` após ativação
- **Rollback:** `bash /root/aspeednet-network/scripts/speedshield-rollback-monitor.sh`
- **Backup config:** `/etc/speedshield/config.toml.bak-20260709-preprod` (VM 149)

## 2026-07-09 — SpeedShield VM: upgrade 4 vCPU + 8 GB RAM (ESXi2)

- **VM:** `speedshield` VMID 29 · ESXi2 `10.100.99.3` · datastore `ssd02`
- **Antes:** 2 vCPU · 4096 MB RAM
- **Depois:** **4 vCPU** · **8192 MB RAM** · `cpuid.coresPerSocket=4`
- **Dedicado:** reserva RAM 8 GB (`sched.mem.min`) · afinidade CPU p0–p3 (`sched.cpu.affinity`)
- **Validação:** `nproc=4` · `Mem 7.8Gi` · `speedshield` active · `{"ok":true}`
- **Backup vmx:** `speedshield.vmx.bak-20260709`

## 2026-07-09 — noc-threat: limpeza 2567 bloqueios port_scan falso

- **Host:** `45.65.132.1` (CCR2116)
- **Removidos:** 2567 IPs com comment `NOC-port_scan-p443` (SSTP ruído)
- **Mantidos:** 3 `NOC-brute_force-p22` (SSH real)
- **Script:** `bash /root/aspeednet-network/scripts/purge-noc-threat-portscan.sh`

## 2026-07-09 — NOC Anomaly: silenciar port_scan BGP (179) e SSTP (443)

- **Problema:** Telegram inundado com "Port scan → bgp" — na verdade scans na **443** (SSTP aberto) e ruído na **179**
- **Correção:** `anomaly/suppress.py` — ignora port_scan porta 179; no core BGP ignora só 80/443
- **Telegram:** mensagem agora mostra as portas escaneadas (ex. `portas 443`)
- **Firewall BGP:** porta 179 continua drop silencioso (`log=no`) só para peers

## 2026-07-09 — NOC Anomaly: sem port_scan em 100.64.0.0/18

- **Problema:** CGNAT (`100.64.0.0/18`) gerava milhares de alertas `port_scan` no NOC (whitelist interna)
- **Correção:** `IGNORE_NETWORKS` reforçado em coleta, agregação, persistência e API
- **Limpeza:** ~35k `anomaly_events` + ~400k `firewall_events` removidos; `VACUUM` no SQLite
- **Script:** `bash /root/aspeednet-network/scripts/purge-anomaly-ignored-networks.sh`

## 2026-07-09 — BGP CCR2116: porta 179 só peers cadastrados

- **Host:** `45.65.132.1` (CCR2116)
- **Problema:** scans na porta 179 geravam logs desnecessários; regra antiga liberava `45.65.132.0/22` inteiro
- **Correção:** address-list `bgp-peers` (8 IPv4 + 7 IPv6) + firewall `accept peers → drop scan (log=no)`
- **Peers:** CONECT TTO/NANUQUE, FULL-ROUTER, iBGP CCHA/PPPOE/RUIR, ER-TELECOM, SMART (inativos mantidos na lista)
- **Script:** `bash /root/aspeednet-network/scripts/apply-bgp-179-peers-only.sh`
- **Validação:** 11 sessões BGP `ESTABLISHED` após aplicação

## 2026-07-09 — Detecção: excluir 100.64.0.0/18 e 45.65.132.0/22

- **SpeedShield (149):** removidos de `networks_monitored`; `ignore_networks` em `[detection]`
- **Anomaly detector (180):** `IGNORE_NETWORKS` — sem alerta, log ou webhook para esses blocos
- **Motivo:** tráfego interno/CGNAT gerava alertas desnecessários nos dois sistemas

## 2026-07-09 — SpeedShield 149: API restaurada (SQLite 13 GB)

- **Sintoma:** `/api/health` timeout (NOC proxy e direto); iowait ~45% na VM
- **Causa:** `speedshield.db` com **13 GB** — tabela `flow_samples` sem prune efetivo (~1 dia de dados)
- **Correção:** serviço reiniciado com DB novo; backup 13 GB `speedshield.db.bak-20260709` removido (disco 7% uso, 29 GB livres)
- **Preventivo:** cron diário `/opt/speedshield/scripts/prune-db.sh` (flows 24h, attacks 3 dias, vacuum se > 512 MB)
- **Retenção reduzida:** `retention_days = 3` em `config.toml` (operador: 15 dias era excessivo)
- **Status:** `{"ok":true}` em `:8080` e `https://noc.aspeednet.com.br/speedshield/api/health`

## 2026-07-09 — Telegram webhook corrigido (401 Apache)

- **Causa:** `LocationMatch` do NOC exigia Basic Auth em `/phoenix/telegram-webhook` — Telegram recebia **401** e descartava mensagens
- **Correção:** `telegram-webhook` adicionado às rotas públicas em `/etc/apache2/conf-available/noc-auth.conf`
- **Ação:** reenviar `/start` para `@speedfibra_alert_bot` → `finish-telegram-from-capture.sh`
- **Resolvido:** `TELEGRAM_CHAT_ID=8638814800` (`@nbessonicosta`) — Alertmanager ativo, teste enviado OK

## 2026-07-09 — SSH PC mesa (45.65.132.102 / Tailscale 100.115.219.40)

- **PC identificado:** `DESKTOP-Q35J5UD` (Windows) — RustDesk **372777013**; **sem Tailscale** (só notebook); WAN `45.65.132.102` — SSH pendente script local
- **Script instalador:** `/root/aspeednet-network/scripts/enable-ssh-pc-mesa.ps1` · URL https://noc.aspeednet.com.br/scripts/enable-ssh-pc-mesa.ps1
- **Atalho:** `RUN-enable-ssh-pc-mesa.cmd` — enviado via **Taildrop** ao PC; falta executar como Admin no Windows
- **Deploy hub:** `bash /root/aspeednet-network/scripts/deploy-ssh-pc-mesa.sh` (aguarda SSH e valida chave)

## 2026-07-09 — Port knock SSH (toc-toc) hub 180

- **knockd** ativo: UDP `41723 → 52834 → 63945` (20s) libera SSH do IP por **3 min**
- Script cliente: `/root/aspeednet-network/scripts/knock-ssh.sh`
- Internet sem knock continua bloqueada na WAN

## 2026-07-09 — SSH restrito operador + fail2ban escalonado (hub 180)

- **Allowlist SSH:** celular VPN `10.8.0.2`, notebook VPN `10.8.0.5` + redes internas; WAN (`ens192`) bloqueada
- **fail2ban:** 3 tentativas → ban 24h → 7d → 30d (reincidência)
- **Senha SSH:** `nbessonicosta` e `root` com `thmpv-77d6f@Ju231020ni` (só neste host)
- Script: `/root/aspeednet-network/scripts/apply-ssh-allowlist.sh` · lista: `/etc/aspeednet/ssh-allowlist.conf`

## 2026-07-09 — NOC site corrigido + itens plano executável

- **Site NOC:** `speedfibra-monitor` reiniciado (credenciais em memória desatualizadas → `/noc/api/*` retornava 401); script `sync-noc-credentials.sh` criado
- **MikroTik CChá offline no dashboard:** exporter Docker sem chaves SSH — montado `/root/.ssh:ro`; 4/4 online; health **100%**
- **Página status cliente (1.7):** https://noc.aspeednet.com.br/phoenix/status (pública, sem login)
- **ESXi 2.4:** SSH restrito a `10.100.99.0/24` + `45.65.135.180/32` (esxi1 + esxi2)
- **pve:** repos enterprise desabilitados; `pve-no-subscription` + `unattended-upgrades` OK
- **QoS 1.4:** schedulers `sf-qos-classify` / `sf-qos-monitor` ativos no PPPoE (2728+ runs)
- **45.65.132.102:** PC mesa operador em Carlos Chagas (não é MikroTik) — já na whitelist MGMT dos roteadores
- **Telegram 1.1:** webhook ativo; falta operador enviar `/start` a `@speedfibra_alert_bot` → `finish-telegram-from-capture.sh`

## 2026-07-08 — DNS ns3/ns4 hardening completo + backdoor removido

- **SSH restaurado** ns3/ns4 via injeção de chave (virt-customize ns3; disco ns4 montado em ns3)
- **Backdoor cron** `38.146.28.54:454` removido em **ns3** (e verificado limpo em ns4)
- **BIND padrão Speed Fibra:** rate-limit, RPZ AnaBlock, `allow-transfer none`, version `SpeedFibra DNS`
- **fail2ban** ativo em ns3 + ns4; **cron.allow** só root; **iptables IOC** bloqueado
- Script: `/opt/speedfibra-monitor/scripts/harden-dns-slave.sh`
- `harden-server-security.sh` agora **remove** cron malicioso automaticamente

## 2026-07-08 — DNS ns3/ns4 escravos restaurados (ESXi1)

- **VMs ns3 (146) e ns4 (147)** ligadas no **ESXi1** `10.100.99.2` (datastore `seagate 1tb`) — discos não estão no ESXi2 `.3`
- Zona `aspeednet.com.br` replicando do master **ns1 (150)** — SOA serial `2026070702` nos 4 NS
- **ns1:** VM re-registrada no ESXi1 (vmid 55) após `connectionState=invalid` — master restaurado
- **MikroTik BGP:** regras `NOC-dns-axfr-*` — zone transfer TCP/53 só de 150 → 146/147/151
- **Phoenix:** ns3/ns4 movidos de `offline` → `servers` em `aspeednet-hosts.yml`
- **Pendente:** SSH ns3/ns4 (senha/chave antiga) — aplicar template `deploy-dns-standard.py` + `harden-server-security.sh` via console ou reset de senha

## 2026-07-08 — Plano executável fase por fase (cliente + segurança 9/10)

- Documento: `/root/aspeednet-network/docs/PLANO-EXECUTAVEL.md`
- 3 fases: (1) experiência cliente + NOC, (2) hardening 8,5/10, (3) SLA + DR + 9–10/10
- Baseline health NOC: 66% (20/25) — Telegram ainda vazio; SpeedShield monitor-only até 22/07

## 2026-07-08 — Backup MikroTik madruga: corrigido + incidente segurança

- **Backup 08/07 madruga:** cron `03:00` em `/etc/cron.d/speedfibra-mikrotik-backup` **não executou** (arquivo sem newline final — cron ignorava a linha)
- **Correção:** newline + `cron reload`; backup manual **08/07 09:13** — 4 roteadores OK em `/opt/phoenix-monitoring/backups/mikrotik/20260708/`
- **⚠️ Segurança (auditoria rede 08/07/2026):** invasão via senha vazada `nbessonicosta` — atacante `196.156.121.252` (Egito). Backdoor cron → `38.146.28.54` em **3 servidores:** `180:451`, `185:456`, `156:449` — **todos removidos**; `cron.allow` só root; senha padrão trocada; MikroTik BGP OK

## 2026-07-08 — SpeedShield: calibração monitor-only iniciada

- **Fase:** semana 1 — apenas monitorar (mitigation.enabled=false até **2026-07-22**)
- **Detecção ajustada:** window 10s, zscore 6.0, piso z-score 80 Mbps / 25k pps, baseline 120 amostras
- **Fix código:** alertas estatísticos exigem volume mínimo (`min_mbps_zscore` / `min_pps_zscore`) — elimina FP em 1–2 Mbps
- **Reset:** histórico de ataques/baselines pré-parser limpo (24k registros FP)
- **MikroTik:** usuário `fnm-api` criado no BGP (API mitigação futura); senha em `/root/.config/aspeednet/credentials`
- **Relatório diário:** `/opt/speedshield/scripts/calibration-report.sh` + cron 06:05 UTC → `/var/lib/speedshield/calibration/`

## 2026-07-08 — SpeedShield VM 149: disco expandido + retenção 15 dias

- **VM:** `speedshield` no ESXi2 (VMID 29), IP `45.65.135.149`, datastore `ssd02` (~703 GB livres)
- **Disco:** `speedshield-thin.vmdk` expandido de **3,5 GB → 32 GB** (partição `/` agora ~30 GB, ~28 GB livres)
- **Retenção:** `retention_days = 15` em `/etc/speedshield/config.toml`; journald `MaxRetentionSec=15day`
- **Boot:** `bootOrder` corrigido para `disk` (removido cdrom primeiro)
- **Recomendação:** 32 GB é suficiente para 15 dias de flow_samples SQLite; se tráfego crescer muito, pode ir até 64 GB sem problema no ssd02

## 2026-07-08 — NetFlow v9: parser corrigido (SpeedShield + Anomaly Detector)

- **Causa raiz:** MikroTik exporta NetFlow **v9** (template 256, records 94 bytes); parsers antigos assumiam v5/heurística de 48 bytes → IPs inválidos e falsos positivos DDoS no SpeedShield; Anomaly Detector ignorava todos os pacotes (`flow_samples` vazio).
- **SpeedShield** (`45.65.135.149`): parser RFC 3954 com cache de templates em `parser.rs`; binary redeployado; `speedshield_flows_received_total` > 198k; **0 alertas falsos** após restart.
- **Anomaly Detector** (`45.65.135.180`): novo módulo `anomaly/netflow_v9.py`; `flow_listener.py` atualizado; **1080+ amostras/10min** com IPs válidos (ex. `100.64.22.91`, `45.65.135.158`).
- **VM 149:** disco estava 100% cheio — liberados ~233 MB (`apt clean`, journal vacuum).
- **MikroTik BGP** (`45.65.132.1`): targets NetFlow mantidos — `149:2055`, `149:63055`, `180:63055` com `src-address=45.65.135.145`.

## 2026-07-07 — Guia FastNetMon NOC (Speed Fibra)

- Documento completo: `/root/aspeednet-network/docs/fastnetmon-guia-speed-fibra.md`
- Cópia no hub: `/opt/phoenix-monitoring/docs/fastnetmon-guia-speed-fibra.md`
- Recomendação: abordagem híbrida FNM (DDoS/NetFlow) + Anomaly Detector (firewall/port scan)
- Staging sugerido: VM 105 `10.100.99.5` · Produção: `45.65.135.149`

## 2026-07-07 — Segurança NOC: whitelist, regras MikroTik, updates (sem VMware)

- **Whitelist** ampliada: `10.100.99.0/24` (Proxmox/LAN hypervisor) + redes operacionais já existentes
- **MikroTik** (bgp, ccha, pppoe, ruir): regras `NOC-wl-accept-*` antes de `NOC-threat-drop-*` em raw/filter
- Script `/opt/speedfibra-monitor/scripts/noc-security-sync.sh` — sync whitelist + apt upgrade (exclui ESXi)
- API `POST /noc/api/anomaly/sync-whitelist` para re-sync manual
- **apt upgrade** aplicado: nextcloud, tst, pve, aspeedfibra, nperf, n8n, ns6; DNS já estava em dia
- **VMware ESXi** (`10.100.99.2`, `10.100.99.3`) **não atualizado** (pedido do operador)
- `unattended-upgrades` instalado no hub nextcloud

## 2026-07-07 — Proxmox VE 10.100.99.4

- Adicionado **Proxmox VE 9.1.1** (`pve.aspeednet.com.br`) na LAN `10.100.99.0/24`
- SSH + chave ed25519 → `ssh pve` / `ssh proxmox`
- Web UI: https://10.100.99.4:8006
- VMs: 100 ns3, 101 ns2 (off), **102 ns2 (running)**, 103 ns1 (off)
- Storages ESXi `vmware1`/`vmware2` detectados (integração com esxi1/esxi2)

## 2026-07-07 — VMware ESXi 10.100.99.2 e 10.100.99.3

- Adicionados hypervisors ESXi na LAN `10.100.99.0/24`
- **10.100.99.2** ESXi 7.0 (ZTSYSTEM BANFF12) — SSH habilitado, chave **RSA** deployada → `ssh esxi1`
- **10.100.99.3** ESXi 6.0 U3 (Dell R710) — SSH habilitado, chave **ed25519** → `ssh esxi2`
- Credenciais em `/root/.config/aspeednet/credentials` (`ESXI1_PASS`, `ESXI2_PASS`)
- Inventário atualizado com VMs em execução em cada host

## 2026-07-07 — DNS upgrade, RPZ, scan /28 e reboots

### Hub nextcloud (180) — pós-reboot
- Debian 13.5, kernel **6.12.95** confirmado após reboot
- Serviços restaurados: `docker`, `apache2`, `wg-quick@wg-sp-cc` (handshake SP ativo)
- `python3-pexpect` reinstalado (necessário para deploy DNS com `su`)

### DNS ns1/ns2 (150/151) — upgrade completo
- Debian 9 + BIND 9.10 → **Debian 13.5** + **BIND 9.20.23**, kernel **6.12.95**
- Reboots individuais: ns2 (151) → ns1 (150) — ambos `named` ativo pós-reboot
- Deploy padronizado: `deploy-dns-standard.py all` (ssh -tt + su)

### RPZ AnaBlock — correção BIND 9.20
- Zona RPZ com `$ORIGIN .` era ignorada (`ignoring out-of-zone data`)
- Formato corrigido: nomes relativos (`blaze.com CNAME .`) sem `$ORIGIN .`
- Bloqueio validado: `blaze.com`, `betano.com` → **NXDOMAIN** em ns1 e ns2

### Scan faixas 45.65.135.144/28 e 176/28 (exc. 145, 177)
- **SSH ativo:** 148 n8n, 150 ns1, 151 ns2, 152 dns5, 156 nperf, **158 ns6**, 180 cc, 181 aspeedfibra, 185 tst
- **Ping only:** 153, 179 (porta 22 fechada)
- **161:** porta 22 aberta, sem chave SSH (host desconhecido)
- **158 ns6:** Ubuntu 24.04, Unbound recursivo ativo — adicionado `ssh ns6` e inventário

### nPerf (156) — upgrade Ubuntu 22→24
- Upgrade via `upgrade-ubuntu-release.sh` (sudo) — **24.04.4 LTS** confirmado durante apt
- `nperf-server` permaneceu active durante o processo
- **Alerta:** após fase final do apt, host responde ping mas **SSH e portas 80/8080/8443 fechadas** — provável reboot pendente ou sshd/offline; requer verificação console

### Hosts investigados (scan /28)
- **153:** ping OK, Apache em :8080, SSH fechado
- **179 (plus):** ping OK, nginx em :80/:443, SSH fechado
- **161:** SSH aberto mas sem chave (password only)

### Reboots opcionais (kernel novo, 1 por vez) — 2026-07-07 tarde
- **n8n (148):** reboot OK → kernel **6.8.0-134**, docker active
- **dns5 (152):** reboot OK → kernel **6.8.0-134**, unbound active
- **ns6 (158):** reboot OK → kernel **6.8.0-134**, unbound active
- **aspeedfibra (181):** reboot OK → kernel **6.8.0-134**, apache2 active
- `reboot-server.py` corrigido: fallback `sudo` quando `su` falha (hosts Ubuntu)

### nPerf (156) — recuperado automaticamente
- Monitor detectou SSH UP na iter=11 (~12:14:42)
- **Ubuntu 24.04.4 LTS**, kernel **6.8.0-134-generic**
- `ssh` + `nperf-server` active; portas 22/80/8080/8443 abertas
- Upgrade 22→24 concluído com sucesso (reboot automático)

### Pendências
- AnaBlock API: HTTP 403 (cadastro IP/CNPJ pendente)
- ns3/ns4 (146/147): inacessíveis

## 2026-07-07 — Detector de anomalias NOC (nextcloud)

- Novo serviço `speedfibra-anomaly-detector` em `/opt/speedfibra-monitor/anomaly/`
- Analisa baseline de tráfego (3σ), logs firewall e conexões MikroTik via SSH
- Listener NetFlow v5/v9 nas portas 63054/63055 (hub 180)
- Target NetFlow adicionado no BGP: `45.65.135.180:63055`
- Gera scripts RouterOS (address-list `noc-threat` + raw + filter input/forward)
- Webhook → Phoenix API `http://127.0.0.1:8780/api/anomaly/webhook`
- API: `/noc/api/anomaly/status|events|blocks|scan`
- Aba **Segurança** no Phoenix (`#/security`)
- `ANOMALY_AUTO_BLOCK=true` — bloqueio automático em BGP/PPPoE
- Whitelist Aspeednet (`noc-whitelist`) — IPs internos só alertam, nunca bloqueiam
- Aba **Changelog** no Phoenix (`#/changelog`) — histórico centralizado de mudanças

## 2026-07-06

### Phoenix — limpeza servidores offline
- Testados todos os hosts (ping/ssh/http); removidos: ns3/146, ns4/147, veloc/182, unms/184, pppoe-246
- `aspeednet-hosts.yml` + Prometheus blackbox: 14 alvos online
- Uptime Kuma: 5 monitores desativados (offline)
- API Phoenix: **14/14 online**

### nPerf servidor 156 — instalação
- `nperf-server` **2.2.11** via repositório oficial `repository.nperf.com`
- Serviço `nperf-server` enabled + active (portas 8080/8443, redirect 80/443)
- ALIVE-REPORT OK (registrado em ws.nperf.com)
- HTTP/HTTPS 200 em `nperf.aspeednet.com.br` e `45.65.135.156`

### PPPoE 246 — correção OSPF e roteamento (alex.2)
- **CCR2116** (`45.65.132.118`): regra OSPF `aceita PPPoE /32 faixa 192/26` antes do reject de /32 públicos
- **alex.2**: `disabled=no`, `remote-address=45.65.135.246`
- **GW 177 e 145**: rota estática `45.65.135.192/26 → 45.65.132.118` distance 1 (contorna blackhole /24)
- Resultado: OSPF propaga `/32` do cliente; navegação com retorno (torch TX) confirmada no `<pppoe-alex.2>`

### PPPoE CCR2116 — classificação IPs (corrigido)
- **146 = DNS ns3** (servidor BIND, não PPPoE)
- **PPPoE fixos monitorados:** 245 (nexus), 246 (alex.2), 252 (ativa) — faixa dedicada **`45.65.135.192/26`**
- Phoenix: 146 movido para `servers` (ns3); removido de `pppoe_clients`

### wg-sp-cc (Carlos Chagas ↔ SP)
- Túnel site-to-site configurado: CC=10.250.1.1/30, SP=10.250.1.2
- Corrigido conflito mesma faixa IP (AllowedIPs /32 e /30)
- Handshake ativo, ping bidirecional OK
- Forward wg-sp-cc ↔ wg0, NAT para internet local
- Skill e inventário persistente criados

### Speedtest (45.65.135.185)
- Removido OoklaServer antigo + certbot antigo
- Debian 11 → 12 → 13 (trixie), kernel 6.12
- OoklaServer reinstalado com HTTPS Let's Encrypt
- nginx 443 + Ookla 8080 SSL
- CLI: speedtest, iperf3, librespeed-cli
- Domínio: tst.aspeednet.com.br (DNS já existia)

### DNS (45.65.135.150)
- Confirmado: tst → 185, veloz PTR → 180
- Zona: /etc/bind/master/aspeednet.com.br.hosts

### Inventário
- Criado /root/aspeednet-network/
- Criado skill Grok aspeednet-network

### Acesso SSH sem senha
- Chave ed25519 gerada e deployada (185 root, 150/185 nbessonicosta)
- ~/.ssh/config com aliases cc, tst, dns-user
- Script aexec + credentials em /root/.config/aspeednet/

### Varredura SSH bloco 45.65.135.x
- Testados: 146–152, 179–188 (typos corrigidos na lista)
- **Acessíveis (chave):** 148 n8n, 156 nperf2024, 150 ns1, 151 ns2, 152 dns5 (root), 180 nextcloud, 181 aspeedfibra, 185 tst
- **Porta 22 fechada:** 146, 147, 179, 182, 183, 184, 186, 187, 188
- Inventário, ~/.ssh/config e aexec atualizados com todos os hosts

### nPerf (45.65.135.156)
- Servidor nperf2024 confirmado operacional pelo operador
- IP migrado de 45.65.135.149 → 45.65.135.156 (netplan, gateway 145, /28)
- DNS: nperf + nperf2024 → 156, PTR 156 → nperf.aspeednet.com.br (serial 2026070601)
- Hostname e /etc/hosts atualizados no servidor
## 2026-07-11 — DNS + HTTPS AspeedOLT (gpon)

- **DNS ns1:** `gpon A 45.65.135.154` · `aspeedolt A 45.65.135.154` (serial 2026071101)
- **PTR:** `154 → gpon.aspeednet.com.br` em 45.65.135.rev
- **HTTPS:** Let's Encrypt em gpon (nginx) — https://gpon.aspeednet.com.br e https://aspeedolt.aspeednet.com.br
- **APP_URL:** https://gpon.aspeednet.com.br

## 2026-07-11 — Laudo de rede (ESXi/PVE/MikroTik)

- Documento: `docs/laudo-rede-2026-07-11.md`
- Coleta live hypervisors + Prometheus SNMP CCR + servidores
- Destaque: ESXi2 ~89% RAM / cdntv1 dominante; PVE ocioso; CCRs OK

## 2026-07-11 — SpeedShield: fim de "database is locked"

- **Causa:** prune/watchdog a cada 2 min (DB≥300MB) + VACUUM com stop + cron duplicado
- **Correção:**
  - `prune-db.sh`: flock, busy_timeout 120s, checkpoint PASSIVE, sem VACUUM online
  - limpeza de `baselines` (ISO datetime) + cap 60k
  - `watchdog.sh`: prune só se DB≥900MB ou WAL≥400MB, rate-limit 45 min
  - cron: a cada 2h + vacuum semanal 03:15 domingo; removidos `*/5` e horário duplicados
- **Pós-fix:** DB **317MB → 56MB**, baselines 379k → 60k, **0 locks** em 90s+, health ok
- Scripts: `scripts/speedshield-prune-db.sh`, `speedshield-watchdog.sh`, `speedshield-cron.d`

## 2026-07-11 — SpeedShield v2: prune com stop curto (fim dos locks)

- Monitor 1h detectou **3 locks às 10:00** por cron `0 */2` com DELETE online → WAL **1.4 GB**
- **Nova estratégia:**
  - `soft`: só checkpoint PASSIVE (sem DELETE)
  - `full`: **stop 2–10s** + DELETE + VACUUM + start (zero lock no daemon)
- Cron: soft a cada hora · full diário 03:30 · vacuum semanal
- Pós-fix: DB **602+1361 MB → 48 MB**, locks_3min=**0**, health ok

## 2026-07-11 — Speed Fibra AI + Telegram + n8n

- **Telegram bot** `@speedfibra_alert_bot` no hub: `speedfibra-telegram.service`
  - Long-poll → `speedfibra_agent` (:8777) → resposta no chat
  - Chat allowlist via TELEGRAM_CHAT_ID
  - Resumo diário 08:00 (`telegram_daily_summary.sh`)
- **Agent tools**: AspeedOLT, SpeedShield, Prometheus, inventário, ping
- **n8n**: workflow importável `workflow-speedfibra-ai.json` (webhook + resumo diário)
- Docs: `/opt/speedfibra-ai/README-TELEGRAM-N8N.md`

## 2026-07-11 — Speed Fibra AI fases 1–4
- Alertas proativos Telegram (speedfibra-alerts.service)
- Bot: /sinal /reboot /block /unblock com SIM + botão
- n8n workflow atualizado (webhook + diário + semanal)
- Relatório semanal cron seg 08:30

## 2026-07-11 — n8n Speed Fibra AI ativo
- Workflow `sfAiAgentTg001` importado e **ativado**
- Webhooks: `/webhook/speedfibra-ai`, `/webhook/speedfibra-snapshot`
- Fix permissões SQLite n8n (uid 1000 + /root traverse)

## 2026-07-11 — Speed Fibra AI Guardian implantado (fases 0–4)
- Daemon + API :8788 + 7 policies + audit SQLite
- Telegram: /guardian /gmode /gphase /gkill
- Mode default: confirm (seguro)


## 2026-07-12 — Speed Fibra Control: arquitetura mestre + dual-engine OLT

- docs/SPEED-FIBRA-CONTROL-ARCHITECTURE.md (diagramas, pastas, ER, escala 5k)
- docs/OLT-BRIDGE-MODULE.md + docs/SCHEMA.sql
- OltBridgeClient: engine auto|bridge|php
- config/aspeedolt.php: locks, thresholds, MikroTik hosts

## 2026-07-12 — Speed Fibra Control F2–F6 implantados

- F2: MonitoringService → Telegram (RX crítico + lote offline); poll 400 ONUs/ciclo
- F3: GET /api/map/geojson + /api/ctos; MapPage CTO/cliente + link SGP
- F4: MikrotikPppoeService + tabela mikrotik_bindings no authorize
- F5: OltBridgeClient dual-engine OLT_ENGINE=auto; bridge C++ ativo
- F6: UI rebrand Speed Fibra Control (login/sidebar/title)
- Deploy gpon: migrate OK, frontend dist em /var/www/aspeedolt/frontend/dist

## 2026-07-12 — CDN TV acesso SSH
- Reset offline senha root em **cdntv 1** (45.65.135.153 origin) e **cdntv 2** (45.65.135.179 edge) no ESXi2
- Liberado SSH do hub (hosts.allow Speed Fibra); portas 22+9922; chave hub deployada; senhas em credentials CDNTV1/2_ROOT_PASS

## 2026-07-12 — Speed Fibra TV (portal CDNTV)
- Portal Speed Fibra TV em /opt/speedfibra-tv (FastAPI) no hub :8088 — **265 canais** via API MSE CDNTV
- VM Proxmox **110 speed-tv** 45.65.135.187/28 (2 vCPU, 4GB, 20G) cloud Ubuntu 24.04 — deploy do mesmo app
- Login/streams vinculados a CDNTV origin 153 + edge play.aspeednet.com.br (continua pagando CDNTV)
- Rede VM speed-tv corrigida: IP **45.65.135.155/28** gw .145 (VLAN102 PVE); portal :8088 com 265 canais CDNTV
- Firewall CDNTV origin: liberado 45.65.135.0/24 + 45.65.132.0/22 + 10.100.99.0/24 no ipset tbox (API 5000/5001)

## 2026-07-12 — TV sob controle da IA
- Phoenix: hosts **cdntv1**, **cdntv2**, **speed-tv** (ICMP/HTTP/node-exporter)
- Guardian: policy **p8_tv_stack_heal** + detector `tv_stack_health` + actuator `tv_heal`
- Agent NetAI: tools TV no contexto (status/heal) + keywords iptv/cdntv/nimble
- CLI: `/opt/speedfibra-ai/bin/tv_control.py status|heal|optimize` · cron */15
- Knowledge: `knowledge/tv-stack.md`

## 2026-07-12 — tv.aspeednet.com.br HTTPS
- DNS A: tv.aspeednet.com.br → 45.65.135.155 (serial 2026071201)
- PTR 155 → tv.aspeednet.com.br
- Portal VM speed-tv: nginx reverse proxy + Let's Encrypt (certbot)
- URL: https://tv.aspeednet.com.br

## 2026-07-16 — IPv6: padronização LO, iBGP RUIR, hardening firewall

- **Loopbacks IPv6 únicos:** BGP `ffff::3`, CChá `ffff::4` (era duplicado `::3`), PPPoE `ffff::fe` (novo), RUIR `ffff::5` (já existia)
- **CChá OSPF v3:** template lo1 atualizado para anunciar `ffff::4/128`
- **iBGP IPv6 BGP↔RUIR:** sessão **ESTABLISHED** (antes down por LO duplicado + filtro IN sem accept de ::/0)
- **RUIR filtros:** `ipaddr-IN-IPV6` aceita default e agregado `2804:3d68::/32`
- **Firewall IPv6 (4 roteadores):** established/related, ICMPv6, OSPF, prefixo interno, proteção BGP:179, drop invalid, bogons raw, anti-spoof WAN no BGP
- **Backup:** `/root/aspeednet-network/backups/ipv6-harden-20260716-122040`
- **Validação:** ping Google/CF e mesh LO OK; 14 sessões BGP no core

## 2026-08-01 — tv-paulo / cdntv acesso SSH
- Host: 181.189.4.28:6963 (hostname cdntv, Debian 13)
- Liberado root SSH (PermitRootLogin yes), home nbessoni criado
- Chave ed25519 ~/.ssh/tv-paulo implantada em root e nbessoni
- Alias SSH: tv-paulo (root), tv-paulo-user (nbessoni)
- sudo NOPASSWD para nbessoni

## 2026-08-01 — tv-paulo apt full-upgrade + reboot
- Host: cdntv (181.189.4.28:6963)
- apt update + full-upgrade: kernel 6.12.73 → 6.12.100 (security)
- Reboot aplicado; kernel em execução: 6.12.100+deb13-amd64
- 0 pacotes pendentes

## 2026-08-01 — SmartNet TV portal no tv-paulo
- Host: cdntv / tv-paulo (181.189.4.28:80)
- Portal white-label SmartNet (demo): login, ao vivo, filmes, séries, player, PWA, modo TV, hub dispositivos
- Deploy: /var/www/smartnet (nginx), fonte /opt/smartnet-tv
- Sem streams IPTV reais — catálogo fictício + Big Buck Bunny
- Marca: azul #155DFC + laranja #F97316, WhatsApp 33 98848-8180

## 2026-08-01 — SmartNet + backend CDNTV real no tv-paulo
- Gateway FastAPI :8088 proxy → https://tv.aspeednet.com.br (origin 153 inacessível direto do 181.x)
- UI SmartNet consome /api/channels (241), /api/categories (17), login AAA, VOD, play HLS
- APKs espelhados em /static/apps (SpeedFibraTV.apk etc.)
- Endpoints extras: /api/m3u e /api/xtream/player_api.php (subset)
- HLS edge: play.aspeednet.com.br (token assinante obrigatório no m3u8)

## 2026-08-01 — tv-paulo → origin CDNTV direto
- Liberado 181.189.4.28 no ipset `tbox` do origin (cdntv1) portas 5000/5001
- Persistido em ipset.sets + ipset.json
- SmartNet backend 3.1.0-origin: catalog_mode=origin (264 canais brutos, ~241 após shield)
- Fallback gateway tv.aspeednet.com.br se origin cair

## 2026-08-01 — tv-paulo EDGE HLS (1 pull → N viewers)
- nginx cache zone hls_edge em /var/cache/nginx/hls (8G)
- /media/n/* proxy → origin Nimble 45.65.135.153:1923
- proxy_cache_lock: 1 download do origin multiplica para vários clientes (X-Cache-Status HIT)
- PLAY_BASE do portal SmartNet → http://181.189.4.28 (play_url local)
- /edge-status e header X-Edge: tv-paulo
- Modelo igual cdntv2/play: economiza banda WAN entre origin e assinantes do Paulo

## 2026-08-01 — Runbook + script deploy cliente TV edge
- docs/RUNBOOK-CLIENTE-TV-EDGE-SMARTNET.md
- docs/PROMPT-GROK-CLIENTE-TV-EDGE.md
- scripts/deploy-cliente-tv-edge.sh (tbox + backend + nginx edge + portal + smoke HIT)

## 2026-08-04 — BGP peer TESTE RR BHE full table
- Peer `BHE-RR-TEST-V4` → 186.192.0.252 local 172.16.4.114, LP50, limit 2M
- Sessão ESTABLISHED ~1.07M prefixos; default permanece TTO 172.16.4.101
- Recovery: session clear flag=limit-exceeded / stopped
- Watchdog 5min: path-health, prod, default, Nanuque, sessão BHE → remove peer (config normal)

## 2026-08-04 — CONECT RR statics + filters (e-mail PTP)
- Rotas: .253 via TTO .101; .252 via Nanuque .113; ::2 via TTO ::9; ::8 via Nanuque ::9
- Filtros: CONECT-RR-IPATINGA-IPV{4,6}-IN (LP200); CONECT-RR-BHE-IPV{4,6}-IN (LP50)
- Peer FULL prod **nao** trocado de filtro; BHE-TEST usa CONECT-RR-BHE-IPV4-IN
- Script: scripts/bgp-conect-rr-static-filters.rsc

## 2026-08-04 — 4 peers RR CONECT (2 IPv4 + 2 IPv6)
- Ipatinga: FULL v4 .253 + FULL v6 ::2 (prod)
- BHE: BHE-RR-TEST-V4 .252 + BHE-RR-TEST-V6 ::8 (LP50, filtros CONECT-RR-BHE-*)
- Script: scripts/bgp-conect-rr-4peers.rsc

## 2026-08-04 — FULL IPv6 local corrigido (CONECT)
- FULL-ROUTER-CONECT-IPV6: local **2804:3360:0:15::a** (TTO) → RR Ipatinga ::2
- BHE-RR-TEST-V6: local **2804:3360:0:17::a** (Nanuque) → RR BHE ::8
- Antes ambos usavam ::17::a; CONECT pediu separar

## 2026-08-05 — DNS PPPoE -> Unbound ns6
- BRAS 45.65.132.118: /ip dns servers=45.65.135.158
- Profiles SGP-PLANO-*, SF_PLAN_*, PLAN_*, default, PPPOE_SERVER: dns-server=45.65.135.158
- Mantidos pool_aviso/bloqueio com DNS captive
- Clientes ja autenticados so pegam novo DNS apos reauth/reconnect

## 2026-08-06 — BHE backup LP50 + fix export IPv6 CONECT
- CONECT-IPV6-OUT: accept 2804:3d68::/32 (antes vazio — clientes sem retorno v6)
- Anuncio /32 para TTO, Nanuque e FULL IPv6 CONECT
- BHE-RR-TEST-V4/V6 enabled com LP50 (Ipatinga 200/220 prioritario)
- FULL IPv6 local TTO ::15::a

## 2026-08-06 — BHE IPv4/IPv6 LP50→LP200
- **Host:** CCR BGP `45.65.132.1`
- **O quê:** filtros `CONECT-RR-BHE-IPV{4,6}-IN` LP **200** (igual full Ipatinga/TTO)
- **Default TTO** permanece LP **220** (preferido)
- **Efeito:** BH vira candidato igual na full table; empate BGP (AS-path/IGP/RID) decide — soft balance, não ECMP
- **Validação:** `8.8.8.0/24` e `1.1.1.0/24` com LP200 nos dois RRs; ativo ainda Ipatinga (tie-break)

## 2026-08-06 — IPTV: watchdog Nimble thrash fix
- **Host:** speedfibra.origin `45.65.135.153`
- **Problema:** cron `sf-nimble-watchdog` reiniciava Nimble em loop (check só :8077)
- **Fix:** watchdog com health :1923, cooldown 15m, 2 strikes, load defer
- **Efeito:** para blackout em massa no play.aspeednet.com.br
- **Validar:** `systemctl is-active nimble`; chunk HLS 200; journalctl -t sf-nimble-watchdog

## 2026-08-07 — IPTV: rota on-net validada + QoS no BRAS
- **1 Rota:** play `.179` e origin `.153` **on-net** (BGP vlan102/103; PPPoE via `.117` 2 hops, ~0.2ms)
- **2 QoS PPPoE** `45.65.132.118`:
  - Listas `SF-IPTV-OFFICIAL` (179/153/155) e `SF-IPTV-EXT-HEAVY` (152.32.199/24, 186.235.68/24)
  - Oficial: mark `sf-iptv-off-*` + tree prio **1** PCQ 80M DL / 20M UL por cliente
  - Externo: mark `sf-iptv-ext-*` + tree prio **7** PCQ **40M DL** / 15M UL por cliente (max 3G agg)
- **Validar:** `/queue tree print stats where name~qt-iptv`

## 2026-08-07 — IPTV externo best-effort
- **BRAS** `45.65.132.118`: ext PCQ **rate=0** (sem teto/cliente), prio **2**, max DL **7G** / UL **3G**, buffers altos
- Listas: UCLOUD 152.32.198/23, 199/24, conectinfo 186.235.68/24, CDN STAR, X99
- Path: CONECT TTO (melhor disponível); conectinfo RTT ~4ms
- MSS clamp SYN out WAN
- **Nota:** qualidade final ainda depende do servidor externo

## 2026-08-08 — Force DNS PPPoE 152/158 + analise 4 clientes
- **Perfis SGP-PLANO**: dns-server=45.65.135.152,45.65.135.158
- **NAT dstnat**: 100.64/10 e 10/8 porta 53 !SF-DNS-OUR → 152
- **Analise**: samuel.rufino, alerrandro, debora.souza, raissa.2 online
- **debora**: DNS 8.8.4.4/114.114 + IPTV UCLOUD 152.32.200 — agora forçado 152
