HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > РАЗРАБОТКА > Для Администратора > AntiDDos - АнтиДДОС
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 11.07.2015, 17:31
GoodNucken
Новичок
Регистрация: 20.10.2014
Сообщений: 0
С нами: 6086540

Репутация: 0
По умолчанию

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

Выкладываю некоторые здесь. Если кому помогут - отписывайтесь, вместе посмеемся над этим ддосером.

Но прежде чем использовать подобные скрипты, надо оценить обстановку.
Если ваш хостер предоставляет SSH-доступ, попробуйте с помощью команды

Код:


Код:
netstat -ntu |wc -l
определить силу ддоса. Команда выведет количество соединений. Если сервер совсем повис, попробуйте перезагрузить его (через службу поддержки или самостоятельно если такая возможность есть) и отрубите апач

Код:


Код:
service httpd stop
или

Код:


Код:
service nginx stop
либо, если ддос несильный, закоментируйте срочку _index.php в корне вашего сайта. После чего можно поизучать логи и оценить силу и таргетинг ддоса.

Если ддос действительно слабенький, можно попробовать использовать PHP скрипты, но предупреждаю, они будут загружать сервер и годятся только как временное решение проблемы.

Скрипт AntiOverload *FIX*

Код:


Код:
Ошибка 503

Ошибка 503 (Service Unavailable)
Сервер не может в данный момент выдать запрашиваемую Вами страницу.
Попробуйте вызвать эту страницу позже (клавиша F5).
Антиддос скрипт от админа xaknet.ru:

Код:


Код:
(c)XakNet antiddos module, ваш IP - {IP}({UA}), date - {DATE}';
    // команда выполнения бана в файрволле
    public $exec_ban = 'iptables -A INPUT -s {IP} -j DROP';
    // тип защиты от ддоса:
    /* Возможные значения $ddos 1-5:
    | 1. Простая проверка по кукам, по умолчанию(рекомендую)  
    | 2. Двойная проверка через $_GET antiddos и meta refresh  
    | 3. Запрос на авторизацию WWW-Authenticate  
    | 4. полное отключение сайта, боты не блокируются!!!  
    | 5. выключать сайт если нагрузка слишком большая на сервере, боты не блокируются!!!  
    */
    var $ddos = 1;
    // часть домена поисковых ботов, см strpos()
    private $searchbots = array('googlebot.com', 'yandex.ru', 'ramtel.ru', 'rambler.ru', 'aport.ru', 'sape.ru', 'msn.com', 'yahoo.net');
    // временная переменные нужные для работы скрипта
    private $attack = false;
    private $is_bot = false;
    private $ddosuser;
    private $ddospass;
    private $load;
    public $maxload = 80;
  
    function __construct($debug)
    {
        @session_start() or die('session_start() filed!');
        $this->indeficator = md5(sha1('botik' . strrev(getenv('HTTP_USER_AGENT'))));
        $this->ban_message = str_replace(array('{ICQ}', '{IP}', '{UA}', '{DATE}'),
                                        array($this->icq, $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT'], date('d.m.y H:i')),
                                        $this->ban_message
                                        );
        if (eregi(ip2long($_SERVER['REMOTE_ADDR']), file_get_contents($this->dir . 'banned_ips')))
            die($this->ban_message);
        $this->exec_ban = str_replace('{IP}', $_SERVER['REMOTE_ADDR'], $this->exec_ban);
        $this->debug = $debug;
        if(!function_exists('sys_getloadavg'))
        {
            function sys_getloadavg()
            {
                return array(0,0,0);
            }
        }
        $this->load = sys_getloadavg();
        if(!$this->sbots())
        {
            $this->attack = true;
            $f = fopen($this->dir . ip2long($_SERVER["REMOTE_ADDR"]), "a");
            fwrite($f, "query\n");
            fclose($f);
        }
    }
  
    /**
    * Старт работы антиддоса
    **/
    function start()
    {
        if($this->attack == false)
            return;
        switch($this->ddos)
        {
            case 1:
                $this->addos1();
                break;
            case 2:
                $this->addos2();
                break;
            case 3:
                $this->ddosuser = substr(ip2long($_SERVER['REMOTE_ADDR']), 0, 4);
                $this->ddospass = substr(ip2long($_SERVER['REMOTE_ADDR']), 4, strlen(ip2long($_SERVER['REMOTE_ADDR'])));
                $this->addos3();
                break;
            case 4:
                die($this->off_message);
                break;
            case 5:
                if ($this->load[0] > $this->maxload)
                {
                    header('HTTP/1.1 503 Too busy, try again later');
                    die('503 Server too busy.Server too busy. Please try again later. Apache server on ' . $_SERVER['HTTP_HOST'] . ' at port 80 with ddos protect');
                }
                break;
            default:
                break;
        }
        if ($_COOKIE['ddos'] == $this->indeficator)
            @unlink($this->dir . ip2long($_SERVER["REMOTE_ADDR"]));
    }
  
    /**
    * Функция проверяет не является ли клиент поисковым ботом
    **/
    function sbots()
    {
        $tmp = array();
        foreach($this->searchbots as $bot)
        {
            $tmp[] = strpos(gethostbyaddr($_SERVER['REMOTE_ADDR']), $bot) !== false;
            if($tmp[count($tmp) - 1] == true)
            {
                $this->is_bot = true;
                break;
            }
        }
        return $this->is_bot;
    }
  
    /**
    * Функция бана
    **/
    private function ban()
    {
        if (! system($this->exec_ban))
        {
            $f = fopen($this->dir . 'banned_ips', "a");
            fwrite($f, ip2long($_SERVER['REMOTE_ADDR']) . '|');
            fclose($f);
        }
        die($this->ban_message);
    }
    /**
    * Первый тип защиты
    **/
    function addos1()
    {
        if (empty($_COOKIE['ddos']) or !isset($_COOKIE['ddos']))
        {
            $counter = @file($this->dir . ip2long($_SERVER["REMOTE_ADDR"]));
            setcookie('ddos', $this->indeficator, time() + 3600 * 24 * 7 * 356); // ставим куки на год.
            if (count($counter) > 10) {
                if (! $this->debug)
                    $this->ban();
                else
                    die("Блокированы.");
            }
            if (! $_COOKIE['ddos_log'] == '1')
            {
                if (! $_GET['antiddos'] == 1)
                {
                    setcookie('ddos_log', '1', time() + 3600 * 24 * 7 * 356); //чтоб не перекидывало постоянно рефрешем.
                    if(headers_sent())
                        die('Header already sended, check it, line '.__LINE__);
                    header("Location: ./?antiddos=1");
                }
            }
        } elseif ($_COOKIE['ddos'] !== $this->indeficator)
        {
            if (! $this->debug)
                $this->ban();
            else
                die("Блокированы.");
        }
    }
  
    /**
    * Второй тип защиты
    **/
    function addos2()
    {
        if (empty($_COOKIE['ddos']) or $_COOKIE['ddos'] !== $this->indeficator)
        {
            if (empty($_GET['antiddos']))
            {
                if (! $_COOKIE['ddos_log'] == '1')
                    //проверям есть ли запись в куках что был запрос
                    die('indeficator . '" />');
            } elseif ($_GET['antiddos'] == $this->indeficator)
            {
                setcookie('ddos', $this->indeficator, time() + 3600 * 24 * 7 * 356);
                setcookie('ddos_log', '1', time() + 3600 * 24 * 7 * 356); //типо запрос уже был чтоб не перекидывало постоянно рефрешем.
            }
            else
            {
                if (!$this->debug)
                    $this->ban();
                else
                {
                    echo "May be shall not transform address line?";
                    die("Блокированы.");
                }
            }
        }
    }
  
    /**
    * Третий тип защиты
    **/
    function addos3()
    {
        if (! isset($_SERVER['PHP_AUTH_USER']) || $_SERVER['PHP_AUTH_USER'] !== $this->ddosuser || $_SERVER['PHP_AUTH_PW'] !== $this->ddospass)
        {
            header('WWW-Authenticate: Basic realm="Vvedite parol\':  ' . $this->ddospass . ' | Login: ' . $this->ddosuser . '"');
            header('HTTP/1.0 401 Unauthorized');
            if (! $this->debug)
                $this->ban();
            else
                die("Блокированы.");
            die("401 Unauthorized");
        }
    }
}
/*
// Exmaple
$ad = new antiDdos(false);
$ad->dir = 'bots/';
$ad->ddos = 2;
$ad->start();
*/
?>
Скрипт Boolean

Код:


Код:
= time() - $config['time']){
            
            if (file_exists($config['directory'] . "/" . $config['banmask'] . $ip)){
                
                $count = file_get_contents($config['directory'] . "/" . $config['banmask'] . $ip);
                if ($count >= $config['countaban']){            
                    for($i = 0; $i = time() - $config['time']){
                        $count++;
                        $f=fopen( $config['directory'] . "/" . $config['banmask'] . $ip , 'w' );
                        fwrite($f,$count);
                        fclose($f);
                    }else{
                        $f=fopen( $config['directory'] . "/" . $config['banmask'] . $ip , 'w' );
                        fwrite($f,"1");
                        fclose($f);                        
                    }
                }      
                    
            }else{
                $f=fopen( $config['directory'] . "/" . $config['banmask'] . $ip , 'w' );
                fwrite($f,"0");  
                fclose($f);
            }
            exit($config['message']);
        }
        
    }else{    
        $f=fopen( $config['directory'] . "/" . $config['checkmask'] . $ip , 'w');    
        fclose($f);    
    }  
      
}  
?>
Скрипт нужно инклюдить в исполняемый файл, в index.php, например.

Создаем файл, допустим, antiddos.php, туда копируем любой код из вышеприведенных, затем в файле index.php пишем вверху:

Код:


Код:
include("antiddos.php");

exit; // нужно дать скрипту побанить ботов некоторое время, а потом можно закомментировать exit.
 
Ответить с цитированием
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.