Анти ДДОС

Discussion in 'Песочница' started by Dimo4ka14, 20 Nov 2008.

  1. Dimo4ka14

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

    Joined:
    23 Dec 2005
    Messages:
    282
    Likes Received:
    117
    Reputations:
    5
    Принцип действия я думаю, понятен, вот сам код:

    К примеру, создадим каталог 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_CLIENT_IP") and preg_match("/^[0-9\.]*?[0-9\.]+$/is",getenv("HTTP_CLIENT_IP")) and getenv("HTTP_CLIENT_IP")!='127.0.0.1') {
    $ip getenv("HTTP_CLIENT_IP");
    } elseif(
    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");




    © ZiK
     
  2. .Slip

    .Slip Elder - Старейшина

    Joined:
    16 Jan 2006
    Messages:
    1,571
    Likes Received:
    977
    Reputations:
    783
    А ты не подумал что при ддосе бот сначало коннектится к серверу а уже только потом выполняется скрипт?
     
  3. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Это не анти ддос, это анти http-flood. Лучше уж php + ip tables
     
  4. x3r0x

    x3r0x New Member

    Joined:
    6 May 2007
    Messages:
    7
    Likes Received:
    1
    Reputations:
    1
    к тому же, например, в картинку или в css/js/etc файлы уже не вставишь, хотя эти файлы тоже могут быть подвергнуты атаке
     
  5. Doom123

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

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    это полный бред ... Тебя от дддоса ничего не спасёт ибо еси это норм ддос то он атткует сервер а не скрипт ....
     
  6. neval

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

    Joined:
    13 Dec 2006
    Messages:
    457
    Likes Received:
    116
    Reputations:
    23
    А что ? Нормально...
    Где написано что тушение пожара огнеметом это неправильно?
    А почему не используется JavaScript ?
     
  7. f®@me™

    f®@me™ Member

    Joined:
    24 Nov 2008
    Messages:
    0
    Likes Received:
    36
    Reputations:
    0
    Смешно =)
     
    8 people like this.