2012-07-13 12 views
6

Estamos utilizando Tomcat 7 para nuestra aplicación web. Proporcionamos una API basada en XML para que nuestros clientes puedan comunicarse con nuestro servidor de una máquina a otra (no se necesita un navegador web). Las solicitudes son procesadas por un servlet.Tomcat y protección contra inundaciones

Necesitamos evitar que los usuarios envíen demasiadas solicitudes seguidas. Algunos de los servicios que brindamos involucran encuestas para obtener resultados y los usuarios pueden hacer solicitudes en un bucle sin pausas, haciendo docenas de solicitudes por segundo para nada.

¿Cómo podemos protegernos de la inundación de solicitudes inútiles? ¿Hay una manera simple de bloquear solicitudes en el nivel de entrada del servlet cuando hay demasiadas solicitudes que se originan desde la misma IP? ¿Hay algo incorporado en Tomcat para tratar este problema?

Respuesta

4

Suponiendo que está utilizando un proxy inverso apache delante de tomcat (si no es así debería ser), use mod_cband en la capa de apache.

2

Puede codificar el suyo.

Los puntos de partida para ver esto serían la API Servlet, en particular la interfaz Filter y el método getRemoteHost() de la interfaz SerlvetRequest.

Debería ser fácil escribir una implementación de filtro que almacena un recuento de solicitudes de cada host y toma medidas si se excede un límite.

+1

Hablando de esto, aquí hay algo que reuní para este propósito: http://code.google.com/p/zxing/source/browse/trunk/zxingorg/src/com/google/zxing/web/DoSFilter. java Es bastante básico, pero puede ser suficiente para este propósito. –

0

Spring Security tiene muchas de las características de httpd de Apache mod_security si desea una solución solo de Java.

0

Apache mod_evasive o mod_security podría cubrir su necesidad aquí. Puede considerar Cloudflare para ataques más complejos que requieren protección de hardware.

Cuestiones relacionadas