Как включить защиту DDoS?

DDoS (распределенные атаки на отказ в обслуживании), как правило, заблокированы на уровне сервера?

Есть ли способ заблокировать его на уровне PHP или, по крайней мере, уменьшить его?

Если нет, то какой самый быстрый и самый распространенный способ остановить атаки DDoS?

Solutions Collecting From Web of "Как включить защиту DDoS?"

DDOS – это семейство атак, которые подавляют ключевые системы в центре данных, включая:

  • Сетевое подключение хостинга к Интернету
  • Внутренняя сеть и маршрутизаторы хостинга
  • Ваш брандмауэр и балансировщики
  • Ваши веб-серверы, серверы приложений и база данных.

Прежде чем приступать к построению защиты от DDOS, подумайте о том, что такое наихудшее значение для риска. Для некритического, бесплатного использования для небольшого сообщества общая стоимость риска может быть арахисами. Для платной, ориентированной на общественность, критически важной системы для создания многомиллиардного бизнеса стоимость может стоить компании. В этом последнем случае вы не должны использовать StackExchange 🙂 Во всяком случае, чтобы защитить от DDOS, вам нужен углубленный подход защиты:

  1. Работайте с вашим центром хостинга, чтобы понять предлагаемые ими услуги, включая фильтрацию IP и портов при их сетевых подключениях к Интернету и услугам брандмауэра, которые они предлагают. Это очень важно: многие сайты вытаскиваются из Интернета хостинговой компанией, так как хостинговая компания занимается разрывом центра обработки данных, вызванным DDOS для одного клиента. Кроме того, во время DDOS-атаки вы будете очень тесно работать с персоналом хостингового центра, поэтому узнайте их номера экстренной помощи и будьте в хороших отношениях с ними 🙂 Они должны иметь возможность блокировать целые международные регионы, полностью блокировать определенные услуги или сеть протоколов и других защитных мер широкого спектра, или, альтернативно, разрешать только белые IP-адреса (в зависимости от вашей бизнес-модели)
  2. В хостинговом центре – используйте сеть доставки контента для распространения (в основном статических) служб, близких к вашим конечным пользователям, и скрыть реальные серверы от архитекторов DDOS. Полный CDN слишком велик для DDOS, чтобы вывести все узлы во всех странах; если DDOS ориентирована на одну страну, по крайней мере другие пользователи все еще в порядке.
  3. Обновляйте все свои системы и пакеты программного обеспечения с последними исправлениями безопасности – и я имею в виду все:

    • Управляемые коммутаторы – они иногда требуют обновления
    • Маршрутизаторы
    • Брандмауэры
    • Балансиры нагрузки
    • Операционные системы
    • Веб-серверы
    • Языки и их библиотеки
  4. Убедитесь, что у вас установлен хороший брандмауэр или устройство безопасности, которое регулярно проверяется квалифицированным специалистом по безопасности . Сильные правила брандмауэра – хорошая защита от многих простых атак. Также полезно иметь возможность управлять пропускной способностью, доступной для каждого открытого сервиса.

  5. У вас есть хорошие инструменты сетевого мониторинга – это поможет вам понять:

    • Что вы атакованы, а не просто под большой нагрузкой
    • Где происходит атака (в число которых могут входить страны, с которыми вы обычно не работаете) и
    • Фактически атака (порты, службы, протоколы, IP-адреса и содержимое пакетов)
  6. Атака может заключаться в простом использовании законных услуг веб-сайта (например, удалении «законных» URI-запросов, выполняющих запросы или вставке / обновлении / удалении данных) – тысячи или миллионы запросов, поступающих от десятков до миллионов различных IP-адресов, приведут сайт к его колени. В качестве альтернативы, некоторые службы могут быть настолько дорогими для запуска, что только несколько запросов вызывают DOS – считайте действительно дорогой отчет. Таким образом, вам нужен хороший мониторинг уровня приложений :

    • Какие службы были вызваны и какие аргументы / данные отправлены (т.е. вход в ваше приложение)
    • Какие пользователи выполняют вызовы и с каких IP-адресов (т. Е. Регистрируются в вашем приложении)
    • Какие запросы и вставки / обновления / удаления БД выполняются
    • Средняя загрузка, загрузка процессора, дисковый ввод / вывод, сетевой трафик на всех компьютерах (и виртуальных машинах) в вашей системе
    • Убедитесь, что вся эта информация легко извлекается и что вы можете сопоставлять журналы с разных компьютеров и служб (т. Е. Обеспечить синхронизацию всех компьютеров с помощью ntp).
  7. Разумные ограничения и ограничения в вашем приложении . Например, вы можете:

    • Используйте функцию QoS в балансировщике нагрузки для отправки всех анонимных сеансов на отдельные серверы приложений в вашем кластере, а вошедшие в систему пользователи используют другой набор. Это предотвращает анонимное DDOS-приложение на уровне приложений, получающее ценные клиенты
    • Использование сильной CAPCHA для защиты анонимных сервисов
    • Таймауты сеанса
    • Имеете лимит сеанса или лимит ставок для определенных типов запросов, таких как отчеты. Убедитесь, что вы можете отключить анонимный доступ, если необходимо
    • Убедитесь, что пользователь имеет ограничение на количество одновременных сеансов (чтобы предотвратить взломанную учетную запись в миллион раз)
    • Имеют разные пользователи приложений баз данных для разных служб (например, использование транзакций и использование отчетов) и используют управление ресурсами базы данных, чтобы предотвратить подавление одного типа веб-запросов всеми остальными
    • По возможности сделайте эти ограничения динамическими или, по крайней мере, настраиваемыми. Таким образом, в то время как вы находитесь под атакой, вы можете установить агрессивные временные ограничения на месте («дросселировать» атаку), например, только один сеанс на пользователя и отсутствие анонимного доступа. Это, конечно, не очень удобно для ваших клиентов, но намного лучше, чем вообще не иметь услуги.
  8. Наконец, но не в последнюю очередь, напишите документ плана реагирования DOS и получите внутреннюю проверку всеми заинтересованными сторонами: бизнес, менеджмент, команда разработчиков SW, команда ИТ и эксперт по безопасности. Процесс написания документа заставит вас и вашу команду продумать проблемы и помочь вам подготовиться, если худшее произойдет в 3 часа ночи в выходной день. Документ должен охватывать (помимо всего прочего):

    • Что находится под угрозой, и стоимость бизнеса
    • Меры, принятые для защиты активов
    • Как обнаружена атака
    • Плановая реакция и процедура эскалации
    • Процессы для поддержания актуальности системы и настоящего документа

Итак, преамбула в сторону, вот некоторые конкретные ответы:

DDOS, как правило, блокируются на уровне сервера, не так ли?

Не совсем – большинство худших DDOS-атак являются низкоуровневыми (на уровне IP-пакетов) и обрабатываются правилами маршрутизации, брандмауэрами и устройствами безопасности, разработанными для обработки DDOS-атак.

Есть ли способ заблокировать его на уровне PHP или, по крайней мере, уменьшить его?

Некоторые атаки DDOS нацелены на само приложение, отправляя действительные URI и HTTP-запросы. Когда скорость запросов возрастает, ваш сервер (ы) начинает бороться, и вы будете иметь отказ от SLA. В этом случае есть вещи, которые вы можете сделать на уровне PHP:

  • Мониторинг уровня приложений. Обеспечьте, чтобы каждый запрос службы / страницы регистрировался таким образом, чтобы вы могли видеть, что происходит (чтобы вы могли предпринять действия для смягчения атаки). Некоторые идеи:

    • Имейте формат журнала, который можно легко загрузить в инструмент журнала (или Excel или аналогичный) и проанализировать с помощью средств командной строки (grep, sed, awk). Помните, что DDOS будет генерировать миллионы строк журнала. Скорее всего, вам потребуется отрезать ваши журналы (особенно в отношении URI, времени, IP и пользователя), чтобы выработать то, что происходит, и нужно генерировать такие данные, как:

      • Доступ к URI
      • То, что URI не удается с высокой скоростью (вероятный индикатор конкретных URI, атакующих атакующих)
      • Какие пользователи обращаются к службе
      • Сколько IP-адресов каждый пользователь обращается к службе из
      • Какие URI являются анонимными пользователями
      • Какие аргументы используются для данной услуги
      • Аудит определенных действий пользователей
    • Запишите IP-адрес каждого запроса. НЕ ОТКРЫВАЙТЕ DNS это – по иронии судьбы, стоимость этого делает DDOS легче для злоумышленников

    • Запишите весь метод URI и HTTP, например «GET http://example.com/path/to/service?arg1=ddos »
    • Запишите идентификатор пользователя, если он есть.
    • Записывать важные HTTP-аргументы
  • Пределы чувствительной скорости: вы можете использовать ограничения на количество запросов, которые данный IP-адрес или Пользователь может сделать за определенный период времени. Может ли законный клиент делать более 10 запросов в секунду? Могут ли анонимные пользователи получить доступ к дорогостоящим отчетам?

  • CAPTCHA для анонимного доступа: Внедрите CAPTCHA для всех анонимных запросов, чтобы убедиться, что пользователь является человеком, а не бот DDOS.

Какой самый быстрый и самый распространенный способ остановить атаки DDOS?

Скорей всего, возможно, придется поддаться шантажу, хотя это может быть нежелательно.

В противном случае, первое, что вам нужно сделать, это связаться с вашим хостингом и / или поставщиком CDN и работать с ними (если они не связались с вами, вы уже спрашиваете, что, черт возьми, происходит …). При возникновении DDOS это, скорее всего, косвенно повлияет на других клиентов хостинг-провайдера, и провайдер может испытывать значительное давление, чтобы закрыть свой сайт просто для защиты своих ресурсов. Будьте готовы делиться своими журналами (любой информацией и информацией) с поставщиком; эти журналы в сочетании с их сетевыми мониторами могут вместе предоставить достаточную информацию для блокировки / смягчения атаки.

Если вы ожидаете DDOS, это очень хорошая идея, чтобы квалифицировать своего хостинг-провайдера на уровень защиты, который они могут предоставить. У них должен быть опыт DDOS и инструменты для его смягчения – понимать их инструменты, процессы и процедуры эскалации. Также спросите о том, какую поддержку у хостинг-провайдера у своих провайдеров. Эти услуги могут означать больше авансовых или ежемесячных затрат, но рассматривают это как страховой полис.

Во время атаки вам нужно будет захватить ваши журналы и добыть их – попробуйте разработать шаблон атаки. Вы должны рассмотреть возможность отключения анонимного доступа и дросселирования служб, находящихся под атакой (т. Е. Снижение лимита скорости приложения для службы).

Если вам повезет, и у вас небольшая фиксированная клиентская база, вы сможете определить действительные IP-адреса клиентов. Если это так, вы можете переключиться на подход белого списка на короткое время. Убедитесь, что все ваши клиенты знают, что это происходит, чтобы они могли звонить, если им нужно получить доступ с нового IP-адреса 🙂


У Дуга МакКлина есть отличный совет по адресу: https://stackoverflow.com/a/1029613/1395668

По части PHP вопроса;

Хотя я не полагаюсь на PHP для этого, он может быть реализован, но должен учитывать все эти возможности или больше;

  1. Атакующий может изменить IP для каждого запроса
  2. Атакующий может передать параметрам (-ам) URI, чтобы целевой сайт не заботился об этих параметрах (параметрах)
  3. Атакующий может перезапустить сеанс до истечения срока действия …

Простое псевдо;

<?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 :

  • Самое главное – сначала определить атаку ddos. Идентификация атаки ddos ​​более рано означает, что ваш сервер будет лучше.
  • Получение лучшей пропускной способности для вашего сервера. Всегда сохраняйте более чем достаточную пропускную способность, необходимую для вашего сервера. Это не будет препятствовать DDOS-атаке, но это займет больше времени. Посредством чего вы получите дополнительное время действовать.
  • Если у вас есть собственный веб-сервер, вы можете защищать по сетевому параметру ограничение скорости вашего маршрутизатора, добавлять фильтры, чтобы отбрасывать пакеты в разные источники атак, время более наполовину открытые соединения более агрессивно. Также установите более низкие пороговые значения падения потока SYN, ICMP и UDP.
  • Если вы не очень хорошо разбираетесь в этих вещах, то быстро и быстро обратитесь к своим хостинг-провайдерам. Они могут стараться изо всех сил предотвращать атаки DDOS.
  • Существуют также специальные службы смягчения DDOS, предоставляемые Cloudflare и многими другими компаниями. Благодаря чему они могут помочь вам предотвратить атаки DDOS. Также многие компании предлагают дешевую защиту ddos ​​и защиту dos .

Для получения дополнительной информации 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, чтобы позволить серверу обрабатывать максимальное количество одновременных подключений без исчерпания ресурсов.