Пропустить навигацию.
Home

Скрипт защиты от ДДОС атаки - Klavasoft AntiDDOS - бесплатно!

Скрипт Klavasoft AntiDDOS

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

 Реализация | Настройка | Технические требования | Скачать Файлы |Скачать Файлы

 

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

 

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

<html>
<meta http-equiv='refresh' content='20'>
<body>
<h2>Our server is currently overloaded, your request will be repeated automatically in 20 seconds</h2>

В 3-й версии скрипта реализована блокировка всей сети класса C, что многократно повышает эффективность скрипта, так как часто бывает инфицированна вся сетка компьютеров, осуществляющих DDOS. Такой режим включен по умолчанию, и отменить его можно установкой поля block_cnet объекта в false.

Настройка

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


visitor) как: // raw - посетитель бы по каким-либо причинам не обработан скриптом // new - это первый заход посетителя за последние $seconds_limit секунд // cool - количество заходов посетителя - от 2 до $ksa->warm_level // hot - количество заходов больше чем hits_limit и посетитель должен быть заблокирован (приостановлен) // опционально можно сделать настройки $ksa->auto = false; // не проводить блокирования hot-посетителей скриптом (вы предполагаете сами это сделать) $ksa->warm_level = 3; // значение warm_level по умолчанию - $hits_limit/2 $ksa->delay = 10; // предлагать 'hot' посетителю вернуться через $ksa->delay секунд // значение по умолчанию - 20 // определяем статус посетителя $ksa->doit($hits_limit,$seconds_limit); // если вы не сбросили значение поля $ksa->auto и статус посетителя $ksa->visitor=='hot' // то скрипт отправит браузеру headers and HTML которые организуют задержку перед повторным запросом. // если $ksa->auto == false, то проверяем надо ли банить посетителя if ($ksa->visitor=='hot') { header('HTTP/1.0 503 Service Unavailable'); header('Status: 503 Service Unavailable'); header('Retry-After: 30'); die('sleep'); } $lite_version = $ksa->visitor=='warm'; // по этой переменной можно отдавать "теплым" посетителям // облегченную версию сайта ?>

А если вкратце, то достаточно вставить в хэдер сайта такой код


include "$_SERVER[DOCUMENT_ROOT]/ksantiddos.php"; $ksa = new ksantiddos(); $ksa->doit(10,20);

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

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

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

shm_attach();

и если вы не получите

Fatal error: Call to undefined function: shm_attach() in...

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

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

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

При вызове скрипт непосредственно в браузере - доступна контрольная панель (см скриншот).

Файлы  
  

Внимание!

Новые версии срипта теперь на Google Code. Начиная с версии 4.2 внедрено предложение от Wodomon, которое хоть и немного искажает статистику заходов, но значительно снижает количество операций с shared memory, что улучшает производительность, за что тов.  Wodomon огромные спасибки :).

Прошу обратить внимание, что в 4-й версии изменен порядок параметров вызова doit(). Секунды передаются вторым параметром. Seconds go second. А чтоб не было накладок при малосознательном обновлении, класс теперь называется по другому - ksantiddos, так же как и файл, содержащий этот класс.   Будьте внимательны при обновлении!

Прежние версии. 

KS Antiddos ver 2.1 (zip)

KS Antiddos ver 3.0 (zip)

Лицензия

 

Вы можете свободно использовать и распространять данное ПО(скрипт), вы также можете модифицировать код ПО для собственных нужд. При распространении или модификация кода не допускается изменению в файлах ПО блока, содержащего URL-а сайта (klavasoft.com), автора (Cosinus) и названия скрипта (Klavasoft AntiDDOS). Автор ПО не несет никакой ответственности ни по каким поводам.

При использовании скрипта категорически приветствуется размещение ссылки, например, такой:

Klavasoft

Или такой:

Klavasoft AntiDDOS

 или любой другой на указанные урлы.

Спасибочки!!!

такое щастье найти чтото друпальное!
работает!
правда, поскольку я чайник, пришлось к строке в хедере идти методом тыка, вы не поставили символы (наверное это презюмируется :), но для чайников - вокруг кода надо поставить < ? php и ?>

дурацкий наверное вопрос, но у меня число айпи не равно числу онлайновых юэеров по статистике rating.openstat.ru и еще 1 друпального модуля, везде оно разное...

и еще одна просьба. очень меня заинтересовал коммент:
"Столкнулся с проблемой, что при большом потоке запросов с одного ip адреса скрипт переставал работать. Не записывалась и не читалась память и всякая блокировка пропадала. Немного покопавшись, выяснил, что в функции doit() список ip пересохраняется при каждом вызове функции, не зависимо ни от чего.
Я внес пару фиксов.
Строчку сохранения списка я перенес в самый конец функции doit() сразу перед return
И добавил ограничение, чтобы список сохранялся только если ip не hot. Выглядит так:
// сохраняем список
if($this->visitor != "hot")
if (false===$this->save_iplist()) return $this->alles(false);"

У меня иногда тысячи запросов за несколько минут
Но я не понимаю как сделать то, что описано в комменте... не понимаю где менять и что (((
Не могли бы вы кусочек кода с такой правкой в ответе мне выложить. Пожалуйста!

Заранее огромное спасибо!

В новой версии учтено

В новой версии учтено предложение Wodomon. Ссылка на Google Code см. в тексте поста.
Насчет числа онлайновых юзеров - скрипт хранит их не все, а только за последний период, указанный ТЕПЕРЬ! вторым параметром вызова doit(). 
 
Удачи :)

Очистка памяти.

Спасибо, за скрипт, пока работает - за 30 мин. мин. 10 000 хитов :).
Мне вот, что не особо понятно - вы писали "скрипт все равно способен удалить область расширенной памяти. (Которая, в общем-то и так сканчается при ближайшей перезагрузке)". Так скрипт самостоятельно очищает память, или все же рекомендуется делать перезагрузку сервера, если делать перезагрузку, то как часто. Спасибо.

Скрипт сам очищает память.

Скрипт сам очищает память. Перезагрузка не требуется. 

Помоему это скрипт от

Помоему это скрипт от популярности твоего сайта а не от дос аттаки .. Думается мне что блокировать нужно по IP адрессу , а не по кол-ву заходов на сайт в конкретный период времени .

Читай внимательней.

Читай внимательней. Количество заходов хранится для КАЖДОГО ИПа. 

А без shm_attach(); никак?

А без shm_attach(); никак?

это звучит, как фантастика -

это звучит, как фантастика - но да, можно! Mysql имеет специальный тип таблиц, хранящихся в памяти, и их можно задействовать. Как руки дойдут - сделаю. 

поправочка к скрипту

Столкнулся с проблемой, что при большом потоке запросов с одного ip адреса скрипт переставал работать. Не записывалась и не читалась память и всякая блокировка пропадала. Немного покопавшись, выяснил, что в функции doit() список ip пересохраняется при каждом вызове функции, не зависимо ни от чего.
Я внес пару фиксов.

Строчку сохранения списка я перенес в самый конец функции doit() сразу перед return
И добавил ограничение, чтобы список сохранялся только если ip не hot. Выглядит так:

// сохраняем список
if($this->visitor != "hot")
if (false===$this->save_iplist()) return $this->alles(false);

После этого скрипт стал стабильно работать без каких либо ошибок и резво фильтровал ip с которого шло около 100 запросов в секунду.

Надеюсь камент был полезен =)

да, в целом доработка

да, в целом доработка полезная, хотя теряется информация о текущем хите и в случае снижения интенсивности этого IP-a, он разблокируется раньше. но, наверное, если речь идет о ДДОСе, то такого снижения еще надо дождаться :)

Напиши пожалуйста хороший

Напиши пожалуйста хороший скрипт от ддос для DLE 9.2 За ценой вопрос не постоит. Если согласен, то напиши мне на почту свой ответ.

Что не так

my shared memory blocks
Warning: shell_exec() [function.shell-exec]: Cannot execute using backquotes in Safe Mode in /home/www/duvankoy.in.ua/ks_antiddos.php on line 168
not found
delete it anyway
что это и как исправить
site.ru/ks_antiddos.php

тут из-за Safe Mode не

тут из-за Safe Mode не выполняется команда, которая дает список участков shared memory. Но удалить их все равно можно. Фактически, функциональность не страдает. 

Zend Optimizator

а Вот такой вопрос, каким образом можно впихнуть в хэадную страницу сайта код если index.php зашифрован Zender`ом?
Движок сайта CMS

возможно auto_prepend_file

возможно auto_prepend_file поможет.
http://www.google.ru/search?client=opera&rls=en&q=auto_prepend_file&sour...

Добрый день. В админке нашел

Добрый день. В админке нашел такой список:
total 4 stored IPs
66.249.66. 2 hits
178.154.160. 1 hits
66.249.71. 1 hits
93.75.108. 1 hits

Расскажите, пожалуйста, это заблокированные адреса(подсети)? И если да, то что значит 2 hits, 1 hits. Лимит установлен таким образом: $ksa->doit(15,10). Спасибо )

нет, это не заблокированные -

нет, это не заблокированные - это текущие накопленные. как только их количество перевалит за 10 за 15 секунд - они заблокируются. 

А можно ли вставить вызов

А можно ли вставить вызов скрипта в index.html , сайт на статическом html?
PHP на хостинге поддерживается.
Можно ли использовать javascript для вызова?

нет, не получится 

нет, не получится 

1. Было бы неплохо, если бы

1. Было бы неплохо, если бы вывод данных о разделяемой памяти можно было бы опционально отключать (либо автоматически определять, есть ли доступ к командной строке), т.к. в случае отсутствия доступа к командной строке, загаживается лог ошибок.
2. Слово "Successfull" пишется правильно с одной "l" на конце.
3. А как например юзера нащёлкавшего 10 хитов за 20 секунд, заблокировать минут на 10?

$ksa->delay = 10; //

$ksa->delay = 10; // предлагать 'hot' посетителю вернуться через $ksa->delay секунд 

Googlebot

Hello. Kak mojno zdelat chtob on ne reagiroval na googlbot, a to adsense ne budet rabotat. Net li vazmojnast dabavlenii belix IP katorie ne nado blakirovat?
Spasibo.

Установка

Скрипт не работает так как в нормальном продукте всегда есть файл инсталяции который рассказывает что и куда

все работает, попробуй

все работает, попробуй
require "мозги";

Белый список

Как организовать "Белый список", т.е. где можно объявить список тех IP, блокировка которых не требуется в любом случае?

Спасибо!

через .htaccess - читай

через .htaccess - читай allow/deny директивы 

This script is very fast and

This script is very fast and it's great that he came up with!

Cache Clearning

Skazite na do li chistit cache v prozesse raboty skripta na saite. Ya perezagruzau server tolko po iskluchitelnym sluchayam. Spasibo !

нет, не нужно. объем памяти

нет, не нужно. объем памяти выделяемый ему - фиксированный, старые ИПы удаляются автоматически 

Чтобы скрипт у вас заработало ставьте eAccelerator

Мои опыты показали чтобы скрипт заработал надо поставить eAccelerator корректно

как реагирует анти-ддос скрипт на визиты гугла?

слушай, такой вопрос по теме - гугл-бот же по факту делает примерно то же что среднестатистический ддос - заходит на сайт и перелопачивает его за считаные секунды, как на гуглобота отреагирует скрипт? не получится ли так, что скрипт выдаст гуглу кучку страничек с 20-секундным редиректом?

да, именно так и получится.

да, именно так и получится. но конент, выданный с хедером 503 - не является контентом страницы, и не будет проиндексирован. так что все путем. к тому же это спасает от "бешенства матки", которое иногда накатывает на гуглбота 

как это все проверить

Давича поступил вопрос о том, как проверить работоспособность скрипта. Думаю, что это будет интересно многим, привожу ответ здесь


сделай маленькое количество хитов, например

$ksa->doit(10,3);

- за 10 сек три хита.
потом дергай быстренько хомку или еще какую страницу, на которой инклудится antiddos. четвертая загрузка должна обломаться :)
а по адресу domain.com/path/ks_antiddos.php увидишь таблицу ипов и количеств загрузок. а может, увидишь, что php недостаточно сконфигурирован, чтоб скрипт работал.

 

комментарии в скрипте

жал что комментарии в скрипте нечитабельны маководам =( может изобразить их на инглише? или в utf-8.. главное - без win-1251 ;-)

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

честно говоря, сомневаюсь,

честно говоря, сомневаюсь, что поправлю кодировку. есть вещи и поважнее мира :)

Скрипт

Скрипт конечно хороший, но хотелось бы более подробные инструкции по установке. Как я понял сначала кидаем в корень после запускаем админку и правим там таК?

скрипт

Как проверить работу скрипта локально? на денвере

никак. на денвере, да и

никак. на денвере, да и вообще под виндой нет функций работы с разделяемой памятью.

Объсните пожалуйста подробно,

Объсните пожалуйста подробно, как этот скрипт ставить?
Тоесть что куда залить надо, и где что разместить надо?

А то я залил все файлы, поставил в индекс.пхп этот код:
include "$_SERVER[DOCUMENT_ROOT]/ks_antiddos.php";
2.$ksa = new ks_antiddos();
3.$ksa->doit(20,10);

Попробовал обновить страницу больше 20 раз за 20 секунд, и некаких результатов.
Вобщем нужна помощ.???

Скрипт защиты от ДДОС атаки - Klavasoft AntiDDOS - бесплатно!

Функция "shm_attach" не работает в операционных системах Windows.
http://phpclub.net/manrus/f/shm-attach.html

Нужен скрипт защиты от DDOS атаки, работающий также и в операционных системах Windows.

1. ks_antiddos.php - в

1. ks_antiddos.php - в корневой папке?
2. возможно php скомпилирован не правильно, см. Технические требования
3. дерни domain.com/ks_antiddos.php,если там нет ни одного ИПа, то скорее всего п.2 иначе имеет место тяжелый случай, который я не готов обсуждать.

как прикрутит это к rx-partners шаблонам?

пробовал прикручивать этот скрипт к шопам рх-партнерс? расскажи как, если не в лом, плз

да так же как и к любым

да так же как и к любым сайтам. вот через день-три у меня дойдут руки сделать 3 версию (см. анонс), так и на форуме проспамлюсь :) 

xLaurenceJavierl

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

More information about formatting options

CAPTCHA
докажи, что ты не бот
Image CAPTCHA
Copy the characters (respecting upper/lower case) from the image.