Как включить защиту от DDoS?
DDoS (распределенные атаки типа "отказ в обслуживании") обычно блокируются на уровне сервера, верно?
Есть ли способ заблокировать его на уровне PHP или хотя бы уменьшить?
Если нет, то какой самый быстрый и самый распространенный способ остановить DDoS-атаки?
10 ответов
DDOS - это семейство атак, которые подавляют ключевые системы в центре обработки данных, включая:
- Подключение хостинг-центра к интернету
- Внутренняя сеть и роутеры хостинг-центра
- Ваш брандмауэр и балансировщик нагрузки
- Ваши веб-серверы, серверы приложений и базы данных.
Прежде чем приступить к построению защиты DDOS, подумайте, каково значение риска в худшем случае. Для некритичной, бесплатной службы для небольшого сообщества общая ценность риска может быть арахисом. Для платной, общедоступной, критически важной системы для устоявшегося многомиллиардного бизнеса эта ценность может оказаться ценностью компании. В этом последнем случае вам не следует использовать StackExchange:). В любом случае, для защиты от DDOS необходим глубокий подход к защите:
- Поработайте с вашим хостинг-центром, чтобы понять, какие услуги они предлагают, включая фильтрацию IP-адресов и портов при их сетевых подключениях к Интернету и услуги брандмауэра. Это очень важно: многие сайты извлекаются из Интернета хостинговой компанией, так как хостинговая компания работает со сбоем в центрах обработки данных, вызванным DDOS для одного клиента. Кроме того, во время DDOS-атаки вы будете очень тесно сотрудничать с сотрудниками хостинг-центра, поэтому знайте их номера экстренных служб и поддерживайте с ними хорошие отношения:) Они должны иметь возможность блокировать целые международные регионы, полностью блокировать определенные услуги или сеть протоколы и другие защитные меры широкого спектра или, в качестве альтернативы, разрешают только IP из белого списка (в зависимости от вашей бизнес-модели)
- Находясь в хостинг-центре - используйте сеть доставки контента, чтобы распространять (в основном статические) сервисы рядом с конечными пользователями и скрывать свои реальные серверы от разработчиков DDOS. Полный CDN слишком велик для DDOS, чтобы уничтожить все узлы во всех странах; если DDOS ориентирован на одну страну, по крайней мере, другие пользователи все еще в порядке.
Обновляйте все свои системы и пакеты программного обеспечения с помощью последних обновлений безопасности - и я имею в виду все из них:
- Управляемые коммутаторы - да, эти иногда нуждаются в обновлении
- Маршрутизаторы
- Брандмауэры
- Балансировщики нагрузки
- Операционные системы
- Веб-серверы
- Языки и их библиотеки
Убедитесь, что у вас установлен хороший брандмауэр или устройство безопасности, и регулярно проверяйте его у квалифицированного специалиста по безопасности. Строгие правила брандмауэра являются хорошей защитой от многих простых атак. Также полезно иметь возможность управлять пропускной способностью, доступной для каждого открытого сервиса.
Наличие хороших инструментов мониторинга сети - это может помочь вам понять:
- То, что вы находитесь под атакой, а не просто под большой нагрузкой
- Откуда идет атака (которая может включать страны, с которыми вы обычно не ведете дела) и
- Что такое атака (порты, сервисы, протоколы, IP-адреса и содержимое пакетов)
Атака может быть просто интенсивным использованием законных сервисов веб-сайта (например, использование "законных" URI, выполняющих запросы или вставка / обновление / удаление данных) - тысячи или миллионы запросов, поступающих с десятков или миллионов различных IP-адресов, приведут сайт к его колени. В качестве альтернативы, некоторые службы могут быть настолько дорогими для запуска, что только несколько запросов вызывают DOS - представьте себе действительно дорогой отчет. Так что вам нужен хороший мониторинг науровне приложений того, что происходит:
- Какие службы были вызваны и какие аргументы / данные отправлены (например, вход в ваше приложение)
- Какие пользователи выполняют вызовы и с каких IP-адресов (т.е. входят в ваше приложение)
- Какие запросы и вставки / обновления / удаления БД выполняет
- Средняя загрузка, загрузка ЦП, дисковый ввод-вывод, сетевой трафик на всех компьютерах (и виртуальных машинах) в вашей системе
- Убедиться, что всю эту информацию легко получить, и что вы можете сопоставлять журналы с разных компьютеров и служб (т.е. убедиться, что все компьютеры синхронизированы по времени с использованием ntp).
Разумные ограничения и ограничения в вашем приложении. Например, вы можете:
- Используйте функцию QoS в балансировщике нагрузки для отправки всех анонимных сеансов на отдельные серверы приложений в кластере, в то время как вошедшие в систему пользователи используют другой набор. Это предотвращает аннулирование DDOS на уровне приложений ценных клиентов
- Использование сильной CAPCHA для защиты анонимных сервисов
- Тайм-ауты сессии
- Для определенных типов запросов, таких как отчеты, указывается ограничение сеанса или ограничение скорости. Убедитесь, что вы можете отключить анонимный доступ при необходимости
- Убедитесь, что у пользователя есть ограничение на количество одновременных сеансов (чтобы миллион раз не входил в учетную запись взломанной учетной записи)
- Иметь разных пользователей приложения базы данных для разных служб (например, использование транзакций или использование отчетов) и использовать управление ресурсами базы данных, чтобы один тип веб-запроса не подавлял все остальные.
- Если возможно, сделайте эти ограничения динамическими или, по крайней мере, настраиваемыми. Таким образом, пока вы находитесь под атакой, вы можете установить агрессивные временные ограничения ("сдерживание" атаки), например, только один сеанс на пользователя и отсутствие анонимного доступа. Это, конечно, не очень хорошо для ваших клиентов, но намного лучше, чем вообще отсутствие обслуживания.
И последнее, но не менее важное: напишите документплана реагирования 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:)
Doug McClean есть несколько полезных советов по адресу: /questions/24186885/zaschitite-sebya-ot-dos-atak/24186908#24186908
По части PHP вопрос;
Хотя я не полагаюсь на PHP для этого, он может быть реализован, но должен учитывать все эти возможности или даже больше;
- Атакующий может менять IP для каждого запроса
- Злоумышленник может передать параметр (ы) в URI, что целевой сайт не заботится об этих параметрах
- Злоумышленник может перезапустить сеанс до истечения срока действия...
Простое псевдо;
<?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, мы используем его для многих наших сайтов с высоким трафиком только для его возможностей кэширования, Это потрясающе!
Вы не можете сделать это на уровне PHP. DDOS - это своего рода атака, которая отправляет слишком много запросов вашему веб-серверу. Ваш веб-сервер отклонит запрос, прежде чем вызовет ваш PHP-скрипт.
Если вы используете Apache, вот несколько советов от Apache: http://httpd.apache.org/docs/trunk/misc/security_tips.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, поскольку они подвержены относительно низкой производительности, исчерпанию состояния, ограниченной пропускной способности и т. Д. Использование iptables, apache-модов и аналогичных служб может помочь в некоторых ситуациях, если у вас нет доступа к оборудованию для предотвращения DDoS-атак. или служба защиты от DDoS, но она далека от идеальной и все еще подвергает вас риску атак.
Есть плагины, которые вы можете использовать в 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
Это хорошие недорогие отправные точки.
DDOS обычно блокируются на уровне сервера. Пожалуйста, включите защиту DDOS на своем уровне сервера. Пожалуйста, проверьте следующие примечания для защиты DDOS.
Параметры конфигурации Apache HTTP Server, которые могут помочь предотвратить проблемы 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 через KeepAlive, что, конечно, имеет и другие недостатки в производительности. Должны быть проверены значения различных директив, связанных с тайм-аутом, предоставляемых другими модулями.
Директивы LimitRequestBody, LimitRequestFields, LimitRequestFieldSize, LimitRequestLine и LimitXMLRequestBody должны быть тщательно настроены, чтобы ограничить потребление ресурсов, инициируемое вводом клиента. Настройте директиву MaxRequestWorkers, чтобы позволить серверу обрабатывать максимальное количество одновременных соединений без нехватки ресурсов.
Анти-DDOS шаги:
- Самое первое, что важно, - это сначала идентифицировать атаку ddos. Выявление атаки ddos на более раннем этапе лучше для вашего сервера.
- Получение лучшей пропускной способности для вашего сервера. Всегда сохраняйте более чем достаточную пропускную способность, необходимую для вашего сервера. Это не предотвратит DDOS-атаку, но займет больше времени. По которому вы получите дополнительное время для действий.
- Если у вас есть собственный веб-сервер, то вы можете защищаться по сетевому параметру путем ограничения скорости вашего маршрутизатора, добавлять фильтры для отбрасывания пакетов к различным источникам атак, более агрессивно выдерживать тайм-аут наполовину открытых соединений. Также установите более низкие пороги отбрасывания SYN, ICMP и UDP.
- Если вы не очень разбираетесь в этих вещах, тогда обратитесь к вашим хостинг-провайдерам быстро. Они могут сделать все возможное, чтобы предотвратить атаки DDOS.
- Существуют также специальные услуги по смягчению DDOS, предоставляемые Cloudflare и многими другими компаниями. С помощью которых они могут помочь вам предотвратить атаки DDOS. Также многие компании предлагают дешевую защиту от DOS и DOS.