Простейшая защита от ddos на php

  • Автор темы phpMaster
  • Дата начала
P
phpMaster
Собственно, код скрипта довольно простой, поэтому в особых комментариях не нуждается:
Код:
$config    = 'conf.ini'; $config    = parse_ini_file($config, true); /** некоторые настройки php, для localhost **/ header('Content-Type: text/plain; charset=UTF-8'); ob_implicit_flush(); set_time_limit(0); $skip = array(); $data = array(); while(true): /* По желанию, можно запускать из крона */ $content    = $config['logs']['use'] == 'file' ? file($config['logs']['file'])                                               : explode("\n", shell_exec($config['logs']['command'])); /** * Функция проверяет значение максимального лимита для заданного ip на какой-либо параметр * @param string $e параметр * @param string $ip ip */ function check($e, $ip){     global $data, $config, $skip;     $ipdata = $data[$ip][$e];     if(($d = count($ipdata)) >= $config['block']['max_' . $e]){         block($ip, 'max_' . $e . '=' . $config['block']['max_' . $e]);         $skip[] = $ip;     } } /** * Функция блокирования ip * @param string $ip ip */ function block($ip, $r = false){     print "block: {$ip}" . ($r !== false ? ", $r" : '') . "\n";     shell_exec('/sbin/iptables -I INPUT -j DROP -s ' . $ip);     file_put_contents('/a/' . date('d-m-Y') . '.log', "{$ip}\n", FILE_APPEND); } /** * Возвращает массив с распознанными данными. * @param string $line * @return array */ function recognize($line){     while(strstr($line, '[[') || strstr($line, ']]'))         $line = str_replace(array(']]', '[['), array(']', '['), $line);     preg_match_all('|\-([a-z]{1,})\[(.*)]|U', $line, $arr);     $recognize = array();     foreach($arr[1] AS $i => $j){         $recognize[$j] = $arr[2][$i];     }     return (array) $recognize; } foreach($content AS $line){     $request = recognize($line);     if(!isset($request['ip'])){         continue;     }     if(in_array($request['ip'], $skip)){         unset($data[$request['ip']]);         continue;     }         if(!isset($data[$request['ip']])){         $data[$request['ip']] = array('ua' => array(), 'referer' => array());     }             if($request['ua'] == '' || $request['ua'] == '-'     || $request['referer'] == '' || $request['referer'] == '-'){         if(strtoupper($config['block']['empty']) == 'ON'){             block($request['ip']); continue;            }     }     if($request['ua'] = trim($request['ua'])){         if(! in_array($request['ua'], $data[$request['ip']]['ua'])){                         $data[$request['ip']]['ua'][] = $request['ua'];             if(check('ua', $request['ip']))                 continue;         }     }         $referer = @parse_url($request['referer']);     if($referer['host'] = trim($referer['host']) && $referer['host'] != $request['host']){         if(! in_array($referer['host'], $data[$request['ip']]['referer'])){             $data[$request['ip']]['referer'][] = $referer['host'];             check('referer', $request['ip']);         }        } } sleep(1); endwhile;
И, конечно же, конфиг файл к скрипту. Так же, ничего особенного.
Код:
[logs]
;команда для получения логов
;command  = "cat /var/log/* | grep 192.168.15.7"
command  = "cat logs/deweber.org.acc_log * | grep 192.168.15.7"
;файл с логами
file  = "httpd-traffic.log"
;доставать логи из файла или выполнять команду
;command/file
use   =  "command"
[ban]
empty  =  On
max_ua  =  5
max_referer = 10
Запускать можно по крону. Либо как вариант:

/usr/bin/php -dsafe_mode=Off -ddisable_functions= -dallow_url_fopen=On /root/tools/antiddos.php > /dev/null &
 
Andreys
Участник
Сообщения
576
Реакции
40
А как сайт раздосить ) По всякому на хостинге есть какая нибудь кнопка для сброса или разгрузки процессора.
Он у меня на бесплатном хостинге http://sog-emitent.tk/
Вот такая картинка

через неделю обычно обратно начинает работать)
 
AriCosmo
Участник
Сообщения
515
Реакции
115
Skype
Andreys написал(а):
А как сайт раздосить ) По всякому на хостинге есть какая нибудь кнопка для сброса или разгрузки процессора.
Он у меня на бесплатном хостинге http://sog-emitent.tk/
Вот такая картинка

через неделю обычно обратно начинает работать)
Пиши в поддержку, они должны обнулить чёрный список. И вообще - этот вопрос не по теме чутка
 
Rubrika
Участник
Сообщения
342
Реакции
43
Andreys написал(а):
А как сайт раздосить ) По всякому на хостинге есть какая нибудь кнопка для сброса или разгрузки процессора.
Он у меня на бесплатном хостинге http://sog-emitent.tk/
Вот такая картинка

через неделю обычно обратно начинает работать)
самый лучший способ защитить сайт от ддоса - поставить его на абузоустойчивый хостинг!)
 
Wsk
Участник
Сообщения
27
Реакции
6
Rubrika написал(а):
самый лучший способ защитить сайт от ддоса - поставить его на абузоустойчивый хостинг!)
Эмм, при чем тут абузоустойчивость ? абузоустойчивость это устойчивость к абузам на сайт а не ддос атаке, правильнее хостинг с анти ддос защитой, где защита происходит на серверном уровне, правильной настройке и возможностям сервера.
 
wh1skas
wildcake
Участник
Сообщения
1.017
Реакции
432
ICQ
564739604 564739604
А самый лучший вариант - это самостоятельно написать скрипт, если в этом хорошо разбираешься. Ну или подсмотреть на скрипты, разобрать и дополнить.
 
P
phpMaster
wh1skas написал(а):
А самый лучший вариант - это самостоятельно написать скрипт, если в этом хорошо разбираешься. Ну или подсмотреть на скрипты, разобрать и дополнить.
золотые слова
 
ислам777
Местный
Сообщения
57
Реакции
0
Народ, как поставить защиту кошелька ? Чтоб не взломали
 
wh1skas
wildcake
Участник
Сообщения
1.017
Реакции
432
ICQ
564739604 564739604
ислам777 написал(а):
Народ, как поставить защиту кошелька ? Чтоб не взломали
Самый простой способ - это не использовать простые пароли, что на сайтах, что к эл.почте, ну а так:

-Твое сообщение не по сабжу. Увы...
 
ислам777
Местный
Сообщения
57
Реакции
0
  • #10
wh1skas написал(а):
Самый простой способ - это не использовать простые пароли, что на сайтах, что к эл.почте, ну а так:

-Твое сообщение не по сабжу. Увы...
В смысле я делаю игрушку и хочу установить защиту пользователям чтоб их не взломали !
 
wh1skas
wildcake
Участник
Сообщения
1.017
Реакции
432
ICQ
564739604 564739604
  • #11
ислам777 написал(а):
В смысле я делаю игрушку и хочу установить защиту пользователям чтоб их не взломали !
О чем эта тема?
Вопрос о защите кошельков рассматривался на форуме несколько десятков раз, воспользуйся поиском.
 
Сверху