Files
qwen3-6-lora/data/raw/sanitized/plans/puedes-leer-el-plan-sprightly-pearl.md
T

2.8 KiB

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

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

# 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.com181.209.153.86
  2. Conexión sin SSL es rechazada: sslmode=disablepg_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)