1.Способы защиты сервера авторизации и игрового сервера wow 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())
Quote <?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. выключать сайт если нагрузка слишком большая на сервере, боты не блокируются!!! */ 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 отредактировано Intel(R) - Понедельник, 21.05.2012, 21:13
|