# 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 (hardening big1) · `ACCESS-BIG1.md` · `role_network_security.txt` --- ## 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`) ```text 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:18443` → `10.10.10.1:10443` | | Pré-requisito | rota `10.10.10.1/32 dev vmbr4000 src 10.10.10.254` (o unit aplica no start) | ```bash 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) ```text 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` ```sshconfig 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 ``` ```bash chmod 600 ~/.ssh/pfsense_roger_ed25519 ssh pfsense ``` ### No big1 — `/root/.ssh/config` ```sshconfig 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 `firewall` → `proxied: 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). --- ## 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)