Cómo proteger la API del uso malicioso

4

Estamos desarrollando un servicio de portal comunitario utilizando Java-Spring y Angular UI. También vamos a tener una aplicación para Android pronto. Nuestro back-end expone muchos servicios a través de la API REST. Hay un par de servicios que permiten la publicación anónima y la creación de solicitudes de servicio.

Aquí están nuestras preguntas:

¿Cómo podemos proteger la API de los ataques tipo DDoS? ¿Podemos hacer IP en la lista blanca o poner un límite a las solicitudes por minuto para cierto conjunto de API? ¿Cómo podemos registrar tales solicitudes maliciosas? Gracias por adelantado. Saludos cordiales.

(Consulte esta pregunta en SF en - enlace )

    
pregunta navaltiger 28.07.2016 - 15:49
fuente

1 respuesta

1
  1. La API debe ser segura, así que no intentes hacer concesiones aquí. No será bueno ;-) Sin embargo, no intercambies El rendimiento tampoco debe ser muy rápido, por lo que será estable. Utilice cookies que son muy buenas (hay mucha información aquí).

  2. Además de las precauciones de seguridad habituales (cookies, etc.), encontré lo siguiente que se debe:

    • Buenos límites en la cantidad de solicitudes simultáneas a Tomcat (o lo que sea que use, normalmente se encuentra en la directiva del conector web): puede realizar pruebas de carga para que el servidor no se sobrecargue con carga completa, por lo que los servidores no colapsan bajo carga completa, pero también se utilizaron bien, por ejemplo con ab -c <number of connections> . Y luego, frente a estos, los Tomcats colocan el equilibrio de la carga para distribuir el tráfico y el escudo de otros ataques como la inundación de paquetes. Load Balancer debería haber optimizado la pila TCP / IP para tales escenarios (ver más abajo).
    • Servidores geográficamente dispersos en la nube, por lo tanto, con el equilibrio de carga GSLB y el autoescalado
    • Intenta utilizar la memoria caché en RAM tanto como puedas
    • Use bases de datos escalables, como DynamoDB en AWS, pero una buena instancia de MySQL también servirá, para que puedan escalar con su carga
    • Asegúrese de que cualquier función API única no sea lenta, esto se puede hacer en pruebas unitarias (de modo que con cada ejecución de prueba puede ver lo que no hay un objetivo potencial para DDoS), haciendo que todas las llamadas API sean muy rápidas, básicamente hace que los problemas DDoS sean muy rápidos pequeño y su sitio web muy agradable.

Las cosas anteriores en negrita son lo que normalmente hago después de que los desarrolladores hacen sus cosas básicamente para hacerlas más rápidas y resistentes, y esos son mis 4 puntos de oro :-)

Por mi experiencia, se necesitan 20 GBps de red y 4-6 32 servidores centrales para mitigar cualquier pico como ese a los Tomcats de todos modos. Simplemente no sucede más que eso y los recursos actuales son baratos para lidiar con eso, e incluso bajo demanda. El problema es que cuando algo es lento o no es escalable como las bases de datos, los recursos son demasiado altos y ese es el problema.

Para los desarrolladores que hacen la API, el punto principal es utilizar la memoria caché en la RAM. El resto es infraestructura / servidor con Tomcat build. He visto a algunos desarrolladores hacer cosas así y ese es un enfoque bueno y simple. Entonces, en lugar de verificar cada vez que Cookie con la base de datos, manténgalo en la memoria RAM, use sesiones rápidas, etc. Lo mismo para otras cosas. Como un encuestador a la base de datos que carga datos en la RAM cada minuto y otros subprocesos lo utilizan sin tocar nunca la base de datos. También he visto este enfoque.

En cuanto a la infraestructura, es bueno tener Load Balancer delante de Tomcats y, si no es Cloud one, puede hacer lo siguiente.

  1. Configure el equilibrador de carga normal como HAProxy y ponga límites para cada servidor, por lo que en el caso de un gran número de solicitudes HTTP reales, puede procesarlas y enviarlas a Tomcats, otro software podría ser capaz de eliminar o filtrar la base de solicitudes erróneas en las reglas configuradas: puede probar Varnish Cache, que es Cache, pero para Load Balancer con filtro también es excelente y puede programar su propia lógica.

  2. Ajuste la pila TCP / IP del equilibrador de carga para que sea resistente a una gran cantidad de solicitudes o paquetes SYN. Así que el siguiente ajuste es efectivo:

    • No hay IPTABLES en él (solo filtra las cosas en el interruptor)
    • Deshabilitar SynCookies net.ipv4.tcp_syncookies = 0
    • Prueba con net.ipv4.tcp_tw_recycle = 0
    • y net.ipv4.tcp_tw_reuse = 0

Los dos últimos pueden ayudar a lograr una gran cantidad de nuevas conexiones entrantes por segundo.

    
respondido por el Aria 28.07.2016 - 22:18
fuente

Lea otras preguntas en las etiquetas