diff --git a/Infra-Network/ACCESS-BIG1.md b/Infra-Network/ACCESS-BIG1.md new file mode 100644 index 0000000..a2c8e6b --- /dev/null +++ b/Infra-Network/ACCESS-BIG1.md @@ -0,0 +1,99 @@ +# ACCESS — Proxmox host **big1** + +**Status:** canónico · **Atualizado:** 2026-09-11 +**Operador:** Roger +**SPEC:** `SPEC-054-PROXMOX-PRIVATE-ADMIN.md` +**Uso:** agentes NÃO perguntam de novo — ler este ficheiro. + +> Acesso ao **servidor** (SSH / UI PVE), não a outra sessão de chat. +> Cada chat Cursor é isolado. +> **Mesmo modelo que o pfSense:** admin pela **Tailscale**, não pela internet. + +--- + +## Host + +| Item | Valor | +|------|--------| +| Nome | **big1** (`big1.itecnologys.com`) | +| Software | Proxmox `pve-manager/9.1.4` (kernel 6.17.x) | +| **Não confundir** | **BIG** (VM500 RentCharge) ≠ **big1** (Hetzner) | + +--- + +## SSH do host (só chave) + +| Item | Valor | +|------|--------| +| IP público | `95.216.14.162` | +| Tailscale | `100.116.138.100` | +| Porta | **`4422`** (não 22) | +| Utilizador | `root` | +| Auth | `PasswordAuthentication no` · `PermitRootLogin without-password` | +| Chave dedicada (agente) | `/root/.ssh/cursor_agent_ed25519` | +| Fingerprint | `SHA256:srUl0EmzpFjjzRMQ0YUxeuRnEd2BWqEOy90+cu000lk` (`cursor-agent-session-20260909`) | +| Host key ED25519 | `SHA256:HaeXqXuXrm7ddAt+6bDj+G43tVRrQBpRKRluEfcnsLg` | + +```bash +# Canónico (Tailscale — de qualquer sítio do mundo) +ssh -i ~/.ssh/… -p 4422 root@100.116.138.100 + +# Emergência só se Tailscale falhar (chave; não senha) +ssh -i ~/.ssh/… -p 4422 root@95.216.14.162 +``` + +`4422` na internet pública está **DROP** excepto via Tailscale/`lo` (hardening Spec 045). + +**Nunca colar a chave privada em chat.** Se a sessão já corre no big1, a chave está em `/root/.ssh/`. Se corre noutra máquina, o operador copia por canal privado (`cat` local → `chmod 600` no destino). + +Outras chaves no host (não usar senha): `id_rsa` / fingerprints RSA `root@95.216.14.162`, `root@big1`, ED25519 `PROXMOX-HERTZNER-3`, RSA `root@big`. + +Revogar só a chave do agente: + +```bash +# no cliente +ssh-keygen -R "[95.216.14.162]:4422" +# no big1 +sed -i '/cursor-agent-session-20260909/d' /root/.ssh/authorized_keys +``` + +Backup: `/root/.ssh/authorized_keys.bak.*` no big1. + +--- + +## HTTPS Proxmox (WebUI) — privado como o pfSense + +| Canal | URL | +|-------|-----| +| **Tailscale (canónico)** | **https://100.116.138.100:8006/** | +| IP público `:8006` | **Bloqueado** (iptables DROP; ~100k+ drops) | +| Cert | CN=`big1.itecnologys.com` | + +De qualquer sítio: Tailscale ligado → abrir `https://100.116.138.100:8006/` no browser. + +Persistência: `/etc/network/if-up.d/zzz-tailscale-admin-hardening` + `/etc/iptables/rules.v4` +(ACCEPT `tailscale0`/`lo` → `4422,8006`; DROP resto). + +--- + +## Guests (a partir do big1) + +```bash +qm guest exec -- +pct exec -- +``` + +SSH guest (quando rede OK): `root` / `805353` — **não** abre o host. + +CT130 Obsidian: ver `ACCESS-CT130-OBSIDIAN.md`. + +--- + +## Relacionados + +- `ACCESS-CT130-OBSIDIAN.md` +- `.cursor/rules/access-big1.mdc` + +## pfSense + +Ver **ACCESS-PFSENSE.md** e **SPEC-053-PFSENSE-PRIVATE-ADMIN.md** (GUI/SSH privados via Tailscale; sem firewall.itecnologys.com público). diff --git a/Infra-Network/SPEC-054-PROXMOX-PRIVATE-ADMIN.md b/Infra-Network/SPEC-054-PROXMOX-PRIVATE-ADMIN.md new file mode 100644 index 0000000..c8938b2 --- /dev/null +++ b/Infra-Network/SPEC-054-PROXMOX-PRIVATE-ADMIN.md @@ -0,0 +1,72 @@ +# SPEC-054 — Acesso privado ao Proxmox WebUI (big1) — mesmo modelo que pfSense + +**Criado:** 2026-09-11 +**Operador:** Roger +**Status:** ✅ Já implementado (Spec 045 + hardening iptables); documentado canonicamente aqui +**Sistemas:** Proxmox **big1** · Tailscale +**Relacionado:** Spec 045 · `ACCESS-BIG1.md` · `SPEC-053-PFSENSE-PRIVATE-ADMIN.md` + +--- + +## Objectivo + +Garantir que a **WebUI do Proxmox (`:8006`)** e o **SSH do host (`:4422`)** não são o alvo fácil de bots na internet — acesso admin **via Tailscale**, igual ao pfSense. + +--- + +## Decisão (paralelo ao pfSense) + +| Serviço | Público | Canónico (privado) | +|---------|---------|---------------------| +| Proxmox WebUI `:8006` | **DROP** iptables | `https://100.116.138.100:8006/` | +| SSH host `:4422` | **DROP** excepto TS/`lo` | `ssh -p 4422 root@100.116.138.100` | +| pfSense WebGUI `:10443` | **BLOCK** WAN (SPEC-053) | `https://100.116.138.100:18443/` | +| pfSense SSH `:22` | **BLOCK** WAN (SPEC-053) | `ssh pfsense` (ProxyJump big1) | + +--- + +## Como aceder de qualquer sítio + +1. Tailscale no dispositivo +2. Browser: **https://100.116.138.100:8006/** +3. SSH: `ssh -p 4422 root@100.116.138.100` + +--- + +## Implementação (já activa no big1) + +| Item | Local | +|------|--------| +| if-up hook | `/etc/network/if-up.d/zzz-tailscale-admin-hardening` | +| rules persistentes | `/etc/iptables/rules.v4` | +| Script referência | `/root/hardening_big1.sh` | + +Regras: + +```bash +# ACCEPT só Tailscale + localhost +iptables -A INPUT -i tailscale0 -p tcp -m multiport --dports 4422,8006 -j ACCEPT +iptables -A INPUT -i lo -p tcp -m multiport --dports 4422,8006 -j ACCEPT +# DROP resto +iptables -A INPUT -p tcp --dport 4422 -j DROP +iptables -A INPUT -p tcp --dport 8006 -j DROP +``` + +**Não** altera `/etc/network/interfaces` (proibido sem 3 confirmações). + +--- + +## Checklist + +- [ ] Tailscale activo no PC/telemóvel +- [ ] `https://100.116.138.100:8006/` → login PVE +- [ ] Contadores DROP `:8006` sobem (`iptables -L INPUT -n -v | grep 8006`) +- [ ] pfSense: ver `ACCESS-PFSENSE.md` + +--- + +## Referências + +- `ACCESS-BIG1.md` +- `ACCESS-PFSENSE.md` +- Spec 045 — hardening 4422/8006