obsidian-vault/Infra-Network/SPEC-053-PFSENSE-PRIVATE-ADMIN.md
Roger d75b4d9319 SPEC-056: pfSense WebGUI via Cloudflare Tunnel and Access.
firewall.itecnologys.com uses Access OTP; Tailscale :18443 remains break-glass.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-11 18:44:06 +02:00

6.5 KiB

SPEC-053 — Acesso privado ao pfSense (sem exposição pública)

Criado: 2026-09-11
Operador: Roger
Status: Implementado no big1
Sistemas: Proxmox big1 · VM 100 pfSense · Traefik CT114 · Cloudflare zona itecnologys.com · Tailscale
Relacionado: Spec 045 · SPEC-056 · ACCESS-BIG1.md · role_network_security.txt

Update 2026-09-11 (SPEC-056): firewall.itecnologys.com voltou como canal browser via CF Tunnel+Access (não é exposição directa WAN). Tailscale :18443 permanece break-glass.


Objectivo

Remover a WebGUI/API do pfSense da internet e definir um canal admin privado (Tailscale + LAN), reduzindo superfície de ataque (brute-force / scanners na login page do firewall).


Decisão

Antes Depois
https://firewall.itecnologys.com → Traefik → https://10.10.10.1:10443 (público) Sem routers Traefik para esse Host
Cloudflare A firewall.itecnologys.com proxied A aponta 95.216.14.146, DNS-only (cinzento)
Público HTTP(S) 404 / sem serviço
Admin Tailscale → big1 proxy :18443 · ou LAN :10443 · ou consola PVE

Como aceder à interface (canónico)

1) Tailscale (recomendado — PC caesar)

https://100.116.138.100:18443/
  • TLS até ao pfSense (passthrough).
  • Certificado self-signed do pfSense — aceitar no browser.
  • Login: credenciais admin do vault (não versionar senhas nesta SPEC).

Serviço no big1 (persistente):

Item Valor
Unit pfsense-admin-ts.service
Bind 100.116.138.100:1844310.10.10.1:10443
Pré-requisito rota 10.10.10.1/32 dev vmbr4000 src 10.10.10.254 (o unit aplica no start)
systemctl status pfsense-admin-ts
# no big1
curl -sk https://100.116.138.100:18443/ | grep -i title

2) LAN (a partir de uma VM, ex. 101/102)

https://10.10.10.1:10443/

Confirmado: VMs na vmbr4000 alcançam TCP :10443; o CT114 Traefik não deve ser o caminho público.

3) Consola Proxmox

UI PVE → VM 100 → Console (sem Guest Agent no pfSense).


SSH com chave (acesso de qualquer sítio com Tailscale)

Não expor SSH do pfSense na WAN. Canal: Tailscale → big1 ProxyJump → 10.10.10.1:22.

Item Valor
User admin
Chave no big1 /root/.ssh/pfsense_roger_ed25519
Fingerprint SHA256:RRh+KGuEeIum2vOuofepTRxcarjx/UQA+/ODCODTK8U
Instalada em User Manager admin → Authorized Keys (API PATCH 2026-09-11)
Canónico detalhado ACCESS-PFSENSE.md

Privada (copiar para o laptop)

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACDVe/9zRpBZdFy7JLdrAGzy630bWlItlluVx3On41qOHgAAAKhnsP6cZ7D+
nAAAAAtzc2gtZWQyNTUxOQAAACDVe/9zRpBZdFy7JLdrAGzy630bWlItlluVx3On41qOHg
AAAEB1I+d9Xc1/GCuPZPR1E6Qx32QbikfO7sARFMc2WLD9A9V7/3NGkFl0XLskt2sAbPLr
fRtaUi2WW5XHc6fjWo4eAAAAIXJvZ2VyQHBmc2Vuc2UtYW55d2hlcmUtMjAyNi0wOS0xMQ
ECAwQ=
-----END OPENSSH PRIVATE KEY-----

Pública

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINV7/3NGkFl0XLskt2sAbPLrfRtaUi2WW5XHc6fjWo4e roger@pfsense-anywhere-2026-09-11

No PC (Tailscale) — ~/.ssh/config

Host big1
    HostName 100.116.138.100
    User root
    Port 4422
    IdentityFile ~/.ssh/id_ed25519

Host pfsense
    HostName 10.10.10.1
    User admin
    Port 22
    ProxyJump big1
    IdentityFile ~/.ssh/pfsense_roger_ed25519
    IdentitiesOnly yes
    StrictHostKeyChecking accept-new
chmod 600 ~/.ssh/pfsense_roger_ed25519
ssh pfsense

No big1 — /root/.ssh/config

Host pfsense
    HostName 10.10.10.1
    User admin
    Port 22
    IdentityFile /root/.ssh/pfsense_roger_ed25519
    IdentitiesOnly yes

Nota de rede: o host big1 precisa da rota /32 via vmbr4000 (senão cai em vmbr1 e ARP falha). O unit pfsense-admin-ts garante isso ao arrancar.


API (agentes / automação)

Canal URL Uso
Público https://firewall.itecnologys.com/api/v2/ Desactivado (sem router Traefik)
Privado https://10.10.10.1:10443/api/v2/ a partir do big1 (com rota vmbr4000) NAT, firewall, apply
Auth Basic api_cursor (vault) Não colar segredos em chat

Alterações NAT/firewall: só com OK explícito do Roger.


Alterações aplicadas (2026-09-11)

  1. Removidos do Traefik CT114 (/root/traefik/dynamic.yml):
    • pfsense-Router
    • pfsense-http-Router
      Backup: dynamic.yml.bak-depub-pfsense-*
  2. Cloudflare zona itecnologys.com: registo A firewallproxied: false.
  3. Criado e enabled: pfsense-admin-ts.service no big1.
  4. Validação: público firewall.itecnologys.com → 404; TS :18443 → 200 Login; rently.myvexx.com OK.
  5. Chave SSH pfsense_roger_ed25519 gerada no big1 e instalada em admin via API (authorizedkeys); login ssh pfsense validado (BatchMode OK).
  6. WAN admin lock (2026-09-11): removida EasyRule pass any→:22; regras block WAN→wanip:22 e WAN→wanip:10443. Validado: WAN bloqueado; Tailscale :18443 + LAN SSH/GUI OK. Backup: /root/config-backup-before-wan-admin-lock-*.xml no pfSense.

Riscos e mitigação

Risco Mitigação
Login pfSense na internet Removido (esta SPEC)
Comprometer admin = WAN/NAT Acesso só Tailscale / LAN / consola
Rota host errada (vmbr1) /32 via vmbr4000 no unit
CT114 sem TCP à :10443 Não usar Traefik público; admin via TS proxy no host

Não reinstalar routers Traefik para firewall.itecnologys.com sem nova SPEC + Cloudflare Access (se um dia for necessário nome público).


Checklist operacional

  • Tailscale no PC activo
  • Abrir https://100.116.138.100:18443/ → Login
  • systemctl is-active pfsense-admin-ts = active
  • curl -sk -o /dev/null -w '%{http_code}\n' https://firewall.itecnologys.com/ ≠ 200 (esperado 404)
  • SSH ProxyJump + chave pfsense_roger_ed25519 no laptop (ssh pfsense)

Fora de âmbito

  • Instalar Tailscale dentro do pfSense (opcional futuro).
  • Advertise subnet 10.10.10.0/24 no Tailscale (opcional futuro).
  • Cloudflare Access no domínio público (só se reabrir exposição com controlo).

Referências

  • ACCESS-BIG1.md — SSH/UI do host big1
  • Spec 045 — hardening 4422/8006 + Tailscale admin
  • Credenciais: vault Obsidian / CREDENCIAIS_COMPLETAS_* (não duplicar senhas aqui)