Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Защита сервера от DOS атак и\или HTTP флуда

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Помогите пожалуйста)
STRELOK
Отправлено: 26 Марта, 2011 - 17:44:00
Post Id



Гость


Покинул форум
Сообщений всего: 101
Дата рег-ции: Янв. 2010  
Откуда: Ульяновск


Помог: 0 раз(а)




Приветствую!
Подскажите пожалуйста, как правильнее всего сделать защиту сервера от перегруза, чтобы не было скачков потребления ресурсов если много посетителей, или имеет месть быть атака.

Желательно с примерами, и желательно буз использования баз данных.

Заранее спасибо)
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Марта, 2011 - 20:07:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Самое простое при обработке некоторых запросов ставить sleep/usleep();
Значение подобрать опытным путем.
Например форма входа.
PHP:
скопировать код в буфер обмена
  1. if (isset($_POST['login']) && isset($_POST['pass'])) { sleep(2); и дальнейшие действия; }

То же относится и к частым Ajax-запросам на страницах.

Так же можно использовать кеширование часто запрашиваемых страниц.
Лейте контент прямо в файл.
Типо - карта сайта. И проверку: (filemtime(файл кеша страницы) < часа) ? отдать его : лезем в базу, строим карту;
 
 Top
STRELOK
Отправлено: 26 Марта, 2011 - 20:09:25
Post Id



Гость


Покинул форум
Сообщений всего: 101
Дата рег-ции: Янв. 2010  
Откуда: Ульяновск


Помог: 0 раз(а)




Сайт простой, аякса и форм нет. Просто страничка программы и загрузка, ну есть немного функционала по лицензиям, проверке новых версий, списка серверов.

В общем сайт простой, а нагрузка от него большая...
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Марта, 2011 - 20:15:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




STRELOK пишет:
проверке новых версий, списка серверов

Вот это и кешируйте.
 
 Top
OrmaJever
Отправлено: 26 Марта, 2011 - 20:20:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




средствами php защищатся от ддос это не верно. При слабой атаке поможет а при сильной наоборот нагрузит сервер сильнее!


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Марта, 2011 - 20:24:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




OrmaJever примеры???
 
 Top
HotBird
Отправлено: 26 Марта, 2011 - 20:47:45
Post Id



Гость


Покинул форум
Сообщений всего: 114
Дата рег-ции: Сент. 2010  


Помог: 2 раз(а)




STRELOK возможно у вас в скрипте где-то используются циклы типа while (true) ?


-----
Человек, сделавший синтаксический анализатор PHP на одном регулярном выражении, займет достойное место среди гениев.
Качественный хостинг по доступной цене
 
 Top
OrmaJever
Отправлено: 26 Марта, 2011 - 21:40:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




DeepVarvar пишет:
OrmaJever примеры???

наверно пол года назад решил протестить анти ддос скрипты нашёл гдето тут
Принцип не сложный, записывают в файл ip адрес и вродебы время последнего доступа, затем в скрипте проверяют частоту запросов. (точный принцып не помню)
Поставил такой скрипт на форум phpbb (был под рукой).
Сервер был апач и убунта.
Попросил 3 друзей подосить с винды програмой LOIC.
с этим скриптом система очень зависала а запросы терялись. Затем поставил nginx и снова где то в яндексе нашёл неплохие настройки от ддоса и снова попросил подосить тех же троих. Система слегка подлагивала но сервер спокойно работал, вот и зделал вывод что толку от них мало, а учитывая что при каждом конекте они открывают файл с ip то систему это наверно грузит даже больше чем без него Растерялся


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
xhugo
Отправлено: 26 Марта, 2011 - 22:39:08
Post Id



Посетитель


Покинул форум
Сообщений всего: 357
Дата рег-ции: Дек. 2010  


Помог: 1 раз(а)




Вот довольно нормальный скрипт для антиддоса.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. #(c) Boolean.  
  3. #####################################################################################
  4. #####################################################################################
  5. #####################################################################################
  6. #####################################################################################
  7.  
  8. $config['time']                 = 2;
  9. #Время обращения к скрипту, после которого будет(возможно) выдан бан.
  10. $config['countaban']            = 5;
  11. #количество возможных нарушений времени обращения, такая возможность введена для более детально точного отделения пользователей от атакующих ботов.  
  12. $config['directory']            = '_temp';
  13. #временна директория, должна существовать, и иметь права на запись.
  14. $config['checkmask']            = 'check';
  15. #маска для проверки, не стоит трогать.
  16. $config['banmask']              = 'ban';
  17. #маска для бана, не стоит трогать.
  18.  
  19. #Комманды после нарушения времени и кол-ва обращений. Используйте константу [IP] - IP Бота.
  20. $config['commands'][]           = 'iptables -A ISPMGR -s [IP] -j DROP';
  21. $config['commands'][]           = 'iptables -I INPUT -s [IP] -j DROP';
  22.  
  23. #Доверенные IP.
  24. $config['white']['ip']          = @file('whiteips.txt');
  25. #Доверенные ЮзерАгенты.
  26. $config['white']['useragent'][] = 'Google bot';
  27. $config['white']['useragent'][] = 'Yasha bot';
  28.  
  29. #Сообщение для пользователя. HTML Работает.
  30. $config['message']              = file_get_contents("ddosmessage.html");
  31.  
  32. #####################################################################################
  33. #####################################################################################
  34. #####################################################################################
  35. #####################################################################################
  36.  
  37. $ip                             = $_SERVER['REMOTE_ADDR'];
  38. $useragent                      = $_SERVER['HTTP_USER_AGENT'];
  39. if ( ! is_dir($config['directory']) )
  40.     exit("Temp directory not found.");
  41.  
  42. if ( ! is_writable($config['directory']) )
  43.     exit("Temp directory is not writable.");
  44.  
  45. if ( @in_array($ip,$config['white']['ip']) || @in_array($useragent,$config['white']['useragent']) )
  46.     $white = true;
  47.  
  48. if ( ! $white ){
  49.      
  50.     if ( file_exists( $config['directory'] . "/" . $config['checkmask'] . $ip ) ){        
  51.          
  52.         $time = filemtime($config['directory'] . "/" . $config['checkmask'] . $ip);
  53.  
  54.         $f=fopen( $config['directory'] . "/" . $config['checkmask'] . $ip , 'w' );  
  55.         fclose($f);
  56.                  
  57.         if ($time >= time() - $config['time']){
  58.              
  59.             if (file_exists($config['directory'] . "/" . $config['banmask'] . $ip)){
  60.                  
  61.                 $count = file_get_contents($config['directory'] . "/" . $config['banmask'] . $ip);
  62.                 if ($count >= $config['countaban']){            
  63.                     for($i = 0; $i <= count($config['commands']) - 1; $i++)
  64.                         @system(str_replace("[IP]",$ip,$config['commands'][$i]));                    
  65.                 }else{
  66.                     $time = filemtime($config['directory'] . "/" . $config['banmask'] . $ip);
  67.                     if ($time >= time() - $config['time']){
  68.                         $count++;
  69.                         $f=fopen( $config['directory'] . "/" . $config['banmask'] . $ip , 'w' );
  70.                         fwrite($f,$count);  
  71.                         fclose($f);
  72.                     }else{
  73.                         $f=fopen( $config['directory'] . "/" . $config['banmask'] . $ip , 'w' );
  74.                         fwrite($f,"1");  
  75.                         fclose($f);                        
  76.                     }
  77.                 }        
  78.                      
  79.             }else{
  80.                 $f=fopen( $config['directory'] . "/" . $config['banmask'] . $ip , 'w' );
  81.                 fwrite($f,"0");  
  82.                 fclose($f);
  83.             }
  84.  
  85.             exit($config['message']);
  86.         }
  87.          
  88.     }else{    
  89.         $f=fopen( $config['directory'] . "/" . $config['checkmask'] . $ip , 'w');      
  90.         fclose($f);    
  91.     }  
  92.        
  93. }    
  94. ?>


p.s. по сути эти скрипты нифига не помогут при большой атаки. тут уже нужно думать о хостинге.. распределенка т.д.
 
 Top
STRELOK
Отправлено: 27 Марта, 2011 - 08:47:10
Post Id



Гость


Покинул форум
Сообщений всего: 101
Дата рег-ции: Янв. 2010  
Откуда: Ульяновск


Помог: 0 раз(а)




Спасибо!)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB