Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Авторские статьи (https://forum.antichat.xyz/forumdisplay.php?f=31)
-   -   Погашение DDOS-атаки http флудом (https://forum.antichat.xyz/showthread.php?t=48981)

ant0ha 13.09.2007 21:36

Погашение DDOS-атаки http флудом
 
Система обнаружения и погашения DDOS-атаки http флудом

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

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

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

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

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

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

<?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 код:

<?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

Цитата:

Сообщение от groundhog
Не слишком ли громкое название? Без обид - эта поделка не имеет никакого отношения к системам обнаружения и погашения 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

Цитата:

Сообщение от groundhog
Это нонсенс защищаться от DDOS атак на атакуемом узле, да и ещё и внутри самого ресурса... Т.е. в данном случае, ты выбрал самое неподходящее место для реализации защиты. Меры защиты тем эффективнее, чем ближе они к атакующим узлам. Так что, именно в данном случае эффективнее будет уклонение от атаки...

Это единственное место, где можно развернуть защиту в данном случае, и уклонение от атаки это не выход, если есть возможность с ней бороться.
Цитата:

Сообщение от groundhog
И я тысячу раз повторял, ни одна поделка вроде этой никогда не будет эффективнее чем статистический или сигнатурный анализ трафика, причём аппаратными средствами. Ты не препятствуешь атаке никак, твой апач как порождал соединения, так он их и будет порождать, ещё и будет файловую систему месить добавляя и удаляя что-то из файлов... Единственное - ты немного снизишь трафик, т.к. вместо полноценных страниц боты будут получать мат от твоей поделки. Хотя с другой стороны - чем меньше они в одном потоке будут получать, тем чаще они такие потоки будут порождать... В общем, курам насмех такие "защищалки"...

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

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

Этот момент не совсем понял, насчет подделки IP, можно поподробнее?
Цитата:

Сообщение от madnet
а еще можно в ответ на каждый из IP ддосеров посылать свой БОТНЕТ и убивать их поодному =) (шутка)

Лучше стенка на стенку, боты против ботов вот это будет зрелище =)
Цитата:

Сообщение от groundhog
Я написал какая мера защиты - интеграция на уровне провайдера комбинированных статистических и сигнатурных анализаторов трафика, которые при каждой новой волне будут банить ботов, причём банить будут на близлежащих маршрутизаторах, а не на сервере с атакуемым ресурсом. И чем глобальнее будет такая схема, тем эффективнее будет мера борьбы - только одна волна будет проходить в одну подсеть с одного бот-нета.

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

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

Цитата:

Сообщение от groundhog
Ога, и платить деньги за левый трафик...

Трафа практически не будет, уклон какраз и был на это.
Цитата:

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

Повторюсь
Цитата:

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

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

И что ты предлагаешь брать просто REMOTE_ADDR, а как же тогда прокси?
Цитата:

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

Я и не писал что она от всех DDOS атак спасет, вот http флуд она погасит.


Время: 18:44