Показать сообщение отдельно

  #3  
Старый 08.07.2009, 13:45
kezz
Участник форума
Регистрация: 19.11.2008
Сообщений: 138
Провел на форуме:
1825733

Репутация: 556
По умолчанию

Скрипт защиты от ДДОС атаки - Klavasoft AntiDDOS


Скрипт Klavasoft AntiDDOS

Скрипт Klavasoft AntiDDOS используется для защиты сайта от DDOS атаки по линии HTTP. Разумеется, скрипт не претендует на звание универсального и полного защитника от DDOS - для этих целей лучше использовать оборудование, стоимость которого измеряется десятками тысяч долларов. Если у вас нет такого оборудавания, но есть доступ к настройкам сервера, то вы также сможете обеспечить более эффективную защиту от DDOS, чем та, что предоставляет этот скрипт. А вот защитить виртуальны аккаунт от легонького любительского DDOSa этот скрипт вполне сможет, а такие ДДОС атаки встречаются наиболее часто ввиду дороговизны полномасштабных мероприятий.

Немного о реализации защиты от ДДОС

Скрипт хранит в разделяемой памяти списки времен заходов с каждого IPa за последнее время. Если количество заходов в таком списке превысит определенный уровень, посетителю выдается техническая страница, которая информирует его о загруженности сервера и автоматически повторяет запрос страницы через некоторое время.
Вот пример такой страницы:

Код:
<html> 
2.<meta http-equiv='refresh' content='20'> 
3.<body> 
4.<h2>Our server is currently overloaded, your request will be repeated automatically in 20 seconds</h2>
В 3-й версии скрипта реализована блокировка всей сети класса C, что многократно повышает эффективность скрипта, так как часто бывает инфицированна вся сетка компьютеров, осуществляющих DDOS. Такой режим включен по умолчанию, и отменить его можно установкой поля block_cnet объекта в false.

Настройка.

Все упомянутые параметры поддаются настройке. Вот развернутый вариант ее:

Код:
<? 
02. 
 
03.// пример использования скрипта Klavasoft AntiDDOS 
04. 
 
05.include "$_SERVER[DOCUMENT_ROOT]/ks_antiddos.php"; 
06.$ksa = new ks_antiddos(); 
07. 
 
08.// скрипт анализирует активность текущего ИПа за последние $seconds_limit секунд 
09.$seconds_limit = 20; 
10.// считая заходы свыше $hit_limit - подлежащими блокированию 
11.$hits_limit = 10; 
12. 
 
13.// скрипт определяет статус посетителя ($ks->visitor) как: 
14.// raw  - посетитель бы по каким-либо причинам не обработан скриптом 
15.// new  - это первый заход посетителя за последние $seconds_limit секунд 
16.// cool - количество заходов посетителя - от 2 до $ksa->warm_level 
17.// hot  - количество заходов больше чем hits_limit и посетитель должен быть заблокирован (приостановлен) 
18. 
 
19.// опционально можно сделать настройки 
20.$ksa->auto = false;  // не проводить блокирования hot-посетителей скриптом (вы предполагаете сами это сделать) 
21.$ksa->warm_level = 3;    // значение warm_level по умолчанию - $hits_limit/2 
22.$ksa->delay = 10;        // предлагать 'hot' посетителю вернуться через $ksa->delay секунд 
23.                        
// значение по умолчанию - 20 
24. 
 
25. 
 
26.// определяем статус посетителя 
27.$ksa->doit($seconds_limit,$hits_limit); 
28.// если вы не сбросили значение поля $ksa->auto и статус посетителя $ksa->visitor=='hot' 
29.// то скрипт отправит браузеру headers and HTML которые организуют задержку перед повторным запросом. 
30. 
 
31.// если $ksa->auto == false, то проверяем надо ли банить посетителя  
32.if ($ksa->visitor=='hot')  
33.{ 
34.    
header('HTTP/1.0 503 Service Unavailable'); 
35.    
header('Status: 503 Service Unavailable'); 
36.    
header('Retry-After: 30'); 
37.    
die('sleep'); 
38.} 
39. 
 
40.$lite_version = $ksa->visitor=='warm';   // по этой переменной можно отдавать "теплым" посетителям 
41.                                        
// облегченную версию сайта 
42. 
 
43.?>
А если вкратце, то достаточно вставить в хэдер сайта такой код

Код:
include "$_SERVER[DOCUMENT_ROOT]/ks_antiddos.php"; 
2.$ksa = new ks_antiddos(); 
3.$ksa->doit(20,10);

в предположении, что скрипт располагается в корневой папке вашего сайта.

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

Хотя судя по мануалу, функции работы с разделяемой памятью доступны во всех версиях PHP, случаются хостинги без средств межпроцессного взаимодействия. Чтобы выяснить, будет ли скрипт работать на вашем хостинге, вызовите функцию
  • shm_attach();

    и если вы не получите
  • Fatal error: Call to undefined function: shm_attach() in...

то пациент жить будет

Для просмотра и удаления списка фрагментов разделяемой памяти требуется доступ к командной строке. Заметим, что что эта функция не критически важна - скрипт отлично работает без просмотра админом данных о разделяемой памяти. Более того, если доступа к командной строке нет - скрипт все равно способен удалить область расширенной памяти. (Которая, вобщем-то и так сканчается при ближайшей перезагрузке)

Для доступа к разделяемой памяти не используются семафоры, поскольку зависание семафора способно заблокировать весь трафик. Время выполнения скрипта - пол миллисекунды и вероятность накладки ничтожна. И, конечно, в таких случаях скрипт нормально восстанавливается.


Файлы


KS Antiddos ver 2.1 (zip)

KS Antiddos ver 3.0 (zip)

(c) + оффсайт klavasoft.com

Последний раз редактировалось kezz; 08.07.2009 в 13:47..