Проект движка торрент-трекера CyBERhype Tracker

Пропустить

Проект CyBERhype Tracker

Anti DDoS - Защита от ддос атаки

Одно из самых главных в движке. Флуд будет неприменно удаляться вместе с юзером!

Модератор: LavR

Правила форума
Если вас попытались взломать, или взломали, то обязательно точно опишите, что именно нетак происходит с вашим сайтом и ОБЯЗАТЕЛЬНО приложите логи за тот день, когда начались неполадки, тогда 100% мы вам поможем!

Anti DDoS - Защита от ддос атаки

Сообщение zysx » 12 мар 2010, 12:43

Не знаю мож кому поможет Anti DDoS - Защита от ддос атаки

В корне создаём папку tmp и выдаём права 777
Открываем index.php и перед:
<?php Прописываем

Код: Выделить всёРазвернуть
<?php
/*
*--------------------------------------------------------
* Модуль antioverload
*--------------------------------------------------------
* Модуль предназначен для ограничения доступа к сайту или
* к страницам, где он включён.
* Принцип работы в том, что запоминается ip-адрес и время
* обращения с этого адреса. И если в течение заданного
* времени происходит обращение с того же адреса, то ему
* выдаётся ошибка 503.
* Модуль необходимо подключать к скрипту самым первым.
* Этим обеспечивается быстрота его работы.
*--------------------------------------------------------
*/

/* Время задержки в секундах */
$ad_delay=2;
/* Путь к папке с временными файлами. Должен существовать */
$ad_DirName=$_SERVER['DOCUMENT_ROOT'].'/tmp';

/*
*---------------------------------------------------------
* Список поисковых роботов.
* Очень не хорошо, если поисковый робот будет натыкаться
* на ошибки на сайте. Ему это может сильно не понравиться.
* Поэтому пишем список юзер-агентов роботов; добавляем или
* удаляем, что нужно.
*---------------------------------------------------------
*/
$ad_Robots_UserAgent=array(
   'aipbot',
   'Aport',
   'eStyleSearch',
   'Gigabot',
   'Gokubot',
   'Google',
   'MJ12bot',
   'msnbot',
   'PlantyNet_WebRobot',
   'StackRambler',
   'TurtleScanner',
   'Yahoo',
   'Yandex',
   'YaDirectBot',
);
/*
*---------------------------------------------------------
* Список доверенных IP.
*---------------------------------------------------------
*/
$ad_good_ip = array(
    'здесь доверенные ip',
);

/*
*----------------------------------------------------------
* Функция создаёт в указанной директории файл, начинающийся
* с буквы a (для отличия от других возможных файлов) и
* содержащий в имени ip-адрес клиента.
*----------------------------------------------------------
*/
function ad_WiteIP($dir){
   $f=fopen($dir.'/a'.$_SERVER['REMOTE_ADDR'], 'w');
   fclose($f);
}
/*
*----------------------------------------------------------
* Проверка на наличие в поле HTTP_USER_AGENT чего-нибудь из
* вышенаписанного списка.
*----------------------------------------------------------
*/
$ad_IsRobot=false;
foreach ($ad_Robots_UserAgent as $match){
   if (strstr($_SERVER['HTTP_USER_AGENT'], $match)){
      $ad_IsRobot=true;
      break;
   }
}
if( in_array($_SERVER['REMOTE_ADDR'], $ad_good_ip) ) {
     $good_ip = true;
} else {
     $good_ip = false;
}
/*
*---------------------------------------------------------
* Поисковые роботы не любят, когда к адресу страницы
* добавляется переменная сессии. Поэтому, если на сайте
* используются сессии, то их лучше включать, если агент -
* не робот.
* Если сессии не используются, то этот кусок можно убрать.
*---------------------------------------------------------
*/
if (!$ad_IsRobot AND !$good_ip){
   session_start();
}

if (!$ad_IsRobot AND !$good_ip){
   /*** Чтение каталога и удаление старых файлов ***/
   $ad_dir      =opendir($ad_DirName)
      or die('Отсутствует директория для временных файлов');
   $ad_now      =time();
   $ad_forbid   =$ad_now-$ad_delay;
   /* IP-адрес в имени файла, начинающегося на букву a,
      а время обращения - время изменения файла */
   while (false!==($ad_FName=readdir($ad_dir))){
      if (ereg('^a[1-9]',$ad_FName)
         && (@ filemtime($ad_DirName.'/'.$ad_FName)<$ad_forbid)){
         @ unlink($ad_DirName.'/'.$ad_FName);
      }
   }
   closedir($ad_dir);
   /*** Проверка на существование пометки
      о недавнем обращении с данного ip-адреса ***/
   if (file_exists($ad_DirName.'/a'.$_SERVER['REMOTE_ADDR'])){
      /* Если обращение было недавно, то выводим сообщение об ошибке */
      header('HTTP/1.0 503 Service Unavailable');
      header('Status: 503 Service Unavailable');
      header('Retry-After: '.$ad_delay*3);
?>
<!doctype html public "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Ошибка 503</title>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251" />
</head>
<body>
<h1>Ошибка 503 (Service Unavailable)</h1>
<p>Сервер не может в данный момент выдать запрашиваемую Вами страницу.
Попробуйте вызвать эту страницу позже (клавиша F5).</p>
</body>
</html>
<?php
      ad_WiteIP($ad_DirName);   // Перед выходом записываем ip
      exit;
   }else{
      ad_WiteIP($ad_DirName);
   }
}
?>


Тем самым мало мальски защищаемся от всяких спрутов которые валят сайт запросами,
IP- атакующей машины прописывется в папке tmp

По желанию...модуль можно установить на любой файл подвергающийся аттаке
Но так как спруты валят по ip... файла индекс вполне достаточно)))
Аватара пользователя
zysx
Зарегистрированный
 
Сообщения: 47
Зарегистрирован: 18 фев 2010, 15:17
Предупреждения: 0
Пол: Муж.

Re: Anti DDoS - Защита от ддос атаки

Сообщение ronnie2 » 12 мар 2010, 21:25

Как понять выдаем права 777?
ronnie2
Зарегистрированный
 
Сообщения: 1
Зарегистрирован: 12 мар 2010, 17:47
Предупреждения: 0
Пол: Муж.

Re: Anti DDoS - Защита от ддос атаки

Сообщение Huskar » 12 мар 2010, 22:04

так и понять открываеш например через тотал-командер выделаеш папку tmp верхний левый угол жмеш кнопку непомню какую там вкладка атрибуты там пиши 777
Надоели стандартные шаблоны? Тогда этот сайт для тебя! http://rip-studio.org.ua/ бесплатные шаблоны для твоего трекера, а также ты можеж заказать шаблон.
Помог, жми спасибо. А сначало читай F.A.Q Только патом создавай свою тему
Лог покажет, кто где срал (с)
Аватара пользователя
Huskar
Опытный участник
 
Сообщения: 562
Зарегистрирован: 05 ноя 2009, 19:20
Откуда: Брянск
Предупреждения: 0
Skype: huskar404
Пол: Муж.

Re: Anti DDoS - Защита от ддос атаки

Сообщение DENZEL519 » 12 мар 2010, 23:36

Это не одно и тоже? viewtopic.php?f=73&t=1054
Мой канал на youtube: http://www.youtube.com/user/DENZEL519

Мульти заливка файлов http://unextupload.com/user/pp_link/1e1 ... a4abb0e47d
Аватара пользователя
DENZEL519
Постоялец
 
Сообщения: 972
Зарегистрирован: 07 дек 2008, 17:26
Откуда: Россия, Москва
Предупреждения: 0
Пол: Муж.

Re: Anti DDoS - Защита от ддос атаки

Сообщение zysx » 13 мар 2010, 12:05

DENZEL519 писал(а):Это не одно и тоже? http://cyber-tm.ru/viewtopic.php?f=73&t=1054


Тот модуль у мну не пошёл,да и заморочки там больше,а здесь всё просто...да и про права 777 если на компе то ни каких прав на папку не ставте...
Аватара пользователя
zysx
Зарегистрированный
 
Сообщения: 47
Зарегистрирован: 18 фев 2010, 15:17
Предупреждения: 0
Пол: Муж.

Re: Anti DDoS - Защита от ддос атаки

Сообщение MIsteRS » 13 мар 2010, 23:08

Спорим на 10 баксов, что это не спасёт... Может от кнопки F5 спасёт и то не думаю :D

Кто поставил кидай те ссылку будем проверять :D
Аватара пользователя
MIsteRS
Хостер
 
Сообщения: 97
Зарегистрирован: 30 ноя 2008, 00:52
Предупреждения: 0
Skype: zenjok007
Пол: Муж.

Re: Anti DDoS - Защита от ддос атаки

Сообщение zysx » 15 мар 2010, 15:16

MIsteRS писал(а):Спорим на 10 баксов, что это не спасёт... Может от кнопки F5 спасёт и то не думаю :D

Кто поставил кидай те ссылку будем проверять :D



Ладно а на счёт этого вы тоже скажете что не спасёт?

Код: Выделить всёРазвернуть
<?php

class antiDdos
{
    // дебаг
    public $debug = false;
    // директория для хранения файлов индефикации запросов
    public $dir = '_bots/';
    // номер icq администратора
    public $icq = '123456';
    // сообщение при выключенном сайте
    public $off_message = 'Временные неполадки, пожалуйста, подождите.';
    // индивидуальный индефикатор
    private $indeficator = null;
    // сообщение при бане, работают шаблоны, можно использовать - {ICQ}, {IP}, {UA}, {DATE}
    public $ban_message = 'Вы были заблокированы antiddos системой.
                           Если это ошибка обратитесь к администратору, icq of admin: {ICQ}
                           <hr>(c)XakNet antiddos module, ваш IP - {IP}(<i>{UA}</i>), 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. выключать сайт если нагрузка слишком большая на сервере, боты не блокируются!!! Работает только на *nix
    */
    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() failed!');
        $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('<center><h1>503 Server too busy.</h1></center><hr><small><i>Server too busy. Please try again later. Apache server on ' . $_SERVER['HTTP_HOST'] . ' at port 80 with <a href="http://forum.xaknet.ru/">ddos protect</a></i></small>');
                }
                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('<meta http-equiv="refresh" content="0;URL=?antiddos=' . $this->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("<h1>401 Unauthorized</h1>");
        }
    }
}
/*
// Exmaple
$ad = new antiDdos(false);
$ad->dir = 'bots/';
$ad->ddos = 2;
$ad->start();
*/
?> 


Установка:
1. Загрузить скрипт на сервер
2. Подключить скрипт в систему через include
3. Инициализировать объект, проще говоря - см. Example внизу скрипта
4. Выбрать тип атаки($object->ddos = type)
5. Указать директорию с ботами и создать её, а так же создать файл banned_ips вней($object->dir = 'bots')
6. Начать фильтровать запросы($object->start())
Последний раз редактировалось zysx 21 мар 2010, 08:21, всего редактировалось 1 раз.
Аватара пользователя
zysx
Зарегистрированный
 
Сообщения: 47
Зарегистрирован: 18 фев 2010, 15:17
Предупреждения: 0
Пол: Муж.

Re: Anti DDoS - Защита от ддос атаки

Сообщение DENZEL519 » 17 мар 2010, 01:00

Ты мод проверял7
Код: Выделить всёРазвернуть
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at D:\apache\big-torrents.ru\torrents\index.php:1) in D:\apache\big-torrents.ru\torrents\index.php on line 95
Мой канал на youtube: http://www.youtube.com/user/DENZEL519

Мульти заливка файлов http://unextupload.com/user/pp_link/1e1 ... a4abb0e47d
Аватара пользователя
DENZEL519
Постоялец
 
Сообщения: 972
Зарегистрирован: 07 дек 2008, 17:26
Откуда: Россия, Москва
Предупреждения: 0
Пол: Муж.

Re: Anti DDoS - Защита от ддос атаки

Сообщение WereWolf » 08 апр 2010, 21:23

ни какой php скрипт не спасет ни от какого dossa
допустим я начинаю doss скрипт "пытаеться" что то сделать нагружая apache и без того нагруженым расплодившимися процессами и сервер нагинаеться по полной, так что скрипт больше чем бесполезен
хотите отблагодарить?
R363461456951 U331159272609 Z100883234209

Настройка серверов, VPS, VDS, установка компонентов сервера, настройка компонентов, установка панелей управления, переустановка ОС на удаланнемо сервере, работаю только с unix система (FreeBSD, CentOS, Debian, Ubuntu и др.)
(настройка серверов)

Изображение
Аватара пользователя
WereWolf
Участник
 
Сообщения: 214
Зарегистрирован: 09 дек 2008, 13:31
Откуда: Украина
Предупреждения: 0
Пол: Муж.

Re: Anti DDoS - Защита от ддос атаки

Сообщение MIsteRS » 18 апр 2010, 21:14

WereWolf писал(а):ни какой php скрипт не спасет ни от какого dossa
допустим я начинаю doss скрипт "пытаеться" что то сделать нагружая apache и без того нагруженым расплодившимися процессами и сервер нагинаеться по полной, так что скрипт больше чем бесполезен

Полностью согласен, лучше на сервак поставить антивирирь или настроить грамотно FireWol.
:geek:
Аватара пользователя
MIsteRS
Хостер
 
Сообщения: 97
Зарегистрирован: 30 ноя 2008, 00:52
Предупреждения: 0
Skype: zenjok007
Пол: Муж.

След.

Вернуться в Безопасность

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0