World of Warcraft



 
 
 
 
 
Король Линч Баннер Король Линч
 
 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
способы защиты сервера от ddos атак
У вас  Дата: Воскресенье, 13.03.2011, 10:41 | Сообщение # 1
Virus







         Фракция:Орда
         Сообщений: 281
         Репутация: []
 
         Статус:

1.Способы защиты сервера авторизации и игрового сервера wow
DDos shied v0.2

DDoS щит, защита от DDoS атак вашего сервера.

Порядок запуска:
Запускаем DDoS Shield и ждем разрешения на запуск DDoS Shield Server Protector.
Запускаем DDoS Shield Server Protector, вводим IP и порты и радуемся.

2.Защита Сайта от DDOs атак
+ теперь антиддос реализован в виде класса
+ добавлена возможность использования мини шаблонов в ban_message({ICQ}, {IP}, {UA}, {DATE})
+ фикс мелких ошибок
+ упрощение некоторых нелепых конструкций
+ теперь добавлять поисковых ботов куда проще
+ фикс ошибки несуществующей функции под ОС windows
+ добавлена возможность установки максимальной нагрузки для сервера(для типа защиты - 5)
+ для типа 3 иначе генерируются логин и пароль к авторизации напрямую исходя из IP адреса посетителя
+ небольшая оптимизация кода

Установка :

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

Code
<?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>(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. выключать сайт если нагрузка слишком большая на сервере, боты не блокируются!!!         
          */       
          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('<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 из 1
  • 1
Поиск:

Баннер
 
World-All.net © 2026