Простое решение для предотвращения DDoS — атак на PHP

👁 144 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

DDoStop — это модифицированная версия проекта DDoS-Shield. Загрузить проект DDoStop можно здесь.

Описание

DDoStop — это набор скриптов с минимальным кодом для быстрой конфигурации и развертывания защиты PHP — страниц сайта от DDoS — атак. Конечно, проект не претендует на профессиональный подход к решению данной проблемы, но для простой защиты от ботов и мелких DDoS — атак вполне годен.

Техническая сторона

DDoStop работает по модели различного временного доступа реальных посетителей и ботов. Есть возможность сконфигурировать проект на  минимальное среднее время между визитами одного посетителя и максимальных посещений за минимальное время — это главный пункт конфигурации.  Реальные посетители физически не могут посетить одну страницу 90 в течении 30 секунд, но боты, которые являются основными DDoS — вредителями, могут себе такое позволить. Когда боты начинают атаковать, то они сразу попадают под запрет на доступ к сайту с выдачей ошибки в заголовке 503, как ниже на рисунке

ddos-atack-message

Если бот удалился, то через некоторое время его IP разблокируется, а это время можно задать в конфигурационном файле conf_ddos.php(об этом будет рассказано ниже). IP каждого бота , после блокировки, попадает в log-файл AttackersIPs.Log, расположенный в папке ddos/log.  В зависимости от степени безопасности могут выходить различные информационные сообщения. После каждой атаки ботов на адрес, записанный в конфигурационном файле отправляет сообщение на уведомление о том, что пойман очередной бот. Данная защита имеет большую значимость, когда требуется быстро защитить страницы сайта, чтобы предотвратить отток большого трафика и нагрузку на CPU от наплыва большого количества запросов DDoS — ботов.

Файлы проекта и включение в сайт

Проект состоит из 2 скриптов php: ddos/index.php и conf_ddos.php, иконки бана в папке ddos/images/cross.gif, файла лога ddos/log/AttackersIPs.Log.

  • index.php — ядро защиты. Весь процесс с операциями с IP выполняется здесь;
  • conf_ddos.php — файл конфигурации для начальной настройки проекта;
  • AttackersIPs.Log — файл, в которую будут записаны блокированные IP — адреса ботов.

Для включения сайта достаточно разархивировать проект с GitHub в корневую папку сайта, как ниже на рисунке

ddos-sec-add-in-site

 

И теперь, для того чтобы защитить ту или иную страницу достаточно подключить файл conf_ddos.php при помощи php функции require(«./conf_ddos.php»)  первой строчкой

include("conf_ddos.php"); //Защишаем страницу от DDoS - атак

Конфигурация/настройка защиты

Вся конфигурация и настройка управляется через conf_ddos.php, который имеет следующий вид

  $crlf=chr(13).chr(10);
  $itime=3;  // Минимальное число секунд между визитами
  $imaxvisit=10;  // Максимальное число визитов в $itime x $imaxvisits секундах
  $ipenalty=($itime * $imaxvisit);  // Минуты ожидания
  $iplogdir="./ddos/logs/";// Папка хранения логов с IP
  $iplogfile="./AttackersIPs.Log"; //Имя файла лога
  
  // Время
  $today = date("Y-m-j,G");
  $min = date("i");
  $sec = date("s");
  $r = substr(date("i"),0,1);
  $m =  substr(date("i"),1,1);
  $minute = 0;
  
  // установка данных для администратора
  $to      = 'support@voting.ru';   //Адрес админа
  $headers = 'From: voting.ru support@voting.ru' . "\r\n" .   // 	   
    		 'X-Mailer: voting.ru защишен от DDoS';
  $subject = "Предупреждение на возможные DDOS атаки @ $today:$min:$sec";
  

  //Сообщение при бане:
  $message1='<span style="color: red;">Временный интенсивный траффик или распознена как DDOS атака!!!</span>
';
  $message2='Пожалуйста, подождите ... ';
  $message3=' секунд или повторите попытку входа через несколько минут.
';
  $message4='<span style="color: blue;">Защита призведена DDOS скриптом на PHP!!!</span>
Если вы человек, то смените IP и вы свободны.
Мы временно забанили ваш IP <b>'.$_SERVER["REMOTE_ADDR"].' </b>из-за DDOS атаки.';
  $message5=' Ваш сайт был атакован или боты захотели зайти через IP - адресов: '.$_SERVER["REMOTE_ADDR"];
  $message6='
<img src="./ddos/images/cross.gif" alt="" border="0" />';
include("ddos/index.php");//Включаем главный файл DDOS - защиты из диерктории ddos

Проверка

Для проверки заходим на страницу с включенной DDoS защитой и жмем F5 для имитации обновления страницы в режиме DDoS — атаки и видим страницу

ddos-atack-message