Document private Tailscale admin for pfSense and Proxmox.

SPEC-053 WAN lock for SSH/WebGUI; SPEC-054 mirrors the same model for PVE :8006.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Roger 2026-09-11 17:22:15 +02:00
parent 22f475d5be
commit cf2c0fba23
2 changed files with 171 additions and 0 deletions

View file

@ -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 <VMID> -- <comando>
pct exec <CTID> -- <comando>
```
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).

View file

@ -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