7.1 KiB
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
:6071existia - 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.brfuncionava viahttps.default(includebackend-admin-redirect.conf)- Domínios tenant tinham bloco
location = //corrupto (admin quebrado) - Falta
include backend-admin-redirect.confnos blocosnginx.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.brem auth locationsblank.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 E1–E8 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 E1–E8)SPEC-ADMIN-DOMINIO-BLINDAGEM-NGINX.md— blindagem + mapa domíniosADMIN-NGINX-OVERrides-BLINDAGEM.md— procedimento opsSPEC-CARBONIO-ADMIN-LOGIN-FLOW-VALIDATION.md— validação fluxo E1–E8
9. Critérios de aceitação
- 9/9 domínios:
/admin:443 → 302 :6071 - 9/9 domínios:
:6071cert CN correcto no browser - 9/9 domínios:
:6071/static/login/HTTP 200 - diarissima bloco
.customactivo - Script blindagem zmproxyconfgen instalado
- Sync Traefik certs documentado
Roger / VM112 — 2026-06-12