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

86

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

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

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

кодерама
источник
Из-за отсутствия ничего лучше, вот список модулей Apache, которые потенциально могут помочь. Однако он кажется не очень богатым, и два проекта из четырех (по запросу «dos») кажутся указывающими в никуда.
Audrius Meskauskas
Что-то вроде этого? mod-antiloris.sourceforge.net
K-Gun
DDOS считается успешным, когда система больше не может обрабатывать все запросы, которые ей бросает атака. Если вы добавляете в свое приложение код, который проверяет каждый запрос на предмет «Является ли это DDOS-атакой», то этот код на самом деле приносит больше вреда, чем пользы, потому что он просто требует немного больше ресурсов для каждого запроса. Это будет работать только в очень жесткой среде, где анонимный запрос в любом случае не разрешен.
Hugo Delsing

Ответы:

188

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 и получите его на внутреннюю проверку всеми соответствующими сторонами: бизнесом, менеджментом, командой разработчиков ПО, ИТ-командой и экспертом по безопасности. Процесс написания документа заставит вас и вашу команду обдумать проблемы и поможет вам подготовиться, если худшее случится в 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

Эндрю Алкок
источник
20

Согласно части вопроса 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;
?>
K-Gun
источник
8

Уровень 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, мы используем его для многих наших сайтов с высоким трафиком только из-за его возможностей кэширования . Это потрясающе!

j_mcnally
источник
5

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

Если вы используете Apache, вот несколько советов от Apache: http://httpd.apache.org/docs/trunk/misc/security_tips.html

ndlinh
источник
5

DDoS лучше всего справляется с очень дорогими специализированными сетевыми устройствами. Хосты, как правило, плохо справляются с защитой от DDoS-атак, поскольку они обладают относительно низкой производительностью, исчерпанием состояния, ограниченной пропускной способностью и т. Д. Использование iptables, модов apache и подобных служб может помочь в некоторых ситуациях, если у вас нет доступа к оборудованию для защиты от DDoS-атак. или службу защиты от DDoS-атак, но она далека от идеала и по-прежнему подвергает вас риску атаки.

Райан
источник
8
Нам нужно решение, а если нет идеального решения, нужны частичные решения. Никому не нужны советы типа «ты просто не можешь этого сделать».
Audrius Meskauskas
5

Как насчет чего-то вроде этого на стороне 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;
}
NVG
источник
1
В этом коде есть некоторые ошибки: 10 жестко запрограммировано, strtotime не требуется в переменных сервера и сеанса, а $ _SESSION ['ban_up'] == 1 должно быть = 1.
Джейсон Сильвер
3

Есть плагины, которые вы можете использовать в 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

Это хорошие недорогие отправные точки.

JasonG
источник
2

Как НЕ использовать защиту PHP на основе, это ужасно , и вряд ли будет иметь влияние на все! Настройте свой веб-сервер на запросы ограничения скорости, например, в Nginx с помощью модуля limit_req ( http://nginx.org/en/docs/http/ngx_http_limit_req_module.html )

Хотя я бы рекомендовал использовать CloudFlare для борьбы с уровнями 4, но не с атаками на уровне 7, если вы не готовы платить.

JustLloyd
источник
да, у меня тоже отлично поработало, мой опыт здесь softwareengineeringsolutions.co.uk/…
Элвис Чиотти
2

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-атакам. Некоторые сайты даже полностью отключают поддержку активности с помощью KeepAlive, что, конечно, имеет другие недостатки в производительности. Следует проверить значения различных директив, связанных с тайм-аутом, предоставляемых другими модулями.

Директивы LimitRequestBody, LimitRequestFields, LimitRequestFieldSize, LimitRequestLine и LimitXMLRequestBody должны быть тщательно настроены для ограничения потребления ресурсов, вызванного вводом клиента. Настройте директиву MaxRequestWorkers, чтобы сервер мог обрабатывать максимальное количество одновременных подключений без исчерпания ресурсов.

Раджа Рама Мохан Тавалам
источник
2

Действия по борьбе с DDOS :

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