Перейти к содержимому



Дайте отзыв на скрипт для защиты от DDoS

#1 akmid81
akmid81
  • Пользователь
  • 155 сообщений
  • Репутация: 17
0

Отправлено 28 Ноябрь 2016 - 15:06

Копался в теме и обнаружил скрипт, описанный ниже. По идее он должен защищать от атак ботов, что определяется по интервалам между запросами. Вопроса к опытным 2:
1. По логам каждое открытие страницы пользователем создает несколько запросов - несколько строк в логе - не получится ли, что посетитель получил html, а на вместо картинок 503 ошибку?
2. На обработку скрипта тратятся серверные ресурсы и скрипт немаленький - будет ли стоить овчинка выделки - за счет скрипта нагрузку повысим, но часть ботов отсеем - получится на выходе одно и то же.
 
--------------------------------------------------------
 

1. Найдите в корневой директории index.php, и добавьте в его начало (сразу после открывающего тэга <?php) следующую строчку

include("ddosblock.php");

2. Если в каталоге отсутствует папка tmp, создайте ее;
3. Создайте файл ddosblock.php, откройте и скопируйте туда следующий код:

<?php
/*
* Скрипт скрипт фиксирует промежуток времени между повторными
* обращениями с каждого. Если за указанный
* период поступает повторный запрос, сервер отдает ошибку 503.
*/

 
/* Указываем время задержки в секундах */
$ad_delay=2;
/* Выставляем путь к папке для временных файлов
* (должен реально существовать)
*/

$ad_DirName=$_SERVER['DOCUMENT_ROOT'].'/tmp';
 
/*
* Пишем список поисковых роботов,
* чтобы случайно не загнать их в бан.
*/

$ad_Robots_UserAgent=array(
'aipbot',
'Aport',
'eStyleSearch',
'Gigabot',
'Gokubot',
'Google',
'MJ12bot',
'msnbot',
'PlantyNet_WebRobot',
'StackRambler',
'TurtleScanner',
'Yahoo',
'Yandex',
'YaDirectBot',
);
/*
* Составляем список доверенных IP.
* Удобно, если у вас статический адрес.
*/

$ad_good_ip = array(
'217.107.36.73',
);
 
/*
* Нижеследующая функция создаёт файл, имя которого
* начинается с буквы a (это поможет отличить его от других).
* К имени файла добавляется ip-адрес клиента.
*/

function ad_WiteIP($dir){
$f=fopen($dir.'/a'.$_SERVER['REMOTE_ADDR'], 'w');
fclose($f);
}
/*
* Проверяем user agent, дабы выявить поисковых ботов.
*/

$ad_IsRobot=false;
foreach ($ad_Robots_UserAgent as $match){
if (strstr($_SERVER['HTTP_USER_AGENT'], $match)){
$ad_IsRobot=true;
break;
}
}
if( in_array($_SERVER['REMOTE_ADDR'], $ad_good_ip) ) {
$good_ip = true;
} else {
$good_ip = false;
}
/*
* Заодно добавим внутренней оптимизации. Как известно,
* поисковые роботы недолюбливают переменные сессии.
* Блок ниже позволит отделять ботов от других посетителей.
*/

if (!$ad_IsRobot AND !$good_ip){
session_start();
}
 
if (!$ad_IsRobot AND !$good_ip){
/*
* Очистка каталога от старых файлов.
*/

$ad_dir =opendir($ad_DirName)
or die('Отсутствует директория для временных файлов');
$ad_now =time();
$ad_forbid =$ad_now-$ad_delay;
/*
* Время обращения - это время изменения файла,
* а его имя - IP-адрес.
*/

while (false!==($ad_FName=readdir($ad_dir))){
if (ereg('^a[1-9]',$ad_FName)
&& (@ filemtime($ad_DirName.'/'.$ad_FName)<$ad_forbid)){
@ unlink($ad_DirName.'/'.$ad_FName);
}
}
closedir($ad_dir);
/*
* Проверка факта недавнего обращения
* с определенного ip-адреса.
*/

if (file_exists($ad_DirName.'/a'.$_SERVER['REMOTE_ADDR'])){
/* Если обращение было недавно, то выводим сообщение об ошибке */
header('HTTP/1.0 503 Service Unavailable');
header('Status: 503 Service Unavailable');
header('Retry-After: '.$ad_delay*3);
?>
<!DOCTYPE html>
<html>
<head>
<title>Ошибка 503</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>Ошибка 503 (Service Unavailable)</h1>
<p>В настоящий момент страница недоступна.
Попробуйте презагрузить эту страницу через несколько секунд (клавиша F5).</p>
</body>
</html>
<?php
ad_WiteIP($ad_DirName); // Перед выходом записываем ip
exit;
}else{
ad_WiteIP($ad_DirName);
}
}
?>

4. Загрузите файл ddosblock.php в корневую директорию ресурса.

Прелесть данного кода заключается в том, что его можно использовать на виртуальном хостинге — здесь не требуется доступ к iptables (файрволу сервера). При этом, он не может гарантировать 100% защиты. Если сценарий явно не будет справляться, можно на некоторое время законсервировать сайт, предоставив скрипту возможность спокойно банить ботов. Для этого в index.php надо добавить exit:

include("ddosblock.php");
exit;

Теперь веб-ресурс станет недоступен, что позволит несколько разгрузить сервер, а вместо главной страницы будет подгружаться наш самописный анти-DDoS.


Первоисточник информации: http://tekseo.su/cms...p#ixzz4RIw4LDYZ

 


 

 

  • 0

#2 isvetlichniy
isvetlichniy
  • Неактивные
  • 622 сообщений
  • Репутация: 93

Отправлено 28 Декабрь 2016 - 11:50

не парься и подключи к сайту cloudflare. скрипт скриптом, но проф сервисы лучше сделают свое дело.


  • 0

#3 akmid81
akmid81
    Topic Starter
  • Пользователь
  • 155 сообщений
  • Репутация: 17

Отправлено 30 Декабрь 2016 - 10:57

Так и сделал, подключил cloudflare, плюс несколько настроек в htaccess для блокировки ботов добавил, пока в среднем нагрузка на сервер по данным хостинга процентов на 30 ниже.


  • 0

#4 BLIK
BLIK
  • Супермодератор
  • 4 577 сообщений
  • Репутация: 1049

Отправлено 30 Декабрь 2016 - 11:54

подключил cloudflare

Добавьте какой нибудь теперь мониторинг, чтоб знать что ваш ip не попал в бан Роскомнадзора из-за какого нибудь соседа, такое бывает часто.


  • 0

Качественный хостинг   Тут может быть ваша ссылка.





Похожие темы
  Название темы Автор Статистика Последнее сообщение

Пользователь месяца
BLIK BLIK 1-й за Ноябрь
Очков активности: 672 0 тем, 32 сообщения, 14 баллов репутации
ТОП самых активных за этот месяц
  • Фотография BLIK
    #1

    BLIK
    Очков активности: 63 Вне конкурса за определение пользователя месяца

  • Фотография Vmir
    #2

    Vmir
    Очков активности: 51 1 тема, 14 сообщений, 2 балла репутации

  • Фотография Victim
    #3

    Victim
    Очков активности: 42 0 тем, 7 сообщений, 4 балла репутации

  • Фотография FIvYUr
    #4

    FIvYUr (moy-evroopt.ru)
    Очков активности: 21 0 тем, 14 сообщений, 1 балл репутации

  • Фотография akmid81
    #5

    akmid81 (biznessystem.ru)
    Очков активности: 18 2 темы, 6 сообщений, 1 балл репутации

  • Фотография Totti
    #6

    Totti
    Очков активности: 18 0 тем, 6 сообщений, 2 балла репутации

  • Фотография kolver
    #7

    kolver
    Очков активности: 15 1 тема, 7 сообщений, 1 балл репутации

  • Фотография Rodiola
    #8

    Rodiola (rukodelkovo.ru)
    Очков активности: 15 Вне конкурса за определение пользователя месяца

  • Фотография TimurR
    #9

    TimurR
    Очков активности: 13.5 2 темы, 3 сообщения, 1 балл репутации

  • Фотография HITMAN84
    #10

    HITMAN84
    Очков активности: 12 1 тема, 5 сообщений, 1 балл репутации

  • Показать весь ТОП 10
Поддержите форум! =)
Апдейты
  • Яндекс ИКС: 29.11.2019
  • Яндекс выдача: 11.12.2019
Топ 5 участников по репутации

Оформление форума – IPBSkins.ru