Скрипт Klavasoft AntiDDOS используется для защиты сайта от DDOS атаки по линии HTTP. Разумеется, скрипт не претендует на звание универсального и полного защитника от DDOS - для этих целей лучше использовать оборудование, стоимость которого измеряется десятками тысяч долларов. Если у вас нет такого оборудавания, но есть доступ к настройкам сервера, то вы также сможете обеспечить более эффективную защиту от DDOS, чем та, что предоставляет наш скрипт. А вот защитить виртуальны аккаунт от легонького любительского DDOSa этот скрипт вполне сможет, а такие ДДОС атаки встречаются наиболее часто ввиду дороговизны полномасштабных мероприятий.
Скрипт хранит в разделяемой памяти списки времен заходов с каждого IPa за последнее время. Если количество заходов в таком списке превысит определенный уровень, посетителю выдается техническая страница, которая информирует его о загруженности сервера и автоматически повторяет запрос страницы через некоторое время.
Вот пример такой страницы:
PHP код:
<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.
Настройка
Все упомянутые параметры поддаются настройке. Вот развернутый вариант ее:
PHP код:
<? // пример использования скрипта Klavasoft AntiDDOS
include "$_SERVER[DOCUMENT_ROOT]/ks_antiddos.php";
$ksa = new ks_antiddos();
// скрипт анализирует активность текущего ИПа за последние $seconds_limit секунд
$seconds_limit = 20;
// считая заходы свыше $hit_limit - подлежащими блокированию
$hits_limit = 10;
// скрипт определяет статус посетителя ($ks-?>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($seconds_limit,$hits_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'; // по этой переменной можно отдавать "теплым" посетителям
// облегченную версию сайта
?>
А если вкратце, то достаточно вставить в хэдер сайта такой код(Нам для этого нужен хак Let Live PHP в аттаче):
PHP код:
<?
include "$_SERVER[DOCUMENT_ROOT]/ks_antiddos.php";
$ksa = new ks_antiddos();
$ksa->doit(20,10);
?>
в предположении, что скрипт располагается в корневой папке вашего сайта.
Где doit(20,10); | 20 - время в секундах, а 10 - количество разрешенных перезагрузок.
Технические требования
Хотя судя по мануалу, функции работы с разделяемой памятью доступны во всех версиях PHP, случаются хостинги без средств межпроцессного взаимодействия. Чтобы выяснить, будет ли скрипт работать на вашем хостинге, вызовите функцию
сом.
PHP код:
shm_attach()
и если вы не получите
PHP код:
Fatal error: Call to undefined function: shm_attach() in...
то пациент жить будет.
Для просмотра и удаления списка фрагментов разделяемой памяти требуется доступ к командной строке. Заметим, что что эта функция не критически важна - скрипт отлично работает без просмотра админом данных о разделяемой памяти. Более того, если доступа к командной строке нет - скрипт все равно способен удалить область расширенной памяти. (Которая, вобщем-то и так сканчается при ближайшей перезагрузке)
Для доступа к разделяемой памяти не используются семафоры, поскольку зависание семафора способно заблокировать весь трафик. Время выполнения скрипта - пол миллисекунды и вероятность накладки ничтожна. И, конечно, в таких случаях скрипт нормально восстанавливается.
При вызове скрипт непосредственно в браузере - доступна контрольная панель
klavasoft.com
Не работает на винде, тк там нет функций работы с разделяемой памятью
Блин. Закину в корень форума ks_antiddos.php, импортировал продукт product-letphplive.xml , в самый вер хедера записал:
<?
include "$_SERVER[DOCUMENT_ROOT]/ks_antiddos.php";
$ksa = new ks_antiddos();
$ksa->doit(20,10);
?>
Реакции 0. Обновлять уже устал, пробовал делать 2 запроса за 20 сек - результат тот же. Версия 3.8.3. У кого нить была подобная ситуация ?
Разумеется, скрипт не претендует на звание универсального и полного защитника от DDOS - для этих целей лучше использовать оборудование, стоимость которого измеряется десятками тысяч долларов. Если у вас нет такого оборудавания, но есть доступ к настройкам сервера, то вы также сможете обеспечить более эффективную защиту от DDOS, чем та, что предоставляет наш скрипт. А вот защитить виртуальны аккаунт от легонького любительского DDOSa этот скрипт вполне сможет, а такие ДДОС атаки встречаются наиболее часто ввиду дороговизны полномасштабных мероприятий.
Так, что это скорей может немного успокоить разгорячившихся юзеров, чем настоящий хороший ддос остановит.
Serberg, хм, а сам форум вкорне или в папке /forum ? нужно именно туда-же куда установлен форум пихать
а и еще, нужно обязательно если форум в другой папке находится например в forum добавить к пути, иначе получим ошибку.
<?
include "$_SERVER[DOCUMENT_ROOT]/forum/ks_antiddos.php";
$ksa = new ks_antiddos();
$ksa->doit(20,10);
?>
Последний раз редактировалось AlfaDogg; 17.06.2009 в 19:41..
Технические требования
Хотя судя по мануалу, функции работы с разделяемой памятью доступны во всех версиях PHP, случаются хостинги без средств межпроцессного взаимодействия. Чтобы выяснить, будет ли скрипт работать на вашем хостинге, вызовите функцию
сом.
http://snakearena.net, попробуй обнови много-много раз, и увидишь в дествий Но толку от него...
maJic добавил 18.06.2009 в 22:01
Alfa, только ставить let php live не вижу смысла, можно сделать проще. Создать модуль, местоположение global_start, так-как нам нужно выполнение на всех страницах, и в содержимом модуля
PHP код:
ob_start(); include "$_SERVER[DOCUMENT_ROOT]/ks_antiddos.php"; $ksa = new ks_antiddos(); $ksa->doit(20,10); $ddos = ob_get_contents(); ob_end_clean();
переменную $ddos вставить в header
Последний раз редактировалось maJic; 18.06.2009 в 22:01..
Причина: Добавлено сообщение
Это не остановит даже простой DDoS. Надо настраивать другими средствами.
От этого продукта больше вреда чем пользы, только из-за того что пользователь будет думать что он защищен.
Любой антиддос должен отрабатываться до PHP, а то что предложено здесь в некоторых случаях, не связанных с DDoS-ом, только увеличит нагрузку: к примеру если я захочу открыть много страниц в разных вкладках, сначала сообщение об ошибке потом рефреш (сообщение об ошибке тоже ресурсы есть будет и не так мало, а если делать через систему хуков булки это еще дополнительные запросы в БД - инициализация совсем не легкий процесс у vB). Даже при среднем ддосе можно положить сервак атакой на PHP-скрипт состоящий из одного exit-а
Последний раз редактировалось Yoskaldyr; 18.06.2009 в 23:22..