PDA

Просмотр полной версии : Погашение DDOS-атаки http флудом


ant0ha
13.09.2007, 21:36
Система обнаружения и погашения DDOS-атаки http флудом

Идея написания подобной системы возникла у меня, после того как в очередной раз один из моих сайтов подвергся DDOS атаке, в то время я висел на обычном хостинге, где за каждый мегабайт трафика приходилось платить, и сумма в итоге итак выходила не маленькая, а тут еще эта DDOS атака, хорошо еще, что я в тот момент был рядом и вовремя успел отключить доступ к сайту. Тут конечно же в аську стукнул тот самый ддосер с требованиями заплатить, его я само собой послал подальше. Как понимаете, отключение сайта и пережидание атаки это не выход, она может возобновиться когда угодно, и вас рядом может не оказаться, поэтому с этим нужно бороться.

Сразу предупреждаю, система написана на php и предназначена только для ослабления атаки http flood, от другого типа ddos атаки, к примеру: icmp и udp на уровне обычного владельца веб сайта защититься невозможно.

Вкратце о системе: система включает модуль обнаружения DDOS атаки, который производит постоянный мониторинг загруженности сайта, путем отслеживания количества приходящих запросов в секунду, в случае если количество запросов в секунду превысит 10 (это по умолчанию, можно выставить больше), то подключается модуль погашения атаки, который начинает вычислять IP адреса атакующих машин-зомби и заносить их в блэклист, мониторинг при этом отключается по умолчанию на 1 час.

Принцип действия я думаю, понятен, вот сам код:

К примеру, создадим каталог anti_ddos и кидаем все скрипты туда:

index.php (модуль обнаружения DDOS атаки):
<?php

$ad_ddos_query=10; // количество запросов в секунду для обнаружения DDOS атаки
$ad_check_file='check.txt'; // файл для записи текущего состояния во время мониторинга
$ad_temp_file='all_ip.txt'; // временный файл
$ad_black_file='black_ip.txt'; // будут заносится ip машин зомби
$ad_white_file='white_ip.txt'; // заносятся ip посетителей
$ad_dir='anti_ddos'; // каталог со скриптами
$ad_num_query=0; // текущее количество запросов в секунду из файла $check_file
$ad_sec_query=0; // секунда из файла $check_file
$ad_end_defense=0; // время окончание защиты из файла $check_file
$ad_sec=date("s"); // текущая секунда
$ad_date=date("mdHis"); // текущее время
$ad_defense_time=10000; // при обнаружении ddos атаки время в секундах на которое прекращается мониторинг



if(!file_exists("{$ad_dir}/{$ad_check_file}") or !file_exists("{$ad_dir}/{$ad_temp_file}") or !file_exists("{$ad_dir}/{$ad_black_file}") or !file_exists("{$ad_dir}/{$ad_white_file}") or !file_exists("{$ad_dir}/anti_ddos.php")){
die("Не хватает файлов.");
}

require("{$ad_dir}/{$ad_check_file}");

if ($ad_end_defense and $ad_end_defense>$ad_date){
require("{$ad_dir}/anti_ddos.php");
} else {
if($ad_sec==$ad_sec_query){
$ad_num_query++;
} else {
$ad_num_query='1';
}

if ($ad_num_query>=$ad_ddos_query){
$ad_file=fopen("{$ad_dir}/{$ad_check_file}","w");
$ad_end_defense=$ad_date+$ad_defense_time;
$ad_string='<?php $ad_end_defense='.$ad_end_defense.'; ?>';
fputs($ad_file,$ad_string);
fclose($ad_fp);
} else {
$ad_file=fopen("{$ad_dir}/{$ad_check_file}","w");
$ad_string='<?php $ad_num_query='.$ad_num_query.'; $ad_sec_query='.$ad_sec.'; ?>';
fputs($ad_file,$ad_string);
fclose($ad_fp);
}
}
?>
anti_ddos.php (модуль погашения DDOS атаки):
<?php
function getIP() {
if(getenv("HTTP_X_FORWARDED_FOR") and preg_match("/^[0-9\.]*?[0-9\.]+$/is",getenv("HTTP_X_FORWARDED_FOR")) and getenv("HTTP_X_FORWARDED_FOR")!='127.0.0.1') {
$ip = getenv("HTTP_X_FORWARDED_FOR");
} else {
$ip = getenv("REMOTE_ADDR");
}
return $ip;
}
$ad_ip=getIP();

$ad_source=file("{$ad_dir}/{$ad_black_file}");
$ad_source=explode(' ',$ad_source[0]);
if (in_array($ad_ip,$ad_source)){die();}

$ad_source=file("{$ad_dir}/{$ad_white_file}");
$ad_source=explode(' ',$ad_source[0]);
if (!in_array($ad_ip,$ad_source)){

$ad_source=file("{$ad_dir}/{$ad_temp_file}");
$ad_source=explode(' ',$ad_source[0]);
if (!in_array($ad_ip,$ad_source)){
$ad_file=fopen("{$ad_dir}/{$ad_temp_file}","a+");
$ad_string=$ad_ip.' ';
fputs($ad_file,"$ad_string");
fclose($ad_fp);
?>

Сайт в данный момент подвергается DDOS атаке, если Вы не машина-зомби атакующая сайт нажмите на кнопку, иначе Ваш IP (<?=$ad_ip?>) будет заблокирован!!!
<form method="post">
<input type="submit" name="ad_white_ip" value="Кнопка">
</form>

<?php
die();
}
elseif ($_POST['ad_white_ip']){
$ad_file=fopen("{$ad_dir}/{$ad_white_file}","a+");
$ad_string=$ad_ip.' ';
fputs($ad_file,"$ad_string");
fclose($ad_fp);
}
else {
$ad_file=fopen("{$ad_dir}/{$ad_black_file}","a+");
$ad_string=$ad_ip.' ';
fputs($ad_file,"$ad_string");
fclose($ad_fp);
die();
}
}
?>
Также для работы скрипта понадобятся 4 файла check.txt, white_ip.txt, black_ip.txt и all_ip.txt создаем их в этом же каталоге и на все ставим права 666 (чтение и запись).

Желательно также во время атаки списки IP адресов атакующих машин формирующихся в файле black_ip.txt переносить постепенно в файл .htaccess и блокировать их оттуда, тогда нагрузка еще значительно снизится.

Пример файла .htaccess
Deny from 11.11.11.11 22.22.22.22 и т.д. через пробел

Да чуть не забыл, для подключения скрипта, в начале каждого файла, который может быть подвергнут атаке добавляем строчку:
require("anti_ddos/index.php");

Вот в общем и все, буду рад если будут дополнения =)

© ant0ha

groundhog
14.09.2007, 10:18
Система обнаружения и погашения DDOS-атаки http флудом
Не слишком ли громкое название? Без обид - эта поделка не имеет никакого отношения к системам обнаружения и погашения DDOS-атак. Это нонсенс защищаться от DDOS атак на атакуемом узле, да и ещё и внутри самого ресурса... Т.е. в данном случае, ты выбрал самое неподходящее место для реализации защиты. Меры защиты тем эффективнее, чем ближе они к атакующим узлам. Так что, именно в данном случае эффективнее будет уклонение от атаки... И я тысячу раз повторял, ни одна поделка вроде этой никогда не будет эффективнее чем статистический или сигнатурный анализ трафика, причём аппаратными средствами. Ты не препятствуешь атаке никак, твой апач как порождал соединения, так он их и будет порождать, ещё и будет файловую систему месить добавляя и удаляя что-то из файлов... Единственное - ты немного снизишь трафик, т.к. вместо полноценных страниц боты будут получать мат от твоей поделки. Хотя с другой стороны - чем меньше они в одном потоке будут получать, тем чаще они такие потоки будут порождать... В общем, курам насмех такие "защищалки"...

Alexsize
14.09.2007, 10:39
Не слишком ли громкое название? Без обид - эта поделка не имеет никакого отношения к системам обнаружения и погашения DDOS-атак. Это нонсенс защищаться от DDOS атак на атакуемом узле, да и ещё и внутри самого ресурса... Т.е. в данном случае, ты выбрал самое неподходящее место для реализации защиты. Меры защиты тем эффективнее, чем ближе они к атакующим узлам. Так что, именно в данном случае эффективнее будет уклонение от атаки... И я тысячу раз повторял, ни одна поделка вроде этой никогда не будет эффективнее чем статистический или сигнатурный анализ трафика, причём аппаратными средствами. Ты не препятствуешь атаке никак, твой апач как порождал соединения, так он их и будет порождать, ещё и будет файловую систему месить добавляя и удаляя что-то из файлов... Единственное - ты немного снизишь трафик, т.к. вместо полноценных страниц боты будут получать мат от твоей поделки. Хотя с другой стороны - чем меньше они в одном потоке будут получать, тем чаще они такие потоки будут порождать... В общем, курам насмех такие "защищалки"...
Ты так хорошо рассуждаешь... знаешь, когда на твой сайт начинаеться ДДОС атака ты уже не думешь, что

Меры защиты тем эффективнее, чем ближе они к атакующим узлам.
Ибо если подумать головным мозгом, то при ботнете в 10к ботов ты таких "мер" принять не сможешь никогда. Я тебе даже больше скажу: лично ты таких мер не сможешь принять и при ботнете в 10 ботов. Так что не забывай - критикуя, предлагай. Просто обосрать чужой способ может каждый.

madnet
14.09.2007, 10:45
Впринципе groundhog прав, плюс еще небольшой нюанс, я не весь скрипт просматривал, а только поверхностно, но если я не ошибся, то процедура определения IP, которую ты любезно одолжил у существующего скрипта, явно не преднозаченого для ДДОС блокировки, позволяет подделать IP, вследствии чего его можно генерировать рандомно хоть с одного хоста и хер ты кого забаниш!

Да и еще, максимум, что можно сделать определив такой ДДОС это отключить автоматически в панеле пользователя доступ к сайту, тем самым сэкоомив денюшку, но все это конечно косается детского ддоса ибо от серъезного ты таким способом не закроешся, а еще можно в ответ на каждый из IP ддосеров посылать свой БОТНЕТ и убивать их поодному =) (шутка).

groundhog
14.09.2007, 11:13
Ибо если подумать головным мозгом, то при ботнете в 10к ботов ты таких "мер" принять не сможешь никогда. Я тебе даже больше скажу: лично ты таких мер не сможешь принять и при ботнете в 10 ботов. Так что не забывай - критикуя, предлагай. Просто обосрать чужой способ может каждый.
Alexsize, умерь свой пыл, брат. Я написал какая мера защиты - интеграция на уровне провайдера комбинированных статистических и сигнатурных анализаторов трафика, которые при каждой новой волне будут банить ботов, причём банить будут на близлежащих маршрутизаторах, а не на сервере с атакуемым ресурсом. И чем глобальнее будет такая схема, тем эффективнее будет мера борьбы - только одна волна будет проходить в одну подсеть с одного бот-нета.

Ибо если подумать головным мозгом, то при ботнете в 10к ботов ты таких "мер" принять не сможешь никогда. Я тебе даже больше скажу: лично ты таких мер не сможешь принять и при ботнете в 10 ботов. Так что не забывай - критикуя, предлагай.
Моском подумать не могу - ибо зохавали. Тот способ, что я предложил как раз и расчитан на глобальные атаки, фишка в том, что такая атака будет проходить только одной волной, при том, что такая волна по мере достижения атакуемого ресурса будет растворяться... Поэтому ты мне "...даже больше не говори...", а иди учи мат. часть.

Просто обосрать чужой способ может каждый.
Я тебя тоже люблю.

И прислушайся к совету madnet... Как он верно подметил - переменные берутся из среды окружения... Такие переменные элементарно подделываются программными методами... Так что эта пукалка защитит только от ботнета в 10 ботов, а реального ботовода с гигантским ботнетом она только повеселит...

ant0ha
14.09.2007, 13:25
Это нонсенс защищаться от DDOS атак на атакуемом узле, да и ещё и внутри самого ресурса... Т.е. в данном случае, ты выбрал самое неподходящее место для реализации защиты. Меры защиты тем эффективнее, чем ближе они к атакующим узлам. Так что, именно в данном случае эффективнее будет уклонение от атаки...Это единственное место, где можно развернуть защиту в данном случае, и уклонение от атаки это не выход, если есть возможность с ней бороться.
И я тысячу раз повторял, ни одна поделка вроде этой никогда не будет эффективнее чем статистический или сигнатурный анализ трафика, причём аппаратными средствами. Ты не препятствуешь атаке никак, твой апач как порождал соединения, так он их и будет порождать, ещё и будет файловую систему месить добавляя и удаляя что-то из файлов... Единственное - ты немного снизишь трафик, т.к. вместо полноценных страниц боты будут получать мат от твоей поделки. Хотя с другой стороны - чем меньше они в одном потоке будут получать, тем чаще они такие потоки будут порождать... В общем, курам насмех такие "защищалки"...Если сайт крупный, иначе смысл его ддосить, то потребление трафика будет в сотни-тысячи раз меньше, и потом уже после двух запросов ддос машина будет добавлена в блеклист и от нее не будит никакого толку.
процедура определения IP, которую ты любезно одолжил у существующего скрипта, явно не преднозаченого для ДДОС блокировки, позволяет подделать IP, вследствии чего его можно генерировать рандомно хоть с одного хоста и хер ты кого забаниш!Этот момент не совсем понял, насчет подделки IP, можно поподробнее?
а еще можно в ответ на каждый из IP ддосеров посылать свой БОТНЕТ и убивать их поодному =) (шутка)Лучше стенка на стенку, боты против ботов вот это будет зрелище =)
Я написал какая мера защиты - интеграция на уровне провайдера комбинированных статистических и сигнатурных анализаторов трафика, которые при каждой новой волне будут банить ботов, причём банить будут на близлежащих маршрутизаторах, а не на сервере с атакуемым ресурсом. И чем глобальнее будет такая схема, тем эффективнее будет мера борьбы - только одна волна будет проходить в одну подсеть с одного бот-нета.При чем тут на уровне провайдера, им вообще до твоего сайта дела никакого нет, им проще твой аккаунт на пару дней вырубить.

groundhog
14.09.2007, 13:41
Это единственное место, где можно развернуть защиту в данном случае, и уклонение от атаки это не выход, если есть возможность с ней бороться.
Ога, и платить деньги за левый трафик...

Если сайт крупный, иначе смысл его ддосить, то потребление трафика будет в сотни-тысячи раз меньше, и потом уже после двух запросов ддос машина будет добавлена в блеклист и от нее не будит никакого толку.
Ты хоть понимаешь абсурдность этого утверждения? Соединения будут проходить чаще, ресурсы ВЕБ-СЕРВЕРА будут истощяться. Веб-сервер будет продолажать принимать запросы от ботов, и будет продолжать дёргать твою страницу! По умолчанию, одному запускаемому скрипту в PHP5 отводится 128 Мб памяти, прикинь во что это выльется при большом количестве запросов? Понту от твоего блек-листа? Кто его обрабатывает? Веб сервер? Или твой скрипт? Так твой скрипт по прошествии некоторого времени просто не будет выполняться из-за того что веб-сервер сдохнет!

Этот момент не совсем понял, насчет подделки IP, можно поподробнее?
Ты берёшь переменные, которые посылаются в хидерах запроса, то, что там посылается - фигня подделать.

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

Всё это я говорю к тому, что не надо громких названий, и надо быть серьёзнее, а если вы не представляете о чём идёт речь - так лучше вообще про это не писать! Предлагаю переименовать тему в "DDOS-пукалка или как рассмешить провайдерского одмина".

Ponchik
14.09.2007, 13:47
Некоторые файерволлы поддерживают функцию блокировки IP через командную чтроку, ну тоесть на компе стоит фаер, выполняем команду filewall -banip 11.222.33.444 и он банит его, токо я непомню какие фаерволлы поддерживают такие функции...
Так вот... Вместо того, чтобы заносить в .htaccess можно банить сразу доступ к компу, и тогда уже реально защититься от самого настояещего DDoS (если атакуют 2-3 компа :D)

Deem3n®
14.09.2007, 13:59
Ога mod_evasive и снорт отдыхают. ппц

ant0ha
14.09.2007, 14:01
Ога, и платить деньги за левый трафик...Трафа практически не будет, уклон какраз и был на это.Ты хоть понимаешь абсурдность этого утверждения? Соединения будут проходить чаще, ресурсы ВЕБ-СЕРВЕРА будут истощяться. Веб-сервер будет продолажать принимать запросы от ботов, и будет продолжать дёргать твою страницу! По умолчанию, одному запускаемому скрипту в PHP5 отводится 128 Мб памяти, прикинь во что это выльется при большом количестве запросов? Понту от твоего блек-листа? Кто его обрабатывает? Веб сервер? Или твой скрипт? Так твой скрипт по прошествии некоторого времени просто не будет выполняться из-за того что веб-сервер сдохнет!ПовторюсьЖелатель о также во время атаки списки IP адресов атакующих машин формирующихся в файле black_ip.txt переносить постепенно в файл .htaccess и блокировать их оттуда, тогда нагрузка еще значительно снизится.Ты берёшь переменные, которые посылаются в хидерах запроса, то, что там посылается - фигня подделать. И что ты предлагаешь брать просто REMOTE_ADDR, а как же тогда прокси?Всё это я говорю к тому, что не надо громких названий, и надо быть серьёзнее, а если вы не представляете о чём идёт речь - так лучше вообще про это не писать! Предлагаю переименовать тему в "DDOS-пукалка или как рассмешить провайдерского одмина".Я и не писал что она от всех DDOS атак спасет, вот http флуд она погасит.

groundhog
14.09.2007, 14:10
И что ты предлагаешь...
Моё предложение - прекратить этот цирк и закрыть тему.

fucker"ok
14.09.2007, 14:10
Лучше сразу добавлять злые адреса в .httaccess , а то так ещё php-cgi будет вызываться. Обычно на хостингах есть лимит на память, и тп. Когда меня ДДОСили, то ДДОС включили всего на несколько минут, а сервер запросы обрабатывал до утра, пока я deny from all не сделал и переждал. Так-что если ДДОС серьёзный, то тут никакая подобная защита не спасёт. Надо писать в суппорт и пусть они на рутере отрубают досеров.
Но все-равно от малолеток с программой "взлом интернета" и такой способ сгодиться.
++
icmp и udp на уровне обычного владельца веб сайта защититься невозможно.
А это уже не твоя проблема будет, а всего сервера. Чтобы вывести твой сайт из строя им придётся весь сервер задосить, что куда сложнее, чем превысить лимиты памяти для конкретного пользователя :)

tolsty7
14.09.2007, 14:15
Название, конечно, громкое, но на лицо - оперативное решение насущной проблемы.

groundhog
14.09.2007, 14:20
Название, конечно, громкое, но на лицо - оперативное решение насущной проблемы.
Не вижу решения... Таким "решением" моя бабушка от Митника в своё время защищалась, и то безуспешно... В то время как тебя досят - писать в файл? Это по вашему решение? Уж хоть бы, как правильно заметил, фукерок - .htaccess на эту директорию создавали при привышении нагрузки...

tolsty7
14.09.2007, 14:33
Не вижу решения...
Спросим автора - достиг ли он целей, которые ставил когда писал скрипт?

Егорыч+++
14.09.2007, 14:53
Безусловно подобный скрипт не погасит атаку никак. Но это не значит, что на самом сервере ничего сделать нельзя. Просто надо немного по другому подойти к этому делу.

ant0ha
14.09.2007, 14:54
Спросим автора - достиг ли он целей, которые ставил когда писал скрипт?Иначе бы я его тут не выложил, от 100-200 машин реально спасет, больше испытывать не приходилось, да и зачастую, если ддосят не на заказ в атаке одновременно больше машин и не участвует, а чтобы припугнуть этого количества вполне достаточно.

IIAHbI4
14.09.2007, 15:01
index.php

remote file include.

Line 33: $ad_file=fopen("{$ad_dir}/{$ad_check_file}","w");

Line 39: $ad_file=fopen("{$ad_dir}/{$ad_check_file}","w");

SQL inj

Line 9: $ad_sec_query=0; // $check_file

Line 26: if($ad_sec==$ad_sec_query){

Line 27: $ad_num_query++;

Line 29: $ad_num_query='1';

Line 32: if ($ad_num_query>=$ad_ddos_query){


Line 40: $ad_string='<?php $ad_num_query='.$ad_num_query.'; $ad_sec_query='.$ad_sec.'; ?>';

ant0ha
14.09.2007, 17:15
remote file include.
Смотри внимательней, эти параметры заданы в начале, их не подделать:
$ad_dir='anti_ddos'; // каталог со скриптами
$ad_check_file='check.txt'; // файл для записи текущего состояния во время мониторингаSQL injИздеваешься =), там sql не используется.

Ch3ck
14.09.2007, 19:03
Во-первых: Где-то этот принцип я видел уже...
Во-вторых: по-моему, тоже самое, что и

<?php
$ip=$_SERVER['REMOTE_ADDR'];
if($ip=='127.0.0.1'){
echo("На*** надо...");
} else { echo(Дорогая!); }
?>

ant0ha
15.09.2007, 00:23
Мое мнение - от этого скрипта сервак загнется быстрееЕрунды то не говори

HTTP флуд – это когда на сайт идет куча запросов по http-протоколу которые сервер не успевает обрабатывать. Если хорошенько подумать то что больше будет загружать сервер – открытие странички сайта к примеру с кучей запросов к мускл как часто бывает, картинками и т.д. или выполнения двух строчек на пхп которые займут сотые доли секунды. Я думаю второе, основной сайт то уже грузиться не будит.

К примеру допустим что нас атакует 500 машин, в секунду сервер обработает в среднем полсотни таких запросов, и тогда уже через 10 секунд все сервера будут в блэке, переносим их все в .htaccess и про атаку можно забыть.

k1b0rg
17.09.2007, 11:33
А механизм определения откуда спиздил? случайно не с ipb?
Хуля толку, если твой скрипт, заддержит ддос тока на один запрос. Хакер отсылает в заголовке HTTP_CLIENT_IP любой адресс, жмёт на твою кнопку антиддоса, его ип записывается в белые...И дальше начинает ддосить, посылая еще в пакете данные ип.

ant0ha
17.09.2007, 13:40
HTTP_CLIENT_IP убрал из первого постаА механизм определения откуда спиздил? случайно не с ipb? хз откуда, он не тока в ipb используется

NOmeR1
17.09.2007, 18:34
<?
session_start();
if($_SESSION['AntiDdos'] == time())
{
echo('Хрен вам, ддосерам');
}
else
{
$_SESSION['AntiDdos'] = time();
echo('Ддоса, как я вижу, нет?');
}
?>

Только что написал лучшую защиту от ддоса :)

KEZ
19.09.2007, 21:48
от такого уровня HTTP DDoS'а спасет SSL-протокол на сервере.

k1b0rg
19.09.2007, 21:57
$apachectl stop

вот 100% защита от http флуда

ant0ha
19.09.2007, 22:39
от такого уровня HTTP DDoS'а спасет SSL-протокол на сервере.не спорю, но ssl далеко не везде есть

вот 100% защита от http флуда
а если тебя неделю досить будут

gemaglabin
19.09.2007, 22:43
Почему ssl защитит от хттп флуда?Да вы гоните

k1b0rg
19.09.2007, 23:09
а если тебя неделю досить будут
Да хоть год. Средство универсальное, новое, нестандартное, хакеры даже не додумаются что против них поставили такую защиту. эт по типу как говорят буржуи (one day explait).

ant0ha
19.09.2007, 23:20
Почему ssl защитит от хттп флуда?Да вы гонитесделать вход на сайт только по ssl, по нему же вроде не досят ... хотя могу и ошибаться

George767
12.10.2007, 21:43
Занятный топик. Комично выглядят те, кто пытаются доказать, что этот способ неспособен предотвратить ддос. К чему эти выражения "статистический или сигнатурный анализ трафика"? И так понятно что кроме 10k ботов ничего не сделаешь. Я этот скрипт слегка модифицировав взял себе ибо у меня на проектах часто встречаются увесистые скрипты с комлпексными обращениями к бд. Естевственно что против профи ничего не сделаешь, однако есть это детский ддос (коим он является в большинстве случаев), то по крайней мере этот скрипт снимет его точно.

Сколько раз мы сами заваливали форумы и гостевухи отправляя на них тысячи post/get запросов?! Этот скрипт способен это предовратить

Developer
12.02.2008, 13:06
Мое мнение по всему этому - защита подобного типа может быть полезна, но в случаях самых простых атак. Она не защитит от атаки, но, возможно, хоть немного, но снизит нагрузку на сервер.

По реализации: я думаю, что оптимальным вариантом будет система очков. В базе хранить (IP, LastAccess, Points). При каждом новом запросе смотреть время предыдущего. Если запрос был 10 секунд назад - очки не набавлять, если 5 сек назад - накинуть 1 очко, если 4 сек назад - 2 очка, 3 сек назад - 4 очка, 2 сек назад - 8 очков, 1 сек назад - 16 очков, менее секунды назад - 32 очка. В конфигах выставить значение, при котором баниться IP. И так, если один IP в течение нескольких (напр. 5) минут набирает X (напр. 50) очков, то его IP заносится в .htacces (deny from ip), или же первые три раза предлагается ввести число на картинке, если три раза оно введено неправильно или не введено - опять же, заносим IP в .htacces. Что это нам даст? Сначала отрицательные стороны - это один лишний запрос к БД (но эти запросы очень легкие и при нормальной работе сайта абсолютно никакой роли не играют), генерация картинки (но они выполняется всего 3 раза) и запись в файл (Которая происходит один раз для одного IP). Теперь что мы получаем - адреса, которые слишком часто делают запросы к серверу - будут заблокированы на N минут (очистка списка забаненных со временем - уже другой скрипт, который желательно запускать кроном). Если IP находится в списке заблокированных .htacces, это немного снизит нагрузку на сервер (на каждый запрос с заблокированного IP будет выделяться намного меньше ресурсов, тобишь не будет запускаться интерпретатор PHP, выполняться скрипты, производиться чтение файлов и базы данных; в данном случае будет только открываться новое соединение с сервером).

Из этого всего можно сделать вывод: это лучше, чем ничего. Вреда это серверу не причинит в штатном режиме работы (для новостного сайта с 10 запросами к БД использование такой псевдо-зашиты повысит нагрузку максимум на 5%), зато в ситуации DDoS это, возможно, чем-то и поможет.

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

gibson
14.02.2008, 19:22
2 Developer ты д*рак? это что тебе крестики нолики что ли?=\ твоя бд первой ляжет и вместе с ней вся твоя система и тогда вообще никто не зайдет на сайт.
.htacces
ибо 24 часа DDoS стоят порядка больше, чем стипендия студента.
у тебя/знакомых стипендия 20$?

Delimiter
15.02.2008, 00:01
какое громкое название.... И КАКИМ ЭТО ТЕОРЕТИЧЕСКИМ ИЛИ ПРАКТИЧЕСКИМ СПОСОБОМ МОЖНО С ПОМОЩЬЮ http избавиться от syn-flood атаки на 80-й порт???

БРЕД!!! Там не будет не то что http заголовков там и реальных IP не будет , или тут придумывают защиту от скрипт-кидисов???

Isis
15.02.2008, 02:54
<?php
error_reporting(0);

$google = strpos($_SERVER['HTTP_USER_AGENT'], "Googlebot") !== false;
$yandex = strpos($_SERVER['HTTP_USER_AGENT'], "Yandex") !== false;
$rambler = strpos($_SERVER['HTTP_USER_AGENT'], "StackRambler") !== false;
$aport = strpos($_SERVER['HTTP_USER_AGENT'], "Aport") !== false;
$msn = strpos($_SERVER['HTTP_USER_AGENT'], "MSN") !== false;
$yahoo = strpos($_SERVER['HTTP_USER_AGENT'], "Yahoo") !== false;
$ip = strpos($_SERVER['REMOTE_ADDR'], '66.249.64.') !== false;
$ip2 = strpos($_SERVER['REMOTE_ADDR'], '81.19.64.') !== false;
$ip3 = strpos($_SERVER['REMOTE_ADDR'], '89.208.19.') !== false;
$ip4 = strpos($_SERVER['REMOTE_ADDR'], '213.180.206.') !== false;
$ip5 = strpos($_SERVER['REMOTE_ADDR'], '72.30.0.') !== false;
$ip6 = strpos($_SERVER['REMOTE_ADDR'], '87.250.230.') !== false;
$ip7 = strpos($_SERVER['REMOTE_ADDR'], '213.180.216.') !== false;
$ip8 = strpos($_SERVER['REMOTE_ADDR'], '222.0.0.') !== false;
$ip9 = strpos($_SERVER['REMOTE_ADDR'], '89.169.147.') !== false;

if(!$google || !$yandex || !$rambler || !$aport || !$msn || !$yahoo || !$ip || !$ip2 || !$ip3 || !$ip4 || !$ip5 || !$ip6 || !$ip7 || !$ip8 || !$ip9)
{
$dir = 'xekers/';

$cook = strrev(sha1('xek' . md5(getenv('HTTP_USER_AGENT'))));

function ban()
{
system("/bin/sudo pfctl -t isis -T add " . escapeshellarg($_SERVER["REMOTE_ADDR"]));
}

if (empty($_COOKIE['ddos']))
{
$counter = @file($dir . $_SERVER["REMOTE_ADDR"]);
if(count($counter) > 10) ban();
setcookie('ddos', $cook, time() + 9800);
$f = @fopen($dir . $_SERVER["REMOTE_ADDR"], "a");
fwrite($f, "request\r\n<br />");
fclose($f);
header('Location: ' . $_SERVER['PHP_SELF']);
die();
}

if ($_COOKIE['ddos'] !== $cook)
{
ban();
die();
}

if ($_COOKIE['ddos'] == $cook)
{
system("/bin/sudo pfctl -t isis -T del " . $_SERVER["REMOTE_ADDR"]);
@unlink($dir . $_SERVER["REMOTE_ADDR"]);
}
}
?>
© Isis :)

Developer
15.02.2008, 18:08
if (empty($_COOKIE['ddos']))
Это пять.... Я не знаю как работают боты, но имхо это существа не умеют работать с куками :)
2 Developer ты д*рак? это что тебе крестики нолики что ли?=\ твоя бд первой ляжет и вместе с ней вся твоя система и тогда вообще никто не зайдет на сайт.
Аффтор жжод? :D В среднем на сайте каждая страничка выполняет 10 запросов к БД (при использовании кэширования - от 0 до 5). Система, которую я предлагаю - добавляет всего 1 легкий запрос к БД. Нагрузка возрастает на 5-20%. Это ничто. Многие хостинги держат такие системы как PHP-Nuke с 200 запросами на страницу и 1к посещаемостью, а тут типа 5 запросов, состояние норм, 6 запросов - все, пздц, слишком большая нагрузка?

На счет .htaccess - хватит работать на публику, я прекрасно знаю, как пишется название этого файла, да и к тому же я не статью пишу, а ответный пост и от ошибок никто не застрахован. Умник.

Существует такое понятие, как рациональность. То что я предлагаю, имхо, оправдывает затраты. Это простейшая защита, но для ее построения и использования ресурсы/затраты нужны минимальные.

kisnik
06.07.2008, 12:29
А что во всех топиках и форумах где приведен этот скрипт исходник с ошибками?
$ad_file=fopen("{$ad_dir}/{$ad_check_file}","w");
$ad_string='<?php $ad_num_query='.$ad_num_query.'; $ad_sec_query='.$ad_sec.'; ?>';
fputs($ad_file,$ad_string);
fclose($ad_fp);
открывает дескриптор $ad_file, а закрытие $ad_fp.
Это типа для ламеров что ли.

А вот этот мод (http://dd0s.blogspot.com/) , что хуже? И може кто его выложить для windows.