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

Discussion in 'Статьи' started by ant0ha, 13 Sep 2007.

  1. ant0ha

    ant0ha Elder - Старейшина

    Joined:
    22 May 2007
    Messages:
    130
    Likes Received:
    50
    Reputations:
    13
    Ерунды то не говори

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

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

    k1b0rg Тут может быть ваша реклама.

    Joined:
    30 Jul 2005
    Messages:
    1,182
    Likes Received:
    399
    Reputations:
    479
    А механизм определения откуда спиздил? случайно не с ipb?
    Хуля толку, если твой скрипт, заддержит ддос тока на один запрос. Хакер отсылает в заголовке HTTP_CLIENT_IP любой адресс, жмёт на твою кнопку антиддоса, его ип записывается в белые...И дальше начинает ддосить, посылая еще в пакете данные ип.
     
  3. ant0ha

    ant0ha Elder - Старейшина

    Joined:
    22 May 2007
    Messages:
    130
    Likes Received:
    50
    Reputations:
    13
    HTTP_CLIENT_IP убрал из первого поста
    хз откуда, он не тока в ipb используется
     
  4. NOmeR1

    NOmeR1 Everybody lies

    Joined:
    2 Jun 2006
    Messages:
    1,068
    Likes Received:
    783
    Reputations:
    213
    PHP:
    <?
    session_start();
    if(
    $_SESSION['AntiDdos'] == time())
    {
     echo(
    'Хрен вам, ддосерам');
    }
    else
    {
     
    $_SESSION['AntiDdos'] = time();
     echo(
    'Ддоса, как я вижу, нет?');
    }
    ?>
    Только что написал лучшую защиту от ддоса :)
     
    1 person likes this.
  5. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    от такого уровня HTTP DDoS'а спасет SSL-протокол на сервере.
     
  6. k1b0rg

    k1b0rg Тут может быть ваша реклама.

    Joined:
    30 Jul 2005
    Messages:
    1,182
    Likes Received:
    399
    Reputations:
    479
    вот 100% защита от http флуда
     
  7. ant0ha

    ant0ha Elder - Старейшина

    Joined:
    22 May 2007
    Messages:
    130
    Likes Received:
    50
    Reputations:
    13
    не спорю, но ssl далеко не везде есть

    а если тебя неделю досить будут
     
  8. gemaglabin

    gemaglabin Green member

    Joined:
    1 Aug 2006
    Messages:
    772
    Likes Received:
    842
    Reputations:
    1,369
    Почему ssl защитит от хттп флуда?Да вы гоните
     
    1 person likes this.
  9. k1b0rg

    k1b0rg Тут может быть ваша реклама.

    Joined:
    30 Jul 2005
    Messages:
    1,182
    Likes Received:
    399
    Reputations:
    479
    Да хоть год. Средство универсальное, новое, нестандартное, хакеры даже не додумаются что против них поставили такую защиту. эт по типу как говорят буржуи (one day explait).
     
    1 person likes this.
  10. ant0ha

    ant0ha Elder - Старейшина

    Joined:
    22 May 2007
    Messages:
    130
    Likes Received:
    50
    Reputations:
    13
    сделать вход на сайт только по ssl, по нему же вроде не досят ... хотя могу и ошибаться
     
  11. George767

    George767 Elder - Старейшина

    Joined:
    10 Jan 2006
    Messages:
    129
    Likes Received:
    25
    Reputations:
    -1
    Занятный топик. Комично выглядят те, кто пытаются доказать, что этот способ неспособен предотвратить ддос. К чему эти выражения "статистический или сигнатурный анализ трафика"? И так понятно что кроме 10k ботов ничего не сделаешь. Я этот скрипт слегка модифицировав взял себе ибо у меня на проектах часто встречаются увесистые скрипты с комлпексными обращениями к бд. Естевственно что против профи ничего не сделаешь, однако есть это детский ддос (коим он является в большинстве случаев), то по крайней мере этот скрипт снимет его точно.

    Сколько раз мы сами заваливали форумы и гостевухи отправляя на них тысячи post/get запросов?! Этот скрипт способен это предовратить
     
    #31 George767, 12 Oct 2007
    Last edited: 12 Oct 2007
  12. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    Мое мнение по всему этому - защита подобного типа может быть полезна, но в случаях самых простых атак. Она не защитит от атаки, но, возможно, хоть немного, но снизит нагрузку на сервер.

    По реализации: я думаю, что оптимальным вариантом будет система очков. В базе хранить (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 стоят порядка больше, чем стипендия студента.
     
  13. gibson

    gibson Elder - Старейшина

    Joined:
    24 Feb 2006
    Messages:
    391
    Likes Received:
    247
    Reputations:
    88
    2 Developer ты д*рак? это что тебе крестики нолики что ли?=\ твоя бд первой ляжет и вместе с ней вся твоя система и тогда вообще никто не зайдет на сайт.
    у тебя/знакомых стипендия 20$?
     
  14. Delimiter

    Delimiter Banned

    Joined:
    8 Apr 2005
    Messages:
    317
    Likes Received:
    173
    Reputations:
    12
    какое громкое название.... И КАКИМ ЭТО ТЕОРЕТИЧЕСКИМ ИЛИ ПРАКТИЧЕСКИМ СПОСОБОМ МОЖНО С ПОМОЩЬЮ http избавиться от syn-flood атаки на 80-й порт???

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

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    PHP:
    <?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) > 10ban();
                
    setcookie('ddos'$cooktime() + 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 :)
     
  16. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    Это пять.... Я не знаю как работают боты, но имхо это существа не умеют работать с куками :)
    Аффтор жжод? :D В среднем на сайте каждая страничка выполняет 10 запросов к БД (при использовании кэширования - от 0 до 5). Система, которую я предлагаю - добавляет всего 1 легкий запрос к БД. Нагрузка возрастает на 5-20%. Это ничто. Многие хостинги держат такие системы как PHP-Nuke с 200 запросами на страницу и 1к посещаемостью, а тут типа 5 запросов, состояние норм, 6 запросов - все, пздц, слишком большая нагрузка?

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

    Существует такое понятие, как рациональность. То что я предлагаю, имхо, оправдывает затраты. Это простейшая защита, но для ее построения и использования ресурсы/затраты нужны минимальные.
     
    #36 Developer, 15 Feb 2008
    Last edited: 15 Feb 2008
  17. kisnik

    kisnik New Member

    Joined:
    29 Jun 2008
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    А что во всех топиках и форумах где приведен этот скрипт исходник с ошибками?
    PHP:
    $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.
    Это типа для ламеров что ли.

    А вот этот мод , что хуже? И може кто его выложить для windows.
     
    #37 kisnik, 6 Jul 2008
    Last edited: 6 Jul 2008