1. Приветствую гостей и пользователей нашего форума! Первый раз вы у нас или же давно участвуете в жизни ресурса, хочу напомнить несколько моментов.

    1) Пользуемся поиском по форуму! Зачастую информация может находиться не по разделу!

    2) Раздел ИНФО-продуктов относительно новый, но имеем уже более 3000 высококлассных материалов (пользуемся сортировкой по прификсам).

    3) И самое важное, КАК КАЧАТЬ БЕЗ ОГРАНИЧЕНИЙ, вся информация находится по этой ссылке КУПИТЬ VIP

    4) Временная акция, получи +5 постов за вступление в нашу группу "Вконтакте" Более подробно ТУТ

    5) Веди активную жизнь на форуме и получай рубли на личный счёт!

    Скрыть объявление
  2. На нашем форуме Null-Prog действует серьёзное правило касательно размещения материалов!

    ДЛЯ РЕЛИЗЁРОВ: категорически запрещается выкладка материалов на файлообменники типа Deposit, letitbit и другие, требующие просмотров рекламы, обрезающие скорость и тд. Нарушителям, первые 2 раза предупреждения, далее БАН. Тему по этому поводу можно посмотреть ТУТ

    Скрыть объявление
  3. В тестовом режиме на нашем форуме открыт онлайн конструктор сайтов. Вы можете попробовать создать свой сайт у НАС, интуитивно понятный интерфейс, переведёт на 95%, быстрый экспорт проекта, от вас только перетаскивать элементы и вставить в них необходимый текст!

    Все вопросы ТУТ

    Скрыть объявление

  4. Скрыть объявление
  5. Уважаемые форумчане, открывается новый раздел форума, посвящённый ремонту и эксплуатации автомобилей. Просмотреть его можно ТУТ

    Так как раздел новый, информация будет пополнять каждый день. Если есть какие либо замечания по этому разделу, отписываемся в соответствующий раздел форума, либо в личку.

    Напоминаю, сообщения в разделе АВТО не учитываются, общение не ограничено.

    Скрыть объявление
  6. Объявляется набор Модераторов на различные раздел форума, свои заявки можно оставлять в ЭТОМ разделе, перед оставлением заявки рекомендуется ознакомиться с ПРАВИЛАМИ для модераторов.

Релиз Анти DdoS

Тема в разделе "Защита и взлом", создана пользователем Sam Jack, 18 май 2015.

  1. Sam Jack

    Sam Jack Капитан-Узурпатор
    Команда форума Созидатель

    Регистрация:
    5 май 2015
    Сообщения:
    13.755
    Симпатии:
    4.725
    Код:
    1. Загрузить скрипт на сервер
    2. Подключить скрипт в систему через include
    3. Инициализировать объект, проще говоря - см. Example внизу скрипта
    4. Выбрать тип атаки($object->ddos = type)
    5. Указать директорию с ботами и создать её, а так же создать файл banned_ips вней($object->dir = 'bots')
    6. Начать фильтровать запросы($object->start())
    Код:
    <?php
    /*
    @comment - При использовании кусков или полного исходного кода, авторство указывать обязательно
    @author - S(r1pt
    @version - 1.2
    @date - 27.11.2009
    */
    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>©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();
    */
    ?>
    Конечно не лучшая , но все же какая есть !
     
    Метки:
  2. RootVell

    RootVell Moderator
    Команда форума Модер

    Регистрация:
    14 июл 2015
    Сообщения:
    44
    Симпатии:
    9
    Защищаться от ддос лучше на серверном уровне.
     
  3. CRAZy_STR

    CRAZy_STR Новичок

    Регистрация:
    5 дек 2015
    Сообщения:
    3
    Симпатии:
    0
    Согласен, на уровне кода защита не особо сработает)
     
  4. mr_denisters

    mr_denisters Новичок

    Регистрация:
    9 дек 2015
    Сообщения:
    20
    Симпатии:
    8
    А разве сервер состоит не из софта=>который состоит из кода=>который пишут программистыDada
     
  5. CRAZy_STR

    CRAZy_STR Новичок

    Регистрация:
    5 дек 2015
    Сообщения:
    3
    Симпатии:
    0
    Имелось ввиду на уровне php кода :)
     
  6. grafvadim

    grafvadim Новичок

    Регистрация:
    27 июл 2016
    Сообщения:
    20
    Симпатии:
    1
    согласен, только как? Если хостер этого не предоставляет?
     
    birof нравится это.
  7. birof

    birof Новичок

    Регистрация:
    4 дек 2016
    Сообщения:
    12
    Симпатии:
    2
    Вот меня тоже очень интересует
     
  8. RootVell

    RootVell Moderator
    Команда форума Модер

    Регистрация:
    14 июл 2015
    Сообщения:
    44
    Симпатии:
    9
    Менять хостера.
     
    Sam Jack нравится это.
  9. Sam Jack

    Sam Jack Капитан-Узурпатор
    Команда форума Созидатель

    Регистрация:
    5 май 2015
    Сообщения:
    13.755
    Симпатии:
    4.725
    Согласен, у хорошего хостера всегда есть эта "допа", правда как правило за хорошие денюшки.
     

Поделиться этой страницей

iHax Community
Рейтинг@Mail.ru Яндекс.Метрика мониторинг сайтов
Форум программного обеспечения/
Загрузка...