DDoS (распределенные атаки типа «отказ в обслуживании») обычно блокируются на уровне сервера, верно?
Есть ли способ заблокировать его на уровне PHP или хотя бы уменьшить?
Если нет, то каков самый быстрый и самый распространенный способ остановить DDoS-атаки?
php
security
ddos
denial-of-service
кодерама
источник
источник
Ответы:
DDOS - это семейство атак, которые воздействуют на ключевые системы в центре обработки данных, включая:
Прежде чем приступить к построению защиты от DDOS-атак, подумайте, какова наихудшая величина риска. Для некритичной, бесплатной услуги для небольшого сообщества общая стоимость риска может быть ничтожной. Для платной, общедоступной и критически важной системы для устоявшегося многомиллиардного бизнеса стоимость может быть стоимостью компании. В последнем случае вам не следует использовать StackExchange :) В любом случае, чтобы защитить себя от DDOS, вам нужен всесторонний подход к защите:
Обновляйте все свои системы и программные пакеты с помощью последних исправлений безопасности - я имею в виду все из них:
Убедитесь , что у вас есть хороший брандмауэр или безопасности прибора установить и регулярно пересматриваться квалифицированным экспертом безопасности . Строгие правила брандмауэра - хорошая защита от многих простых атак. Также полезно иметь возможность управлять пропускной способностью, доступной для каждой открытой службы.
Используйте хорошие инструменты для мониторинга сети - это поможет вам понять:
Атака может быть просто интенсивным использованием законных сервисов веб-сайта (например, попадание в «законные» URI, выполняющие запросы или вставка / обновление / удаление данных) - тысячи или миллионы запросов, поступающих с десятков или миллионов различных IP-адресов, приведут сайт к его колени. В качестве альтернативы, некоторые службы могут быть настолько дорогими в эксплуатации, что только несколько запросов вызывают DOS - подумайте, действительно, дорогой отчет. Итак, вам нужен хороший мониторинг того, что происходит на уровне приложения :
Разумные ограничения и ограничения в вашем приложении . Например, вы можете:
И последнее, но не менее важное: напишите документ с планом реагирования DOS и получите его на внутреннюю проверку всеми соответствующими сторонами: бизнесом, менеджментом, командой разработчиков ПО, ИТ-командой и экспертом по безопасности. Процесс написания документа заставит вас и вашу команду обдумать проблемы и поможет вам подготовиться, если худшее случится в 3 часа ночи в ваш выходной. Документ должен охватывать (среди прочего):
Итак, помимо преамбулы, вот несколько конкретных ответов:
Не совсем так - большинство худших DDOS-атак являются низкоуровневыми (на уровне IP-пакетов) и обрабатываются правилами маршрутизации, межсетевыми экранами и устройствами безопасности, разработанными для обработки DDOS-атак.
Некоторые DDOS-атаки направлены на само приложение, отправляя действительные URI и HTTP-запросы. Когда количество запросов возрастает, ваш сервер (-ы) начинает бороться, и у вас будет отключение SLA. В этом случае есть вещи, которые вы можете делать на уровне PHP:
Мониторинг на уровне приложений: убедитесь, что каждая служба / страница регистрирует запросы таким образом, чтобы вы могли видеть, что происходит (чтобы вы могли предпринять действия для смягчения атаки). Некоторые идеи:
Имейте формат журнала, который вы можете легко загрузить в инструмент журнала (или Excel или аналогичный) и проанализировать с помощью инструментов командной строки (grep, sed, awk). Помните, что DDOS генерирует миллионы строк журнала. Вам, вероятно, потребуется нарезать свои журналы (особенно в отношении URI, времени, IP-адреса и пользователя), чтобы понять, что происходит, и вам потребуется сгенерировать такие данные, как:
Регистрируйте IP-адрес каждого запроса. НЕ ОТМЕНЯЙТЕ это DNS - по иронии судьбы, стоимость этого упрощает DDOS для злоумышленников.
Разумные ограничения скорости: вы можете установить ограничения на количество запросов, которые данный IP или пользователь может сделать за определенный период времени. Может ли законный клиент делать более 10 запросов в секунду? Могут ли анонимные пользователи вообще получить доступ к дорогостоящим отчетам?
CAPTCHA для анонимного доступа: реализуйте CAPTCHA для всех анонимных запросов, чтобы убедиться, что пользователь является человеком, а не роботом 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, мы используем его для многих наших сайтов с высоким трафиком только из-за его возможностей кэширования . Это потрясающе!
источник
Вы не можете сделать это на уровне PHP. DDOS - это разновидность атаки, при которой на ваш веб-сервер отправляется слишком много запросов. Ваш веб-сервер отклонит запрос до того, как вызовет ваш PHP-скрипт.
Если вы используете Apache, вот несколько советов от Apache: http://httpd.apache.org/docs/trunk/misc/security_tips.html
источник
DDoS лучше всего справляется с очень дорогими специализированными сетевыми устройствами. Хосты, как правило, плохо справляются с защитой от DDoS-атак, поскольку они обладают относительно низкой производительностью, исчерпанием состояния, ограниченной пропускной способностью и т. Д. Использование iptables, модов apache и подобных служб может помочь в некоторых ситуациях, если у вас нет доступа к оборудованию для защиты от DDoS-атак. или службу защиты от DDoS-атак, но она далека от идеала и по-прежнему подвергает вас риску атаки.
источник
Как насчет чего-то вроде этого на стороне 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; }
источник
Есть плагины, которые вы можете использовать в 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 на основе, это ужасно , и вряд ли будет иметь влияние на все! Настройте свой веб-сервер на запросы ограничения скорости, например, в Nginx с помощью модуля limit_req ( http://nginx.org/en/docs/http/ngx_http_limit_req_module.html )
Хотя я бы рекомендовал использовать CloudFlare для борьбы с уровнями 4, но не с атаками на уровне 7, если вы не готовы платить.
источник
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, чтобы сервер мог обрабатывать максимальное количество одновременных подключений без исчерпания ресурсов.
источник
Действия по борьбе с DDOS :
источник