Fase 2: 04_sanitize.py - scrubbing de secretos de skills/agentes/plans (10 secretos unicos, gate en verde)
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
# Plan: Conectar PostgreSQL de Luminarrh de forma segura y encriptada
|
||||
|
||||
## Contexto
|
||||
|
||||
Tienes una base de datos PostgreSQL (imagen `postgres:18`) corriendo en Docker en tu Synology NAS, contenida en `luminarrh/`.
|
||||
|
||||
**Estado inicial:**
|
||||
- Sin encriptación SSL configurada
|
||||
- Puerto 5436 expuesto sin restricción de hosts
|
||||
- Sin control de acceso por IP
|
||||
|
||||
**Estado actual (implementado):**
|
||||
- SSL/TLS obligatorio para todas las conexiones externas
|
||||
- Autenticación `scram-sha256` (hash fuerte)
|
||||
- TLS 1.2 mínimo
|
||||
- Cualquier IP puede conectar desde internet, pero **solo con SSL + credenciales**
|
||||
- Red local `<<INTERNAL_IP_2>>/24` también con SSL obligatorio
|
||||
|
||||
---
|
||||
|
||||
## Archivos implementados
|
||||
|
||||
### 1. `luminarrh/postgresql.conf` — SSL activado
|
||||
|
||||
```conf
|
||||
listen_addresses = '*'
|
||||
max_connections = 500
|
||||
ssl = on
|
||||
ssl_cert_file = '/etc/postgresql/ssl/server.crt'
|
||||
ssl_key_file = '/etc/postgresql/ssl/server.key'
|
||||
ssl_min_protocol_version = 'TLSv1.2'
|
||||
shared_buffers = 2GB
|
||||
maintenance_work_mem = 128MB
|
||||
timezone = 'America/Guatemala'
|
||||
log_timezone = 'America/Guatemala'
|
||||
```
|
||||
|
||||
### 2. `luminarrh/pg_hba.conf` — Control de acceso
|
||||
|
||||
```conf
|
||||
# Conexión local (dentro del contenedor) — sin SSL requerido
|
||||
local all all peer
|
||||
|
||||
# Red local <<INTERNAL_IP_2>>/24 — SSL obligatorio
|
||||
hostssl all all <<INTERNAL_IP_2>>/24 scram-sha256
|
||||
|
||||
# Internet — SSL obligatorio para cualquier IP
|
||||
hostssl all all 0.0.0.0/0 scram-sha256
|
||||
|
||||
# Rechazar todo lo demás sin SSL
|
||||
host all all 0.0.0.0/0 reject
|
||||
```
|
||||
|
||||
Clave: `hostssl` exige SSL. `host` sin SSL es rechazado. No hay reglas `trust`.
|
||||
|
||||
### 3. `luminarrh/docker-compose.yaml` — Mounts SSL
|
||||
|
||||
- Puerto solo TCP (`5436:5432/tcp`) — sin UDP
|
||||
- Mount del `pg_hba.conf` explícito
|
||||
- Mount del SSL como `ro` (solo lectura)
|
||||
- Command explícito para config_file y hba_file
|
||||
|
||||
### 4. `luminarrh/ssl/server.crt` + `server.key`
|
||||
|
||||
Certificado autofirmado para `senabed.p-lao.com`, generado con OpenSSL RSA 2048.
|
||||
|
||||
### 5. `luminarrh/README.md`
|
||||
|
||||
Guía completa de conexión con SSL para Linux, macOS, Windows, Python (psycopg2), Node.js (pg).
|
||||
|
||||
---
|
||||
|
||||
## Verificación
|
||||
|
||||
1. **DNS**: `senabed.p-lao.com` → `181.209.153.86` ✅
|
||||
2. **Conexión sin SSL es rechazada**: `sslmode=disable` → `pg_hba.conf rejects connection` ✅
|
||||
3. **Conexión con SSL**: requiere `sslmode=require` + certificado + contraseña ✅
|
||||
4. **Cualquier IP con SSL puede conectar** ✅
|
||||
5. **Red local `<<INTERNAL_IP_2>>/24` con SSL puede conectar** ✅
|
||||
|
||||
---
|
||||
|
||||
## Notas de seguridad
|
||||
|
||||
| Aspecto | Estado |
|
||||
|---------|--------|
|
||||
| SSL/TLS obligatorio | ✅ hostssl + TLS 1.2 mínimo |
|
||||
| Autenticación | ✅ scram-sha256 |
|
||||
| Control de acceso | ✅ hostssl + reject |
|
||||
| Contraseña | ⚠️ `<<DB_PASSWORD_1>>` (débil) |
|
||||
| Certificado | ⚠️ Autofirmado (no verifica identidad) |
|
||||
Reference in New Issue
Block a user