Los ataques DDoS (ataques distribuidos de denegación de servicio) generalmente se bloquean a nivel de servidor, ¿verdad?
¿Hay alguna forma de bloquearlo a nivel de PHP, o al menos reducirlo?
Si no es así, ¿cuál es la forma más rápida y común de detener los ataques DDoS?
php
security
ddos
denial-of-service
coderama
fuente
fuente
Respuestas:
DDOS es una familia de ataques que abruman los sistemas clave en el centro de datos, que incluyen:
Antes de comenzar a construir su defensa DDOS, considere cuál es el valor en riesgo en el peor de los casos. Para un servicio no crítico y de uso gratuito para una comunidad pequeña, el valor total en riesgo podría ser un cacahuete. Para un sistema de misión crítica pagado, orientado al público para una empresa establecida de miles de millones de dólares, el valor podría ser el valor de la empresa. En este último caso, no debería usar StackExchange :) De todos modos, para defenderse contra DDOS, necesita un enfoque de defensa en profundidad:
Mantenga todos sus sistemas y paquetes de software actualizados con los últimos parches de seguridad , y me refiero a todos ellos:
Asegúrese de tener un buen firewall o dispositivo de seguridad configurado y revisado periódicamente por un experto en seguridad calificado . Las reglas estrictas del firewall son una buena defensa contra muchos ataques simples. También es útil poder administrar el ancho de banda disponible para cada servicio abierto.
Disponga de buenas herramientas de supervisión de red ; esto puede ayudarle a comprender:
El ataque podría ser simplemente un uso intensivo de servicios legítimos del sitio web (por ejemplo, presionar URI 'legales' que ejecutan consultas o insertar / actualizar / eliminar datos): miles o millones de solicitudes provenientes de decenas a millones de direcciones IP diferentes traerán un sitio a su rodillas Alternativamente, algunos servicios pueden ser tan costosos de ejecutar que solo unas pocas solicitudes causan un DOS; piense en un informe realmente costoso. Por lo tanto, necesita un buen monitoreo a nivel de aplicación de lo que está sucediendo:
Restricciones y límites sensibles en su aplicación . Por ejemplo, podría:
Por último, pero no menos importante, redacte un documento de plan de respuesta de DOS y haga que lo revisen internamente todas las partes relevantes: negocios, administración, el equipo de desarrollo de software, 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 lo ayudarán a estar preparado en caso de que ocurra lo peor a las 3 de la mañana de su día libre. El documento debe cubrir (entre otras cosas):
Entonces, aparte del preámbulo, aquí hay algunas respuestas específicas:
En realidad, no: la mayoría de los peores ataques DDOS son de bajo nivel (a nivel de paquete IP) y se manejan mediante reglas de enrutamiento, firewalls y dispositivos de seguridad desarrollados para manejar ataques DDOS.
Algunos ataques DDOS están dirigidos a la propia aplicación y envían solicitudes HTTP y URI válidas. Cuando aumenta la tasa de solicitudes, sus servidores comienzan a tener problemas y tendrá una interrupción del SLA. En este caso, hay cosas que puede hacer a nivel de PHP:
Monitoreo del 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 acciones 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 analizar con herramientas de línea de comandos (grep, sed, awk). Recuerde que un DDOS generará millones de líneas de registro. Es probable que deba dividir sus registros (especialmente con respecto a URI, tiempo, IP y usuario) para averiguar qué está sucediendo y necesitar generar datos como:
Registre la dirección IP de cada solicitud. NO invierta el DNS en esto: irónicamente, el costo de hacer esto hace que un DDOS sea más fácil para los atacantes
Límites de tasa razonables: puede implementar límites sobre la cantidad de solicitudes que una IP o un usuario puede realizar en un período de tiempo determinado. ¿Podría un cliente legítimo realizar 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 es una persona, no un bot DDOS.
Probablemente lo más rápido sea ceder al chantaje, aunque esto podría no ser deseable.
De lo contrario, lo primero que debe hacer es ponerse en contacto con su proveedor de alojamiento y / o CDN y trabajar con ellos (si no lo han contactado ya preguntando qué diablos está pasando ...). Cuando ocurre un DDOS, es probable que afecte colateralmente 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 la información) con el proveedor; estos registros, combinados con sus monitores de red, pueden proporcionar en conjunto suficiente información para bloquear / mitigar el ataque.
Si está esperando un DDOS, es una muy buena idea calificar a su proveedor de alojamiento en el nivel de protección que puede brindar. Deben tener experiencia en DDOS y herramientas para mitigarlo: comprender sus herramientas, procesos y procedimientos de escalamiento. También pregunte qué soporte tiene el proveedor de hospedaje de sus proveedores ascendentes. Estos servicios pueden significar un mayor costo inicial o mensual, pero trátelo como una póliza de seguro.
Mientras está bajo ataque, deberá tomar sus registros y extraerlos; intente averiguar el patrón del ataque. Debería considerar desactivar el acceso anónimo y limitar 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 válidas de sus clientes. Si este es el caso, puede cambiar a un enfoque de lista blanca durante un tiempo. 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
fuente
Según la parte de PHP de la pregunta;
Aunque no confío en PHP para esto, podría implementarse pero debe considerar todas estas posibilidades o más;
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; ?>
fuente
El nivel de php es demasiado tarde en la cadena de solicitudes.
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 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.
Consulte: http://blog.zhuzhaoyuan.com/2012/01/a-mechanism-to-help-write-web-application-firewalls-for-nginx/ para saber cómo luchar contra la colisión con ataques DoS.
También lo olvidé por completo, http://www.cloudflare.com es uno de los mejores firewalls de aplicaciones web gratuitas, tienen planes gratuitos y de pago y te salvarán el culo de DDOS, lo usamos para muchos de nuestros sitios de alto tráfico solo por sus capacidades de almacenamiento en caché . ¡Es asombroso!
fuente
No puede hacer esto en el nivel 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
fuente
DDoS se maneja mejor con dispositivos de red muy costosos y especialmente diseñados. Los hosts generalmente no son buenos para proteger contra 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 de DDoS o un servicio de mitigación de DDoS, pero está lejos de ser ideal y aún lo deja en riesgo de ataque.
fuente
¿Qué tal algo como esto 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; }
fuente
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á en LEMP, puede consultar aquí. http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
Estos son buenos puntos de partida económicos.
fuente
No NO utilizar la protección basada en PHP, es horrible y apenas tienen un impacto en absoluto! Configure su servidor web para limitar las solicitudes, 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, pero no los ataques basados en la capa 7 a menos que esté dispuesto a pagar.
fuente
Los DDOS generalmente se bloquean a nivel de servidor. Habilite la protección DDOS en su nivel de servidor. Consulte las notas siguientes para conocer las protecciones contra DDOS.
Parámetros de configuración del servidor HTTP Apache que pueden ayudar a prevenir problemas de DDOS:
La directiva RequestReadTimeout permite limitar el tiempo que un cliente puede tardar en enviar la solicitud.
Espere 10 segundos para recibir la solicitud, incluidos los encabezados, y 30 segundos para recibir el cuerpo de la solicitud:
RequestReadTimeout header=10 body=30
Espere al menos 10 segundos para recibir el cuerpo de la solicitud. Si el cliente envía datos, aumente el tiempo de espera en 1 segundo por cada 1000 bytes recibidos, sin límite superior para el tiempo de espera (excepto por el límite dado indirectamente por LimitRequestBody):
RequestReadTimeout body=10,MinRate=1000 RequestReadTimeout header=10-30,MinRate=500 RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
La directiva KeepAliveTimeout también puede reducirse en sitios que están sujetos a ataques DoS. Algunos sitios incluso desactivan los keepalives por completo a través de KeepAlive, que por supuesto tiene otros inconvenientes en el rendimiento. Deben comprobarse los valores de varias directivas relacionadas con el tiempo de espera proporcionados por otros módulos.
Las directivas LimitRequestBody, LimitRequestFields, LimitRequestFieldSize, LimitRequestLine y LimitXMLRequestBody deben configurarse cuidadosamente para limitar el consumo de recursos provocado por la entrada del cliente. Ajuste la directiva MaxRequestWorkers para permitir que el servidor maneje el número máximo de conexiones simultáneas sin quedarse sin recursos.
fuente
Pasos anti DDOS :
fuente