DDoS (распределенные атаки на отказ в обслуживании), как правило, заблокированы на уровне сервера?
Есть ли способ заблокировать его на уровне PHP или, по крайней мере, уменьшить его?
Если нет, то какой самый быстрый и самый распространенный способ остановить атаки DDoS?
DDOS – это семейство атак, которые подавляют ключевые системы в центре данных, включая:
Прежде чем приступать к построению защиты от DDOS, подумайте о том, что такое наихудшее значение для риска. Для некритического, бесплатного использования для небольшого сообщества общая стоимость риска может быть арахисами. Для платной, ориентированной на общественность, критически важной системы для создания многомиллиардного бизнеса стоимость может стоить компании. В этом последнем случае вы не должны использовать StackExchange 🙂 Во всяком случае, чтобы защитить от DDOS, вам нужен углубленный подход защиты:
Обновляйте все свои системы и пакеты программного обеспечения с последними исправлениями безопасности – и я имею в виду все:
Убедитесь, что у вас установлен хороший брандмауэр или устройство безопасности, которое регулярно проверяется квалифицированным специалистом по безопасности . Сильные правила брандмауэра – хорошая защита от многих простых атак. Также полезно иметь возможность управлять пропускной способностью, доступной для каждого открытого сервиса.
У вас есть хорошие инструменты сетевого мониторинга – это поможет вам понять:
Атака может заключаться в простом использовании законных услуг веб-сайта (например, удалении «законных» URI-запросов, выполняющих запросы или вставке / обновлении / удалении данных) – тысячи или миллионы запросов, поступающих от десятков до миллионов различных IP-адресов, приведут сайт к его колени. В качестве альтернативы, некоторые службы могут быть настолько дорогими для запуска, что только несколько запросов вызывают DOS – считайте действительно дорогой отчет. Таким образом, вам нужен хороший мониторинг уровня приложений :
Разумные ограничения и ограничения в вашем приложении . Например, вы можете:
Наконец, но не в последнюю очередь, напишите документ плана реагирования DOS и получите внутреннюю проверку всеми заинтересованными сторонами: бизнес, менеджмент, команда разработчиков SW, команда ИТ и эксперт по безопасности. Процесс написания документа заставит вас и вашу команду продумать проблемы и помочь вам подготовиться, если худшее произойдет в 3 часа ночи в выходной день. Документ должен охватывать (помимо всего прочего):
Итак, преамбула в сторону, вот некоторые конкретные ответы:
DDOS, как правило, блокируются на уровне сервера, не так ли?
Не совсем – большинство худших DDOS-атак являются низкоуровневыми (на уровне IP-пакетов) и обрабатываются правилами маршрутизации, брандмауэрами и устройствами безопасности, разработанными для обработки DDOS-атак.
Есть ли способ заблокировать его на уровне PHP или, по крайней мере, уменьшить его?
Некоторые атаки DDOS нацелены на само приложение, отправляя действительные URI и HTTP-запросы. Когда скорость запросов возрастает, ваш сервер (ы) начинает бороться, и вы будете иметь отказ от SLA. В этом случае есть вещи, которые вы можете сделать на уровне PHP:
Мониторинг уровня приложений. Обеспечьте, чтобы каждый запрос службы / страницы регистрировался таким образом, чтобы вы могли видеть, что происходит (чтобы вы могли предпринять действия для смягчения атаки). Некоторые идеи:
Имейте формат журнала, который можно легко загрузить в инструмент журнала (или Excel или аналогичный) и проанализировать с помощью средств командной строки (grep, sed, awk). Помните, что DDOS будет генерировать миллионы строк журнала. Скорее всего, вам потребуется отрезать ваши журналы (особенно в отношении URI, времени, IP и пользователя), чтобы выработать то, что происходит, и нужно генерировать такие данные, как:
Запишите IP-адрес каждого запроса. НЕ ОТКРЫВАЙТЕ DNS это – по иронии судьбы, стоимость этого делает DDOS легче для злоумышленников
Пределы чувствительной скорости: вы можете использовать ограничения на количество запросов, которые данный IP-адрес или Пользователь может сделать за определенный период времени. Может ли законный клиент делать более 10 запросов в секунду? Могут ли анонимные пользователи получить доступ к дорогостоящим отчетам?
CAPTCHA для анонимного доступа: Внедрите CAPTCHA для всех анонимных запросов, чтобы убедиться, что пользователь является человеком, а не бот DDOS.
Какой самый быстрый и самый распространенный способ остановить атаки DDOS?
Скорей всего, возможно, придется поддаться шантажу, хотя это может быть нежелательно.
В противном случае, первое, что вам нужно сделать, это связаться с вашим хостингом и / или поставщиком CDN и работать с ними (если они не связались с вами, вы уже спрашиваете, что, черт возьми, происходит …). При возникновении DDOS это, скорее всего, косвенно повлияет на других клиентов хостинг-провайдера, и провайдер может испытывать значительное давление, чтобы закрыть свой сайт просто для защиты своих ресурсов. Будьте готовы делиться своими журналами (любой информацией и информацией) с поставщиком; эти журналы в сочетании с их сетевыми мониторами могут вместе предоставить достаточную информацию для блокировки / смягчения атаки.
Если вы ожидаете DDOS, это очень хорошая идея, чтобы квалифицировать своего хостинг-провайдера на уровень защиты, который они могут предоставить. У них должен быть опыт DDOS и инструменты для его смягчения – понимать их инструменты, процессы и процедуры эскалации. Также спросите о том, какую поддержку у хостинг-провайдера у своих провайдеров. Эти услуги могут означать больше авансовых или ежемесячных затрат, но рассматривают это как страховой полис.
Во время атаки вам нужно будет захватить ваши журналы и добыть их – попробуйте разработать шаблон атаки. Вы должны рассмотреть возможность отключения анонимного доступа и дросселирования служб, находящихся под атакой (т. Е. Снижение лимита скорости приложения для службы).
Если вам повезет, и у вас небольшая фиксированная клиентская база, вы сможете определить действительные IP-адреса клиентов. Если это так, вы можете переключиться на подход белого списка на короткое время. Убедитесь, что все ваши клиенты знают, что это происходит, чтобы они могли звонить, если им нужно получить доступ с нового IP-адреса 🙂
У Дуга МакКлина есть отличный совет по адресу: https://stackoverflow.com/a/1029613/1395668
По части PHP вопроса;
Хотя я не полагаюсь на PHP для этого, он может быть реализован, но должен учитывать все эти возможности или больше;
Простое псевдо;
<?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; ?>
Уровень php слишком запоздал в цепочке запросов.
Помещение вашего сервера apache за устройством с открытым исходным кодом может быть хорошим вариантом для вас.
http://tengine.taobao.org/ имеет некоторую документацию и исходный код больше модулей, предназначенных для предотвращения DDOS. Это расширение nginx, поэтому вы можете легко настроить его как обратный прокси-сервер для вашего экземпляра apache.
Смотрите: http://blog.zhuzhaoyuan.com/2012/01/a-mechanism-to-help-write-web-application-firewalls-for-nginx/ для того, как бороться с столкновениями, есть атаки DoS.
Полностью забыл также, что http://www.cloudflare.com является одним из лучших брандмауэров веб-приложений, у них есть бесплатные и платные планы и сэкономит вам задницу от DDOS, мы используем его для многих наших сайтов с высоким трафиком только для его возможностей кеширования , Это просто!
DDoS лучше всего обрабатывать очень дорогими, специально разработанными сетевыми устройствами. Хозяева обычно не умеют защищать DDoS, потому что они подвержены относительно низкой производительности, усталости, ограниченной пропускной способности и т. Д. Использование iptables, модов apache и подобных сервисов может помочь в некоторых ситуациях, если у вас нет доступа к оборудованию для смягчения DDoS или служба смягчения DDoS, но она далека от идеала и все еще оставляет вас под угрозой нападения.
Вы не можете сделать это на уровне PHP. DDOS – это своего рода атака, которая посылает слишком много запросов на ваш веб-сервер. Ваш веб-сервер отклонит запрос, прежде чем он вызовет ваш PHP-скрипт.
Если вы используете Apache, вот несколько советов от Apache: http://httpd.apache.org/docs/trunk/misc/security_tips.html
Есть плагины, которые вы можете использовать в apache для ddos / dos. Хорошее начало здесь http://www.debianadmin.com/how-to-protect-apache-against-dosddos-or-brute-force-attacks.html
Если вы на LEMP, вы можете проверить здесь. http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
Это хорошие недорогие отправные точки.
Как насчет чего-то подобного на стороне 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; }
НЕ используйте защиту на основе PHP, это ужасно и вряд ли повлияет на вас! Настройте ваш веб-сервер на запросы ограничения скорости, например, в Nginx, используя модуль limit_req ( http://nginx.org/en/docs/http/ngx_http_limit_req_module.html )
Хотя, я бы рекомендовал использовать CloudFlare для борьбы с уровнями 4, но не с уровнями на основе уровня 7, если вы не готовы платить.
Анти DDOS :
Для получения дополнительной информации http://buckydroid.com/ddos-attack-protection-mitigation/ ( http://buckydroid.com/ddos-attack-protection-mitigation/ )
DDOS обычно блокируются на уровне сервера. Включите защиту DDOS на уровне сервера. Пожалуйста, ознакомьтесь с приведенными ниже примечаниями для защиты DDOS.
Параметры конфигурации HTTP-сервера Apache, которые могут помочь предотвратить проблемы с DDOS:
Директива RequestReadTimeout позволяет ограничить время, которое клиент может предпринять для отправки запроса.
Разрешить 10 секунд для получения запроса, включая заголовки, и 30 секунд для получения тела запроса:
RequestReadTimeout header=10 body=30
Разрешите получать не менее 10 секунд тела запроса. Если клиент отправляет данные, увеличьте время ожидания на 1 секунду для каждого получаемого 1000 байтов, без верхнего предела для таймаута (за исключением ограничения, указанного косвенно LimitRequestBody):
RequestReadTimeout body=10,MinRate=1000 RequestReadTimeout header=10-30,MinRate=500 RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
Директива KeepAliveTimeout также может быть снижена на сайтах, подверженных DoS-атакам. Некоторые сайты даже полностью отключают keepalives через KeepAlive, что, конечно же, имеет другие недостатки в производительности. Необходимо проверить значения различных директив, связанных с таймаутом, предоставленных другими модулями.
Директивы LimitRequestBody, LimitRequestFields, LimitRequestFieldSize, LimitRequestLine и LimitXMLRequestBody должны быть тщательно настроены для ограничения потребления ресурсов, вызванного вводом клиента. Настройте директиву MaxRequestWorkers, чтобы позволить серверу обрабатывать максимальное количество одновременных подключений без исчерпания ресурсов.