Operación

Seguridad

Los controles que protegen el sistema, agrupados por dónde actúan: en el formulario, en el borde de red, en el transporte y en los datos.

Resumen

La seguridad de MediNodo no reside en un solo componente, sino en una cadena de controles: anti-abuso en el formulario (Turnstile y rate limit), exposición sin puertos (Cloudflare Tunnel), credenciales técnicas (AWS IAM), supresión de destinatarios (blocklist), integridad de datos (idempotencia) y recuperación (backups cifrados).

Protección del formulario

Anti-abuso

Cloudflare Turnstile

Comprueba que el envío del formulario de interés no provenga de automatización abusiva. La validación se ejecuta en Vercel.

Frecuencia

Rate limit (Upstash)

Limita de forma distribuida los envíos a /api/interest, mitigando abuso por volumen.

Borde de red

Cloudflare protege y enruta los hostnames públicos. Los servicios privados (listmonk y FastAPI) solo se alcanzan a través del Tunnel, sin publicar puertos en Internet.

Diagrama: Exposición controlada mediante Cloudflare TunnelDiagrama: Exposición controlada mediante Cloudflare Tunnel
Exposición controlada mediante Cloudflare Tunnel

Transporte y credenciales

  • SMTP autenticado y cifrado (LOGIN + STARTTLS) entre listmonk y Amazon SES.
  • AWS IAM provee credenciales SMTP técnicas; deben tratarse como secretos y rotarse.
  • El reenvío desde Vercel a api.medinodo.com es autenticado y viaja por el Tunnel.
  • Autenticación de dominio (SPF, DKIM, DMARC) para proteger la reputación e impedir suplantación.

Blocklist y supresión

Cuando llega un hard bounce o un complaint, listmonk registra el evento y coloca al suscriptor en blocklist según los umbrales configurados. Así se evita volver a enviar a una dirección inválida o a una persona que marcó el mensaje como spam, protegiendo la reputación de envío.

La supresión depende del webhook

Si el webhook de SES no es accesible, el evento no se registra y la blocklist no se aplica. Monitorear su disponibilidad es un control de seguridad, no solo de operación.

Datos y privacidad

  • Identificadores opacos (UUID de suscriptor y campaña) viajan en las URLs en lugar de datos personales en claro.
  • Idempotencia en FastAPI evita registros duplicados de interés.
  • Backups cifrados con Restic para PostgreSQL y los uploads de listmonk.
  • Los datos de negocio permanecen en PostgreSQL, aislados del borde de Cloudflare.

Buenas prácticas

  • Encadenar validaciones anti-abuso antes de tocar el backend.
  • Nunca exponer listmonk ni FastAPI fuera del Tunnel en producción.
  • Custodiar y rotar las credenciales SMTP de IAM.
  • Probar la restauración de backups, no solo su creación.

Consideraciones

Seguridad en capas

Ningún control es suficiente por sí solo. La combinación de anti-abuso, borde privado, autenticación de correo y supresión sostiene la reputación y la integridad del sistema.