1 puntos por GN⁺ 2024-03-31 | 1 comentarios | Compartir por WhatsApp

Estamos recibiendo un ataque DDoS, pero no estamos haciendo nada

  • Desde hace varias semanas, alguien ha estado intentando lanzar un ataque DDoS.
  • Están inundando el servidor con millones de solicitudes para intentar descargar el archivo de configuración millones de veces.
  • Solo en los últimos 5 días, han intentado descargarlo más de 800,000 veces, y el archivo de configuración pesa alrededor de 200MB por descarga.
  • La mayor parte del tráfico proviene de la UE, especialmente de Alemania y el Reino Unido.
  • El ataque sigue en curso incluso en este momento, mientras se escribe esta entrada del blog.

Lo que estamos haciendo en esta situación urgente

  • No bloqueamos las direcciones IP del atacante.
  • Usamos Cloudflare, pero no activamos el modo "Under Attack".
  • Durante el ataque, la CPU del servidor permanece casi inactiva la mayor parte del tiempo.
  • En general, no estamos haciendo casi nada.

¿Por qué?

  • El servicio puede manejar decenas de miles de millones de solicitudes al mes sin problemas y sin un costo elevado.
  • Tenemos alrededor de 8 servicios API y bases de datos, y pueden procesar decenas de miles de millones de solicitudes al mes incluso sin caché.
  • Tenemos Cloudflare y ancho de banda ilimitado.

¿Cómo es posible?

  • El diseño de la app TablePlus es simple, y esta filosofía también se aplica a los servicios backend, que se mantienen al mínimo.
  • No usamos servicios de terceros como Vercel o Netlify. En su lugar, usamos un servidor web sin límites.
  • En el pasado, un VPS/procesador débil hacía que el monolito fuera un cuello de botella, pero hoy en día un VPS potente puede manejar decenas de miles de millones de solicitudes al mes en una sola instancia.
  • Por eso construimos un servicio monolítico para cada app. Es fácil de desplegar y mantener.

Hablemos del monolito

  • Hay una tendencia a volver todo más complejo, pero eso no es un problema hasta que realmente exista presión o restricciones.
  • Elegimos el monolito porque odiamos la complejidad. Integramos en un solo servicio todo lo que la app necesita.
  • El despliegue es simple. Solo se necesita un archivo de configuración, compilación y despliegue.
  • Con menos dependencias, es más fácil depurar e identificar cuellos de botella.

Un solo framework web en Go o Rust puede manejar decenas de miles de millones de solicitudes al mes si está bien implementado

  • Elegimos un framework de alto rendimiento.
  • Indexamos la base de datos para reducir el tiempo de recuperación a medida que crece el conjunto de datos.
  • Separamos la base de datos principal de la base de datos de logs/uso para evitar que los problemas de rendimiento afecten al negocio principal.
  • Usamos un proxy inverso potente como Nginx para procesar y distribuir las solicitudes hacia la API central.
  • Ponemos todo detrás de Cloudflare y lo configuramos correctamente.
  • Usamos un CDN con protección DDoS.
  • No alojamos archivos grandes para descarga en el VPS sin CDN ni caché.

Hablemos del despliegue

  • En TablePlus, simplificamos el proceso de despliegue tanto como sea posible.
  • No usamos Docker, Kubernetes ni contenedores, y no hace falta configurar entornos.
  • Usamos binarios. Los binarios se pueden copiar y ejecutar como procesos en un servidor Linux.
  • Elegimos Go y Rust. Son lenguajes de alto rendimiento y pueden generar archivos binarios para el despliegue.

Actualización

  • Vercel se puso en contacto y dijo que tiene funciones para proteger el sitio en situaciones como esta.
  • A través del control de gasto, se puede establecer un límite de gasto, y también tienen un modo de desafío contra ataques similar al modo "Under Attack" de CF.

La opinión de GN⁺

  • Este artículo resalta la importancia de una infraestructura sólida y una estrategia de despliegue simplificada para mantener un servicio estable incluso frente a ataques DDoS.
  • La arquitectura monolítica demuestra ventajas para reducir la complejidad, simplificar el despliegue y favorecer la optimización del rendimiento.
  • El uso efectivo de servicios en la nube y CDN para lograr resiliencia ante ataques DDoS puede ser un buen ejemplo para otras empresas.
  • Este enfoque también ofrece ideas para construir infraestructura rentable, especialmente para startups en etapa temprana o pequeñas y medianas empresas.
  • Sin embargo, un enfoque monolítico no es adecuado para todos los sistemas o aplicaciones, por lo que es importante elegir una arquitectura acorde con las necesidades y circunstancias de cada caso.

1 comentarios

 
GN⁺ 2024-03-31
Opiniones de Hacker News
  • Resumen del primer comentario:

    • El autor del comentario cree que presumir del rendimiento del sitio web es exagerado.
    • "1.000 millones de solicitudes al mes" equivalen apenas a unos cientos de solicitudes por segundo, lo cual es algo menor y no puede considerarse un ataque DDoS.
    • Como el sitio está detrás de un CDN (Cloudflare), no parece que hayan hecho nada especial en términos de rendimiento.
    • Que un archivo de 200 MB se almacene en caché y se sirva a través del CDN es lo normal, y presumir de eso parece un diseño inapropiado.
  • Resumen del segundo comentario:

    • 4 TB de tráfico al mes difícilmente pueden considerarse un ataque DDoS.
    • 6 millones de solicitudes al mes equivalen apenas a 2 solicitudes por segundo, y a esa escala no hay problema en operar un servicio monolítico.
    • Se asume que Cloudflare manejaría la mayoría de las solicitudes mediante caché a nivel de CDN.
  • Resumen del tercer comentario:

    • El sitio es una simple página estática de marketing, no tiene foro de discusión y la retroalimentación se gestiona mediante issues de GitHub.
    • Es extraño presumir que una implementación sencilla puede manejar millones de descargas diarias de archivos estáticos.
    • Cloudflare está haciendo todo el trabajo de mitigación y, en realidad, el tráfico podría ser tan bajo que quizá ni siquiera haga falta.
  • Resumen del cuarto comentario:

    • El tráfico adicional descrito parece ser un "abuso irrelevante del servicio" y difícilmente puede verse como un ataque DDoS real.
    • Este tipo de abuso puede ignorarse mientras no cause costos ni agotamiento de recursos.
    • Es común la historia de que gran parte de la infraestructura con escalado automático no realiza trabajo útil, por lo que conviene vigilar el tráfico.
    • Hay quejas sobre el logging; si el almacenamiento de logs es barato y abundante no sería un problema, pero sería bueno clasificar automáticamente el tráfico abusivo y suprimir su tratamiento rutinario.
  • Resumen del quinto comentario:

    • 50 millones de solicitudes mensuales originadas en el Reino Unido son un volumen que podría generar un solo script en ejecución.
    • El autor espera que un servidor en Go pueda manejar 250 veces más solicitudes por segundo incluso sin optimización.
    • El consejo en sí no es malo, pero sus cifras no sirven como evidencia de ese consejo.
  • Resumen del sexto comentario:

    • Distribuir binarios puede ser preferible a usar Docker, pero hay preocupaciones de seguridad sobre el host que ejecuta esos binarios.
    • Un servicio monolítico alojado en un solo VPS es barato y está bien, pero si el hardware falla puede producirse un tiempo de inactividad considerable.
    • Al integrar todo en un solo servicio, se puede perder la defensa en profundidad, lo que podría permitir acceso al almacén de datos si surge un problema de seguridad.
  • Resumen del séptimo comentario:

    • "1.000 millones de solicitudes al mes" es un nivel que puede manejar un solo servidor, y un solo script defectuoso podría generar ese volumen de tráfico.
  • Resumen del octavo comentario:

    • Se cuestiona si decenas de millones de solicitudes al mes realmente se consideran un gran ataque DDoS.
  • Resumen del noveno comentario:

    • Construir un servicio monolítico por cada app facilita el despliegue y el mantenimiento.
    • Basta con desplegar solo el archivo binario, sin Docker, Kubernetes, dependencias ni entorno de ejecución.
  • Resumen del décimo comentario:

    • Al leer el título esperaba algo más grande, pero que esté detrás de Cloudflare es un factor importante.
    • Dependiendo de la distribución del tráfico, podría funcionar bien en un VPS incluso sin Cloudflare.
    • Los ataques DDoS layer7 desde Rusia son de una escala tan grande que incluso los principales proveedores fallan por problemas de capacidad.