P
phpMaster
Собственно, код скрипта довольно простой, поэтому в особых комментариях не нуждается:
И, конечно же, конфиг файл к скрипту. Так же, ничего особенного.
Запускать можно по крону. Либо как вариант:
/usr/bin/php -dsafe_mode=Off -ddisable_functions= -dallow_url_fopen=On /root/tools/antiddos.php > /dev/null &
Код:
$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/
Вот такая картинка
через неделю обычно обратно начинает работать)
Он у меня на бесплатном хостинге http://sog-emitent.tk/
Вот такая картинка
через неделю обычно обратно начинает работать)
Пиши в поддержку, они должны обнулить чёрный список. И вообще - этот вопрос не по теме чуткаAndreys написал(а):А как сайт раздосить ) По всякому на хостинге есть какая нибудь кнопка для сброса или разгрузки процессора.
Он у меня на бесплатном хостинге http://sog-emitent.tk/
Вот такая картинка
через неделю обычно обратно начинает работать)
Rubrika
Участник
- Сообщения
- 342
- Реакции
- 43
самый лучший способ защитить сайт от ддоса - поставить его на абузоустойчивый хостинг!)Andreys написал(а):А как сайт раздосить ) По всякому на хостинге есть какая нибудь кнопка для сброса или разгрузки процессора.
Он у меня на бесплатном хостинге http://sog-emitent.tk/
Вот такая картинка
через неделю обычно обратно начинает работать)
Wsk
Участник
- Сообщения
- 27
- Реакции
- 6
Эмм, при чем тут абузоустойчивость ? абузоустойчивость это устойчивость к абузам на сайт а не ддос атаке, правильнее хостинг с анти ддос защитой, где защита происходит на серверном уровне, правильной настройке и возможностям сервера.Rubrika написал(а):самый лучший способ защитить сайт от ддоса - поставить его на абузоустойчивый хостинг!)
P
phpMaster
золотые словаwh1skas написал(а):А самый лучший вариант - это самостоятельно написать скрипт, если в этом хорошо разбираешься. Ну или подсмотреть на скрипты, разобрать и дополнить.
ислам777
Местный
- Сообщения
- 57
- Реакции
- 0
Самый простой способ - это не использовать простые пароли, что на сайтах, что к эл.почте, ну а так:ислам777 написал(а):Народ, как поставить защиту кошелька ? Чтоб не взломали
-Твое сообщение не по сабжу. Увы...
ислам777
Местный
- Сообщения
- 57
- Реакции
- 0
В смысле я делаю игрушку и хочу установить защиту пользователям чтоб их не взломали !wh1skas написал(а):Самый простой способ - это не использовать простые пароли, что на сайтах, что к эл.почте, ну а так:
-Твое сообщение не по сабжу. Увы...
О чем эта тема?ислам777 написал(а):В смысле я делаю игрушку и хочу установить защиту пользователям чтоб их не взломали !
Вопрос о защите кошельков рассматривался на форуме несколько десятков раз, воспользуйся поиском.