Pregunta ¿Cómo habilitar la protección DDoS?


Los DDoS (ataques distribuidos de denegación de servicio) generalmente se bloquean a nivel de servidor, ¿verdad?

¿Hay alguna manera de bloquearlo en un nivel de PHP, o al menos reducirlo?

Si no, ¿cuál es la forma más rápida y más común de detener los ataques DDoS?


74
2018-01-23 10:54


origen


Respuestas:


DDOS es una familia de ataques que saturan los sistemas clave en el centro de datos, que incluyen:

  • La conexión de red del centro de alojamiento a Internet
  • La red interna y los enrutadores del centro de alojamiento
  • Su firewall y balanceadores de carga
  • Sus servidores web, servidores de aplicaciones y base de datos.

Antes de comenzar a construir su defensa DDOS, considere cuál es el valor en riesgo más desfavorable. Para un servicio no crítico y de uso gratuito para una comunidad pequeña, el valor total en riesgo podría ser cacahuetes. Para un sistema de misión crítica de pago público orientado a público para un negocio establecido de miles de millones de dólares, el valor podría ser el valor de la empresa. En este último caso, no deberías estar usando StackExchange :) De todos modos, para defenderte contra DDOS, necesitas un enfoque defensivo en profundidad:

  1. Trabaja con tu centro de hosting para comprender los servicios que ofrecen, incluidos el IP y el filtrado de puertos en sus conexiones de red a Internet y los servicios de firewall que ofrecen. Esto es fundamental: muchos sitios se extraen de internet por la empresa de hosting como la empresa de alojamiento se ocupa de la interrupción en todo el centro de datos causada por el DDOS a un cliente. Además, durante un ataque DDOS, trabajará muy de cerca con el personal del centro de alojamiento, así que conozca sus números de emergencia y manténgase en buenos términos con ellos :) Deberían poder bloquear regiones internacionales enteras, bloquear completamente servicios o redes específicos protocolos y otras medidas defensivas de amplio espectro, o alternativamente, solo permiten IPs en lista blanca (dependiendo de su modelo de negocio)
  2. Mientras estés en el centro de alojamiento, usa un Red de entrega de contenidos para distribuir servicios (principalmente estáticos) cerca de sus usuarios finales y esconder sus servidores reales de los arquitectos de DDOS. El CDN completo es demasiado grande para que un DDOS elimine todos los nodos en todos los países; si el DDOS está enfocado en un país, al menos otros usuarios todavía están OK.
  3. Mantenga todos sus sistemas y paquetes de software actualizado con los últimos parches de seguridad - y me refiero a todos ellos:

    • Switches administrados - sí, a veces necesitan actualización
    • Enrutadores
    • Firewalls
    • Balanceadores de carga
    • Sistemas operativos
    • Servidores web
    • Idiomas y sus bibliotecas
  4. Asegúrese de tener un buen cortafuegos o dispositivo de seguridad preparar y revisado regularmente por un experto en seguridad calificado. Las reglas fuertes en el firewall son una buena defensa contra muchos ataques simples. También es útil poder administrar el ancho de banda disponible para cada servicio abierto.

  5. Tener buena herramientas de monitoreo de red en su lugar, esto puede ayudarlo a comprender:

    • Que estás bajo ataque en lugar de simplemente estar bajo una carga pesada
    • De dónde viene el ataque (que puede incluir países con los que normalmente no hace negocios) y
    • Qué es realmente el ataque (puertos, servicios, protocolos, IP y contenido de paquetes)
  6. El ataque podría ser simplemente un uso intensivo de los servicios legítimos del sitio web (por ejemplo, accediendo a URIs 'legales' que ejecutan consultas o insertando / actualizando / eliminando datos): miles o millones de solicitudes provenientes de decenas a millones de direcciones IP diferentes traerán un sitio a su sitio rodillas. Alternativamente, algunos servicios pueden ser tan caros de ejecutar que solo unas pocas solicitudes causan un DOS, piense que es un informe realmente costoso. Entonces necesitas buena monitoreo de nivel de aplicación de lo que está pasando:

    • Qué servicios se han invocado y qué argumentos / datos se envían (es decir, iniciar sesión en su aplicación)
    • Qué usuarios están haciendo la invocación y de qué IPs (es decir, iniciando sesión en su aplicación)
    • Qué consultas e inserciones / actualizaciones / elimina la DB está realizando
    • Carga promedio, utilización de CPU, disco de E / S, tráfico de red en todas las computadoras (y VM) en su sistema
    • Asegurarse de que toda esta información se pueda recuperar fácilmente y de que pueda correlacionar registros de diferentes computadoras y servicios (es decir, asegúrese de que todas las computadoras estén sincronizadas en tiempo usando ntp).
  7. Limitaciones y límites sensibles en su aplicación. Por ejemplo, podrías:

    • Use una función de QoS en el equilibrador de carga para enviar todas las sesiones anónimas a servidores de aplicaciones separados en su clúster, mientras que los usuarios que inician sesión usan otro conjunto. Esto evita que un DDOS anónimo a nivel de aplicación saque clientes valiosos
    • Usar un CAPCHA fuerte para proteger servicios anónimos
    • Tiempo de espera de sesión
    • Tener un límite de sesión o límite de frecuencia en ciertos tipos de solicitudes, como informes. Asegúrese de que puede desactivar el acceso anónimo si es necesario
    • Asegúrese de que un usuario tenga un límite en la cantidad de sesiones simultáneas (para evitar que un registro de cuentas pirateado se repita un millón de veces)
    • Tener diferentes usuarios de aplicaciones de bases de datos para diferentes servicios (por ejemplo, uso transaccional vs. uso de informes) y usar la administración de recursos de la base de datos para evitar que un tipo de solicitud web abrume a todos los demás
    • Si es posible, haga estas restricciones dinámicas, o al menos configurables. De esta forma, mientras está bajo ataque, puede establecer límites temporales agresivos ('estrangulando' el ataque), como una sola sesión por usuario y sin acceso anónimo. Esto ciertamente no es bueno para sus clientes, pero es mucho mejor que no tener ningún servicio.
  8. Por último, pero no menos importante, escribe un Plan de respuesta de DOS Documente y obtenga esta revisión interna por parte de todas las partes relevantes: Negocios, Administración, el equipo de desarrollo SW, el equipo de TI y un experto en seguridad. El proceso de redacción del documento hará que usted y su equipo reflexionen sobre los problemas y los ayuden a estar preparados en caso de que ocurra lo peor a las 3 de la mañana en su día libre. El documento debe cubrir (entre otras cosas):

    • Lo que está en riesgo y el costo para el negocio
    • Medidas tomadas para proteger los activos
    • Cómo se detecta un ataque
    • La respuesta planificada y el procedimiento de escalación
    • Procesos para mantener el sistema y este documento actualizado

Entonces, a un lado del preámbulo, aquí hay algunas respuestas específicas:

Los DDOS generalmente están bloqueados en un nivel de servidor, ¿verdad?

En realidad, la mayoría de los peores ataques DDOS son de bajo nivel (a nivel de paquete IP) y son manejados por reglas de enrutamiento, firewalls y dispositivos de seguridad desarrollados para manejar ataques DDOS.

¿Hay alguna manera de bloquearlo en un nivel de PHP, o al menos reducirlo?

Algunos ataques DDOS están dirigidos a la aplicación en sí misma, enviando URI válidos y solicitudes HTTP. Cuando la tasa de solicitudes aumenta, su (s) servidor (es) comienza a tener problemas y tendrá un corte de SLA. En este caso, hay cosas que puedes hacer en el nivel de PHP:

  • Monitoreo de nivel de aplicación: asegúrese de que cada servicio / página registre las solicitudes de manera que pueda ver lo que está sucediendo (para que pueda tomar medidas para mitigar el ataque). Algunas ideas:

    • Tenga un formato de registro que pueda cargar fácilmente en una herramienta de registro (o Excel o similar) y analice con herramientas de línea de comandos (grep, sed, awk). Recuerde que un DDOS generará millones de líneas de registro. Es probable que necesite cortar sus registros (especialmente con respecto a URI, hora, IP y usuario) para averiguar qué está sucediendo y necesita generar datos como:

      • A qué URI se está accediendo
      • ¿Qué URI están fallando a una tasa alta (un indicador probable de los URI específicos a los que atacan los atacantes)?
      • Qué usuarios están accediendo al servicio
      • Cuántas IPs cada usuario accede al servicio desde
      • Qué URI son usuarios anónimos que acceden
      • Qué argumentos se usan para un servicio determinado
      • Auditar acciones de usuarios específicos
    • Registre la dirección IP de cada solicitud. NO invierta DNS esto - irónicamente, el costo de hacer esto hace que un DDoS sea más fácil para los atacantes

    • Registre todo el URI y el método HTTP, por ejemplo, "GET" http://example.com/path/to/service?arg1=ddos"
    • Registre la identificación del usuario si está presente
    • Registre argumentos HTTP importantes
  • Límites de frecuencia razonables: puede implementar límites sobre cuántas solicitudes puede realizar una IP o un usuario determinado en un período de tiempo determinado. ¿Podría un cliente legítimo hacer más de 10 solicitudes por segundo? ¿Pueden los usuarios anónimos acceder a informes costosos?

  • CAPTCHA para acceso anónimo: Implemente un CAPTCHA para todas las solicitudes anónimas para verificar que el usuario sea una persona, no un robot DDOS.

¿Cuál es la forma más rápida y más común de detener los ataques DDOS?

El más rápido es probablemente ceder ante el chantaje, aunque esto podría no ser deseable.

De lo contrario, lo primero que debe hacer es ponerse en contacto con su proveedor de hosting y / o CDN y trabajar con ellos (si no lo han contactado, ya se está preguntando qué demonios está pasando ...). Cuando se produce una DDOS, es probable que afecte de forma colateral a otros clientes del proveedor de alojamiento, y el proveedor puede estar bajo una presión considerable para cerrar su sitio simplemente para proteger sus recursos. Esté preparado para compartir sus registros (toda y cualquier información) con el proveedor; estos registros, combinados con sus monitores de red, juntos pueden proporcionar suficiente información para bloquear / mitigar el ataque.

Si está esperando un DDOS, es una muy buena idea calificar a su proveedor de hosting en el nivel de protección que puede proporcionar. Deben tener experiencia DDOS y herramientas para mitigarlo: comprender sus herramientas, procesos y procedimientos de escalamiento. También pregunte acerca de qué soporte tiene el proveedor de hosting su proveedores upstream. Estos servicios pueden significar un costo más adelantado o mensual, pero trátelo como una póliza de seguro.

Mientras te encuentres bajo ataque, necesitarás agarrar tus registros y explotarlos: prueba y resuelve el patrón del ataque. Debería considerar desactivar el acceso anónimo y restringir los servicios bajo ataque (es decir, disminuir el límite de velocidad de la aplicación para el servicio).

Si tiene suerte y tiene una base de clientes pequeña y fija, es posible que pueda determinar las direcciones IP de sus clientes válidos. Si este es el caso, puede cambiar a un enfoque de lista blanca por un tiempo breve. Asegúrese de que todos sus clientes sepan que esto está sucediendo para que puedan llamar si necesitan acceder desde una nueva IP :)


Doug McClean tiene buenos consejos en: https://stackoverflow.com/a/1029613/1395668


181
2018-01-30 08:00



De acuerdo con la parte PHP de la pregunta;

Aunque no confío en PHP para esto, podría implementarse, pero debe considerar todas estas posibilidades o más;

  1. El atacante puede cambiar el IP para cada solicitud
  2. El atacante puede pasar el (los) parámetro (s) al URI que al sitio objetivo no le importa estos parámetros.
  3. El atacante puede reiniciar la sesión antes del vencimiento ...

Pseudo simple;

<?php
// Assuming session is already started
$uri = md5($_SERVER['REQUEST_URI']);
$exp = 3; // 3 seconds
$hash = $uri .'|'. time();
if (!isset($_SESSION['ddos'])) {
    $_SESSION['ddos'] = $hash;
}

list($_uri, $_exp) = explode('|', $_SESSION['ddos']);
if ($_uri == $uri && time() - $_exp < $exp) {
    header('HTTP/1.1 503 Service Unavailable');
    // die('Easy!');
    die;
}

// Save last request
$_SESSION['ddos'] = $hash;
?>

14
2018-01-30 14:41



El nivel de php es demasiado tarde en la cadena de solicitud.

Poner su servidor apache detrás de un dispositivo de código abierto puede ser una buena opción para usted.

http://tengine.taobao.org/ tiene un poco de documentación y código fuente más módulos destinados a la prevención de DDOS. Es una expansión de nginx, por lo que puede configurarlo fácilmente como un proxy inverso para su instancia de Apache.

Ver: http://blog.zhuzhaoyuan.com/2012/01/a-mechanism-to-help-write-web-application-firewalls-for-nginx/ para saber cómo combatir la colisión tiene ataques DoS.

Totalmente olvidado también, http://www.cloudflare.com es uno de los mejores cortafuegos de aplicaciones web gratuitas, tienen planes gratuitos y de pago, y salvarán tu trasero de DDOS. Lo usamos para muchos de nuestros sitios de alto tráfico solo por sus capacidades de almacenamiento en caché. ¡Es impresionante!


6
2018-02-04 23:23



DDoS se maneja mejor con dispositivos de red muy costosos y especialmente diseñados. Los anfitriones generalmente no son buenos para hacer protección DDoS porque están sujetos a un rendimiento relativamente bajo, agotamiento del estado, ancho de banda limitado, etc. El uso de iptables, mods de apache y servicios similares puede ayudar en algunas situaciones si no tiene acceso al hardware de mitigación DDoS o un servicio de mitigación DDoS, pero está lejos de ser ideal y todavía te deja en riesgo de ataque.


5
2018-01-29 16:30



No puedes hacer esto en el nivel de PHP. DDOS es un tipo de ataque que envía demasiadas solicitudes a su servidor web. Su servidor web rechazará la solicitud antes de llamar a su script PHP.

Si está utilizando Apache, aquí hay algunos consejos de Apache: http://httpd.apache.org/docs/trunk/misc/security_tips.html


4
2018-01-29 05:52



¿Qué tal algo así en el lado de PHP?

//if user does not change IP, then ban the IP when more than 10 requests per second are detected in 1 second
$limitps = 10;
if (!isset($_SESSION['first_request'])){
    $_SESSION['requests'] = 0;
    $_SESSION['first_request'] = $_SERVER['REQUEST_TIME'];
}
$_SESSION['requests']++;
if ($_SESSION['requests']>=10 && strtotime($_SERVER['REQUEST_TIME'])-strtotime($_SESSION['first_request'])<=1){
    //write the IP to a banned_ips.log file and configure your server to retrieve the banned ips from there - now you will be handling this IP outside of PHP
    $_SESSION['banip']==1;
}elseif(strtotime($_SERVER['REQUEST_TIME'])-strtotime($_SESSION['first_request']) > 2){
    $_SESSION['requests'] = 0;
    $_SESSION['first_request'] = $_SERVER['REQUEST_TIME'];
}

if ($_SESSION['banip']==1) {
    header('HTTP/1.1 503 Service Unavailable');
    die;
}

4
2018-02-19 11:24



Hay complementos que puede usar en apache para ddos ​​/ dos. Buen comienzo aquí http://www.debianadmin.com/how-to-protect-apache-against-dosddos-or-brute-force-attacks.html

Si estás en LEMP, puedes consultar aquí. http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html

Estos son buenos puntos de partida económicos.


3
2018-02-05 00:47



Hacer NO usa protección basada en PHP, ¡es horrible y apenas tendrá impacto! Configure su servidor web para las solicitudes de límite de velocidad, por ejemplo en Nginx usando el módulo limit_req (http://nginx.org/en/docs/http/ngx_http_limit_req_module.html)

Aunque, recomendaría usar CloudFlare para combatir la capa 4, sin embargo no ataques basados ​​en la capa 7 a menos que esté dispuesto a pagar.


2
2018-04-24 23:17



Anti DDOS pasos:

  • La primera cosa importante es identificar primero el ataque ddos. Identificar el ataque ddos ​​más temprano significa más para su servidor.
  • Obtener un mejor ancho de banda disponible para su servidor. Mantenga siempre el ancho de banda más que suficiente para su servidor. Esto no evitará el ataque DDOS, pero llevará más tiempo. Por el cual obtendrás algo más de tiempo para actuar.
  • Si posee su propio servidor web, puede defender el parámetro de red limitando la tasa de su enrutador, agregar filtros para colocar paquetes en diferentes fuentes de ataques, agotar el tiempo de conexión medio abierta de forma más agresiva. Establezca también umbrales de caída de inundación inferiores de SYN, ICMP y UDP.
  • Si no tiene mucha información acerca de estas cosas, comuníquese con sus proveedores de hosting rápidamente. Pueden hacer todo lo posible para prevenir los ataques DDOS.
  • También hay un servicio especial de mitigación de DDOS provisto por Cloudflare y muchas otras compañías. Por el cual pueden ayudarte a prevenir los ataques DDOS. También muchas compañías ofrecen barato protección ddos y dos protección.

Para más http://buckydroid.com/ddos-attack-protection-mitigation/ (http://buckydroid.com/ddos-attack-protection-mitigation/)


1
2017-11-29 17:09