ligbox-ops-platform/specs/010-admin-domain-validation/correcao-vm112.md
Ligbox Spec Hub 3a2c64834b Initial import: ligbox-ops-platform + specs + LAPTOP + obsidian merge (CT130)
Source: VM122 /opt + obsidian-infra + LAPTOP
Hub: CT130 spec-hub 10.10.10.130
2026-06-19 17:26:41 +00:00

7.1 KiB
Raw Blame History

SPEC — Correcção Admin Domínios Virtuais (VM112)

Versão: 1.0
Data: 2026-06-12
Autor: Roger / Cursor DevOps
Estado: IMPLEMENTADO
Servidor: VM112 (10.10.10.112) — Carbonio Advanced


1. Resumo executivo

Correcção completa do Admin Console Carbonio para 9 domínios virtuais na VM112, em três camadas:

Camada Problema Correcção
:6071 SSL 4 domínios ERR_CERT no browser Certs LE exportados Traefik → nginx admin
/admin :443 Timeout/504 nos 4 domínios Redirect nginx 443 → :6071/static/login/
diarissima :6071 504 (bloco ausente) Bloco em .custom + blindagem zmproxyconfgen
ligbox :6071 Fixes manuais apagados por zmproxyconfgen Script idempotente + wrapper

URL admin canónica (sempre válida):

https://mail.ligbox.com.br:6071/static/login/

Domain admin entra com admin@{dominio} na mesma URL ou na URL branded do domínio.


2. Mapa final por domínio (pós-correcção)

Domínio /admin :443 :6071 cert :6071 login
ligbox.com.br 302 → :6071 LE próprio
diarissima.com 302 SAN multi
dratcoin.com 302 SAN multi
ibytera.com 302 SAN multi
myvexx.com 302 SAN multi
betinplace.com 302 Traefik export
betinsport.com 302 Traefik export
eplacebets.com 302 Traefik export
iofficebooks.com 302 Traefik export

3. Problemas identificados

3.1 Dois URLs diferentes (confusão operacional)

URL Porta Função
https://mail.{dominio}/admin 443 Atalho — deve redirecionar
https://mail.{dominio}:6071/static/login/ 6071 Admin Console Carbonio (real)

O wizard /admin (SPA painel delegado) Carbonio admin.

3.2 ERR_CERT nos 4 domínios (betinplace, betinsport, eplacebets, iofficebooks)

  • Bloco nginx :6071 existia
  • Cert partilhado nginx.crt (SAN multi) não incluía estes hostnames
  • Browser: NET::ERR_CERT_COMMON_NAME_INVALID + HSTS impede bypass

Causa: domínios em conta Cloudflare diferente — certbot DNS VM112 não consegue expandir mail-vm112-multi.

Solução: certs LE já existentes no Traefik (CT114) exportados para VM112.

3.3 /admin :443 → 504/timeout (4 domínios)

  • mail.ligbox.com.br funcionava via https.default (include backend-admin-redirect.conf)
  • Domínios tenant tinham bloco location = // corrupto (admin quebrado)
  • Falta include backend-admin-redirect.conf nos blocos nginx.conf.web.https

3.4 diarissima :6071 → 504

  • Bloco admin removido em cleanup 2026-06-08
  • Recriado em ficheiro .custom (fora do zmproxyconfgen)

3.5 zmproxyconfgen apaga fixes ligbox

  • Regenera nginx.conf.web.carbonio.admin → perde patches manuais ligbox

4. Correcções aplicadas

4.1 Certs Traefik → admin :6071 (4 domínios)

Origem: /root/traefik/letsencrypt/acme.json (CT114)

Destino:

/opt/zextras/ssl/letsencrypt/traefik-export/mail-{dominio}.fullchain.pem
/opt/zextras/ssl/letsencrypt/traefik-export/mail-{dominio}.privkey.pem

Patch nginx: blocos admin :6071 apontam para certs exportados (não nginx.crt partilhado).

Script sync:

/opt/ligbox-deploy/scripts/admin-login-check/sync-traefik-admin-certs.sh

4.2 Redirect /admin :443 → :6071 (7+ domínios)

Ficheiro:

# /opt/zextras/conf/nginx/extensions/backend-admin-redirect.conf
location ~* ^/admin/?$ {
    return 302 https://$host:6071/static/login/;
}

Aplicação: apply-admin-nginx-overrides.py injecta include em cada bloco server_name mail.* em nginx.conf.web.https.

Removido: blocos corruptos location = //.

4.3 diarissima — bloco admin isolado

/opt/zextras/conf/nginx/includes/nginx.conf.web.carbonio.admin.custom

Include em nginx.conf.web (zmproxyconfgen não toca).

4.4 Blindagem zmproxyconfgen

Script Função
apply-admin-nginx-overrides.py Re-aplica: ligbox fixes, redirect /admin, certs tenant, diarissima custom
zmproxyconfgen-ligbox.sh Wrapper seguro: zmproxyconfgen + apply --reload
/usr/local/bin/zmproxyconfgen-ligbox Symlink

Regra: nunca correr zmproxyconfgen directo em produção.

4.5 Fixes ligbox :6071 (mantidos)

  • server_name mail.ligbox.com.br 10.10.10.112
  • Cert LE: /opt/zextras/ssl/letsencrypt/mail.ligbox.fullchain.pem
  • Remove redirect E4 /zx/login/supported
  • Rewrite IP → domínio em /zx/login/v3/config
  • Host mail.ligbox.com.br em auth locations
  • blank.html → 404

5. Arquitectura

Browser
   │
   ├─ https://mail.{dominio}/admin (:443)
   │       └─ nginx backend-admin-redirect.conf
   │               └─ 302 → https://mail.{dominio}:6071/static/login/
   │
   └─ https://mail.{dominio}:6071/static/login/
           └─ nginx carbonio.admin (+ .custom diarissima)
                   └─ carbonio-auth / catalog
                           └─ LDAP (zimbraReverseProxyAdminEnabled: TRUE no servidor)

Nota LDAP: admin activo uma vez no servidor mail.ligbox.com.br — não por domínio virtual.


6. Validação

# Redirect /admin :443
curl -skI https://mail.iofficebooks.com/admin | grep -i location
# → https://mail.iofficebooks.com:6071/static/login/

# Cert :6071
echo | openssl s_client -connect mail.betinplace.com:6071 -servername mail.betinplace.com 2>/dev/null | openssl x509 -noout -subject

# Fluxo E1E8 ligbox
cd /opt/ligbox-deploy/scripts/admin-login-check && npm run check:flow:ligbox

# Overrides pendentes
python3 apply-admin-nginx-overrides.py --check

7. Ficheiros alterados/criados

Caminho Descrição
/opt/zextras/conf/nginx/extensions/backend-admin-redirect.conf Redirect /admin
/opt/zextras/conf/nginx/includes/nginx.conf.web.carbonio.admin.custom Bloco diarissima
/opt/zextras/ssl/letsencrypt/traefik-export/* Certs 4 domínios
/opt/ligbox-deploy/scripts/admin-login-check/apply-admin-nginx-overrides.py Patcher idempotente
/opt/ligbox-deploy/scripts/admin-login-check/sync-traefik-admin-certs.sh Sync certs Traefik
/opt/ligbox-deploy/scripts/admin-login-check/zmproxyconfgen-ligbox.sh Wrapper zmproxyconfgen

8. Documentação relacionada

  • SPEC-SOLUCAO-ADMIN-LOGIN-6071.md — admin login ligbox (NAT + nginx E1E8)
  • SPEC-ADMIN-DOMINIO-BLINDAGEM-NGINX.md — blindagem + mapa domínios
  • ADMIN-NGINX-OVERrides-BLINDAGEM.md — procedimento ops
  • SPEC-CARBONIO-ADMIN-LOGIN-FLOW-VALIDATION.md — validação fluxo E1E8

9. Critérios de aceitação

  • 9/9 domínios: /admin :443 → 302 :6071
  • 9/9 domínios: :6071 cert CN correcto no browser
  • 9/9 domínios: :6071/static/login/ HTTP 200
  • diarissima bloco .custom activo
  • Script blindagem zmproxyconfgen instalado
  • Sync Traefik certs documentado

Roger / VM112 — 2026-06-12