Защита Обвязки
Система обнаружения и погашения DDOS-атаки http флудом
Идея написания подобной системы возникла у меня, после того как в очередной раз один из моих сайтов подвергся DDOS атаке, в то время я висел на обычном хостинге, где за каждый мегабайт трафика приходилось платить, и сумма в итоге итак выходила не маленькая, а тут еще эта DDOS атака, хорошо еще, что я в тот момент был рядом и вовремя успел отключить доступ к сайту. Тут конечно же в аську стукнул тот самый ддосер с требованиями заплатить, его я само собой послал подальше. Как понимаете, отключение сайта и пережидание атаки это не выход, она может возобновиться когда угодно, и вас рядом может не оказаться, поэтому с этим нужно бороться.
Сразу предупреждаю, система написана на php и предназначена только для ослабления атаки http flood, от другого типа ddos атаки, к примеру: icmp и udp на уровне обычного владельца веб сайта защититься невозможно.
Вкратце о системе: система включает модуль обнаружения DDOS атаки, который производит постоянный мониторинг загруженности сайта, путем отслеживания количества приходящих запросов в секунду, в случае если количество запросов в секунду превысит 10 (это по умолчанию, можно выставить больше), то подключается модуль погашения атаки, который начинает вычислять IP адреса атакующих машин-зомби и заносить их в блэклист, мониторинг при этом отключается по умолчанию на 1 час.
Принцип действия я думаю, понятен, вот сам код:
К примеру, создадим каталог anti_ddos и кидаем все скрипты туда:
index.php (модуль обнаружения DDOS атаки):
PHP код:
$ad_ddos_query=10; // количество запросов в секунду для обнаружения DDOS атаки
$ad_check_file='check.txt'; // файл для записи текущего состояния во время мониторинга
$ad_temp_file='all_ip.txt'; // временный файл
$ad_black_file='black_ip.txt'; // будут заносится ip машин зомби
$ad_white_file='white_ip.txt'; // заносятся ip посетителей
$ad_dir='anti_ddos'; // каталог со скриптами
$ad_num_query=0; // текущее количество запросов в секунду из файла $check_file
$ad_sec_query=0; // секунда из файла $check_file
$ad_end_defense=0; // время окончание защиты из файла $check_file
$ad_sec=date("s"); // текущая секунда
$ad_date=date("mdHis"); // текущее время
$ad_defense_time=10000; // при обнаружении ddos атаки время в секундах на которое прекращается мониторинг
if(!file_exists("{$ad_dir}/{$ad_check_file}") or !file_exists("{$ad_dir}/{$ad_temp_file}") or !file_exists("{$ad_dir}/{$ad_black_file}") or !file_exists("{$ad_dir}/{$ad_white_file}") or !file_exists("{$ad_dir}/anti_ddos.php")){
die("Не хватает файлов.");
}
require("{$ad_dir}/{$ad_check_file}");
if ($ad_end_defense and $ad_end_defense>$ad_date){
require("{$ad_dir}/anti_ddos.php");
} else {
if($ad_sec==$ad_sec_query){
$ad_num_query++;
} else {
$ad_num_query='1';
}
if ($ad_num_query>=$ad_ddos_query){
$ad_file=fopen("{$ad_dir}/{$ad_check_file}","w");
$ad_end_defense=$ad_date+$ad_defense_time;
$ad_string='<?php $ad_end_defense='.$ad_end_defense.'; ?>';
fputs($ad_file,$ad_string);
fclose($ad_fp);
} else {
$ad_file=fopen("{$ad_dir}/{$ad_check_file}","w");
$ad_string='<?php $ad_num_query='.$ad_num_query.'; $ad_sec_query='.$ad_sec.'; ?>';
fputs($ad_file,$ad_string);
fclose($ad_fp);
}
}
?>
anti_ddos.php (модуль погашения DDOS атаки):
PHP код:
<?php
function getIP() {
if(getenv("HTTP_CLIENT_IP") and preg_match("/^[0-9\.]*?[0-9\.]+$/is",getenv("HTTP_CLIENT_IP")) and getenv("HTTP_CLIENT_IP")!='127.0.0.1') {
$ip = getenv("HTTP_CLIENT_IP");
} elseif(getenv("HTTP_X_FORWARDED_FOR") and preg_match("/^[0-9\.]*?[0-9\.]+$/is",getenv("HTTP_X_FORWARDED_FOR")) and getenv("HTTP_X_FORWARDED_FOR")!='127.0.0.1') {
$ip = getenv("HTTP_X_FORWARDED_FOR");
} else {
$ip = getenv("REMOTE_ADDR");
}
return $ip;
}
$ad_ip=getIP();
$ad_source=file("{$ad_dir}/{$ad_black_file}");
$ad_source=explode(' ',$ad_source[0]);
if (in_array($ad_ip,$ad_source)){die();}
$ad_source=file("{$ad_dir}/{$ad_white_file}");
$ad_source=explode(' ',$ad_source[0]);
if (!in_array($ad_ip,$ad_source)){
$ad_source=file("{$ad_dir}/{$ad_temp_file}");
$ad_source=explode(' ',$ad_source[0]);
if (!in_array($ad_ip,$ad_source)){
$ad_file=fopen("{$ad_dir}/{$ad_temp_file}","a+");
$ad_string=$ad_ip.' ';
fputs($ad_file,"$ad_string");
fclose($ad_fp);
?>
Сайт в данный момент подвергается DDOS атаке, если Вы не машина-зомби атакующая сайт нажмите на кнопку, иначе Ваш IP (<?=$ad_ip?>) будет заблокирован!!!
<form method="post">
<input type="submit" name="ad_white_ip" value="Кнопка">
</form>
<?php
die();
}
elseif ($_POST['ad_white_ip']){
$ad_file=fopen("{$ad_dir}/{$ad_white_file}","a+");
$ad_string=$ad_ip.' ';
fputs($ad_file,"$ad_string");
fclose($ad_fp);
}
else {
$ad_file=fopen("{$ad_dir}/{$ad_black_file}","a+");
$ad_string=$ad_ip.' ';
fputs($ad_file,"$ad_string");
fclose($ad_fp);
die();
}
}
?>
Также для работы скрипта понадобятся 4 файла check.txt, white_ip.txt, black_ip.txt и all_ip.txt создаем их в этом же каталоге и на все ставим права 666 (чтение и запись).
Желательно также во время атаки списки IP адресов атакующих машин формирующихся в файле black_ip.txt переносить постепенно в файл .htaccess и блокировать их оттуда, тогда нагрузка еще значительно снизится.
Пример файла .htaccess
Код:
Deny from 11.11.11.11 22.22.22.22 и т.д. через пробел
Да чуть не забыл, для подключения скрипта, в начале каждого файла, который может быть подвергнут атаке добавляем строчку:
Код:
require("anti_ddos/index.php");
Вот в общем и все, буду рад если будут дополнения =)
© ant0ha
Antichat.ru
solovec: Всё сделал , все пути прописал , а права как выставить в *.тхт файле???
я пользуюсь винсцп там это просто щелкаешь на папку правой кнопкой и выставляешь в properties на папке anti_ddos права.
Странно, но у меня все работает как по маслу.
смею предположить все-так что где-то ты что-то упустил
такая ошибка возникает именно от того что он не может найти какой-то файл.
Проверь у тебя все так:
http://dump.ru/files/n/n9822408/
не забудь правильно переписать пути.
solovec: Терь всё работает , но когда захожу на сайт вижу следующее : Warning: fclose(): supplied argument is not a valid stream resource in C:\AppServ\www\anti_ddos\index.php on line 43
С чем это связано?
А что у тебя в 43 строке?
Продолжаем защищать обвязку - скрипт, который позволяет защитить доступ к админскому вебинтерфейсу больше чем только защита пользователь/пароль. Вы можете cделать список IP адресов которым рызрешено рассматривать содержание. Кроме того, вы можете выбирать насколько строгой будет IP проверка (4 различных уровня). MySQL.Область администратора, созданная для вашей простоты использования.
http://dump.ru/files/n/n100373523/
solovec: Вот 43ья строка fclose($ad_fp);
Висит ошибка постоянно или потом все нормально?
Короче сайт открываеться , но в самом верху сайта висит та строчка тип ошибка на 43ей строке , сморел на неё минуту может меньше , потом надоело и закрыл сайт :)
— La2Psy.ru [ADM]Wh1tePower...
† Jack †: А можно чуть по подробнее о DDOS-атаках ????
можно, курс молодого хакера:
DDoS - сокращение от английского Distributed Denial of Service, что означает "распределенная атака "отказ в обслуживании"". Слово "распределенная" говорит о том, что атака производится не одним компьютером и, соответственно, не по одному каналу, а целой группой компьютеров-зомби, которые одновременно начинают атаку. Используется как грубая сила, так сказать, танком напролом, для завала сервера (3.14zDoS серверу) или роутера (3.14zDoS целому сегменту сети).
Приблизительная схема DDoS такова: хакер ломает кучу серваков по всему Инету, устанавливает туда DDoS-модули, а потом, когда возникает соответствующая необходимость, командует всем своим зомбированным сервакам валить жертву. Соответственно, чем больше у него таких зомби, тем страшнее атака. Только представь, ведь существуют DoS-атаки, которые позволяют забить более мощный канал, чем у атакующего, а при DDoS общая пропускная способность всех зазомбированных машин может в десятки раз превосходить пропускную способность атакуемого!
Хорош этот способ тем, что не требует от устроителя данного веселья толстого канала связи. В принципе, он может даже не находиться в сети во время атаки, так как в данном случае используется чужой канал, чужой трафик и чужие компьютеры. Еще один плюс, даже если при DDoS вылетит (вовремя выключат) половину компьютеров, атака все равно будет чувствительна для жертвы.
Работает это очень просто, и до сих пор загадка, почему данный вид атаки является наиболее свежим и малоиспользуемым. Как известно, любой канал Интернета не резиновый и имеет свои ограничения. Вот на этом все и основано, то есть забивание канала мусором. Иногда бессмысленным, иногда конкретными запросами, иногда пакеты формируются так, чтобы ответ сервера был по размеру больше запроса. DDoS-модули могут быть также разными по написанию и использованию, например, бывают этакие навороченные троянские кони с системой прицеливания, а бывают просто бомбы с часовым механизмом. Даже баннер при желании можно использовать как DDoS-модуль. Для распространения можно использовать чаты, форумы или мыло. В принципе, для DDoS можно заюзать прокси-сервер, но данный метод пока мало обкатан и не дает нужных результатов.
По видам можно разделить DDoS-модули на саморазмножающиеся (e-mail вирусяги) и размножающиеся вручную (ломаешь и ставишь). Для размножения вручную хорошо подходят компы в интернет-кафе, и если приготовиться к акции за пару месяцев, то можно осуществить хорошую атаку, а если есть друзья в других городах, готовые пройтись по местным интернет-кафешкам, то атака получится просто замечательная. Как правило, серверные модули после установки слушают порт и ждут команд, поэтому вероятность обнаружения у них выше, чем у молчаливых, которые имеют все данные о жертве в себе и ждут своего часа, никак не проявляя себя. Еще делят по запросам: на посылающих "мусор", это случайные данные, как правило, посылаются по UDP или ICMP; расширяющиеся, например, минимальный запрос на HTTP-сервер имеет длину пакета 7 байт, а ответ зависит от сервера, www.yahoo.com в ответ послал 21239 байт, что в 3000 раз больше; и загружающие сервер, что очень эффективно против поисковых машин и страниц, собранных с использованием Perl или PHP.
Итак, хакер нашел себе кучу компов и хочет завалить любимый сервер, как же найти слабое место? Для начала, как и перед любой битвой, надо изучить своего противника. Прежде всего узнать, какая стоит система на сервере, хотя бы примерно. Если это 95 или 98 форточки (что крайне маловероятно), то достаточно знать, что максимальное количество соединений на данной ОС - 255. Понадобится флудилка вроде PortFucker и примерно 3-4 машины. Запустив этот агрегат на порт 80, можно идти пить кофе, поскольку порты забьются достаточно быстро, и до тех пор, пока админ файрволом или роутером не отрежет запросы, сервер будет недоступен ввиду слишком большой занятости. Это больше всего похоже на анекдот про Ржевского, помнишь? Дали мне одну свечку в левую руку, вторую - в правую, дают третью, а я и не знаю, куда ее деть... Вот так и сервер - вроде как занят, вроде работает, а никто этого не видит. Пойдем дальше: если это NT4/2000/XP, то можно и старым способом, но надо значительно больше машин, при 64М RAM на сервере он нормально держит 7000 соединений, а значит надо 30 машин под 95/98, можно и 2-3 под NT, но сами зомби тоже порядком подвиснут. В данном случае можно просто загрузить сервер мусором и забить канал (UDP пакеты), что сильно затормозит сервер. Но как на NT, так и на любом сервере Linux есть такая хорошая вещь, как timeout, то есть ограничение по времени. Это очень скользкая часть, поскольку если ограничение маленькое (1-2 секунды), то клиенты на медленном канале будут с трудом получать необходимое. Но если Timeout около минуты, то это самое слабое место, причем нет разницы, где он установлен, на POP3-порту или на FTP. Можно написать прогу, которая будет коннектиться, посылать команду типа "help" и опять коннектиться, и опять "help", поскольку сервер не отличает "хорошего" клиента от зомби, он будет вынужден висеть с каждым клиентом по минуте, а это достаточно для забивания всех возможных ресурсов. Если же жертва - поисковый сервер, то можно сконнектиться, сделать запрос по букве "а", вторым сконнектиться, сделать запрос по букве "б" и т.д. Все закончится тем, что сервер будет искать и мучить себя до потери пульса, а пульс сервак "пень-3/256Mb/канал на 64к" потерял после двенадцатого запроса. Если же это определенно линух, да еще и на хорошей машине, то тут только мусор, то есть если машина хороша, то слабое место в ней - это ее канал в И-нет, а следовательно, надо набирать как можно больше зомби и устраивать одноразовую массовую бомбардировку.
Ну, допустим, что с жертвой мы разобрались, теперь давай посмотрим на хакерское "оборудование", то есть программы для зомбирования машин. Прежде надо определиться, что именно лучше всего подходит. Если есть доступ к большому количеству интернет-кафе и им подобным заведениям, то писать надо определенно под форточки. Если же есть огромное количество серваков с возможностью запуска Perl, то на нем и надо писать. А если имеется просто 2000000 показов баннеров и при этом есть возможность показывать Flash-баннеры или html-баннеры (что значительно лучше) то ими и надо пользоваться. Затем, выбрав на чем писать и выбрав тактику нападения, неплохо посчитать, сколько надо машин и что лучше делать - серверподобного зомби или же все-таки бомбу с часами. Определившись и прикинув план работы программы (например, ждем 12:00 пятницы тринадцатого, затем начинаем бомбежку), стоит приступить к написанию программы. При реальных взломах не рекомендуется пользоваться готовыми DDoS-модулями, они хороши в обучающих целях, но на практике их быстро найдут, и жертвоприношение не осуществится.
----------------------------------------------------------------------------------------------------------------------------------------
не проси меня да и лучше никого здесь выложить готовые модули, бо это УК
Дальше - еще интереснее:
Для тех, кто на PHPBB - модуль защиты от атак
Дальше инструкция установки на английском.
## MOD Title: DoS Protection
## MOD Author: Vladson < [email protected] > (N/A) http://www.dkflbk.nm.ru
## MOD Description: This mod gives you a protection from DoS
## MOD Version: 0.0.3 [phpBB 2.0.0-2.0.10]
##
## Installation Level: Easy
## Installation Time: 3 Minutes
##
## Files To Edit (2): includes/sessions.php
## search.php
## Included Files: (n\a)
##############################################################
## For Security Purposes, Please Check: http://www.phpbbguru.net/mods/ for the
## latest version of this MOD. Downloading this MOD from other sites could cause malicious code
## to enter into your phpBB Forum. As such, phpBB will not offer support for MOD's not offered
## in our MOD-Database, located at: http://www.phpbbguru.net/mods/
##############################################################
## Author Notes:
##
## Versions 0.0.2 and 0.1.1 was
## not yet tested under the real attack
##
##############################################################
## MOD History:
##
## 2004-10-31 - Version 0.1.1
## - New beta
## New search per second system
##
## 2004-10-25 - Version 0.0.2
## - New beta
## (First one out of closed circuts)
##
## 2004-08-13 - Version 0.0.1
## - First beta
##
##############################################################
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
##############################################################
#
#-----[ SQL ]------------------------------------------
#
ALTER TABLE 'phpbb_sessions' ADD session_search INT( 11 ) DEFAULT 0 NOT NULL AFTER session_page';
#
#-----[ OPEN ]------------------------------------------
#
includes/sessions.php
#
#-----[ FIND ]------------------------------------------
#
$sql = "UPDATE " . SESSIONS_TABLE . "
SET session_user_id = $user_id, session_start = $current_time, session_time = $current_time, session_page = $page_id, session_logged_in = $login
WHERE session_id = '" . $session_id . "'
AND session_ip = '$user_ip'";
#
#-----[ REPLACE WITH ]------------------------------------------
#
$sql = "UPDATE " . SESSIONS_TABLE . "
SET session_user_id = $user_id, session_start = $current_time, session_time = $current_time, session_page = $page_id, session_search = $current_time, session_logged_in = $login
WHERE session_id = '" . $session_id . "'
AND session_ip = '$user_ip'";
#
#-----[ FIND ]------------------------------------------
#
$sql = "INSERT INTO " . SESSIONS_TABLE . "
(session_id, session_user_id, session_start, session_time, session_ip, session_page, session_logged_in)
VALUES ('$session_id', $user_id, $current_time, $current_time, '$user_ip', $page_id, $login)";
#
#-----[ REPLACE WITH ]------------------------------------------
#
$sql = "INSERT INTO " . SESSIONS_TABLE . "
(session_id, session_user_id, session_start, session_time, session_ip, session_page, session_search , session_logged_in)
VALUES ('$session_id', $user_id, $current_time, $current_time, '$user_ip', $page_id, $current_time, $login)";
#
#-----[ OPEN ]------------------------------------------
#
search.php
#
#-----[ FIND ]------------------------------------------
#
//
// End session management
//
#
# --- [AFTER ADD] ---
#
//
// Dos protection
//
$sql = "SELECT session_search FROM " . SESSIONS_TABLE . " WHERE session_id = '" . $userdata['session_id'] . "'";
if ( !$result = $db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not quary search sessions', '', __LINE__, __FILE__, $sql);
}
if( $row = $db->sql_fetchrow($result) )
{
if ( $row['session_search'] > date ('U')-1)
{
message_die(GENERAL_ERROR, 'DoS protection.');
}
else
{
$sql = "UPDATE " . SESSIONS_TABLE . " SET session_search = " . date ('U') . " WHERE session_id = '" . $userdata['session_id'] . "'";
if ( !$result = $db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not quary search sessions', '', __LINE__, __FILE__, $sql);
}
}
}
#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM
защита от спам ботов на пхпбб, отлов ссылок.
есть еще и вот такой способ!
$period=2; //период замера в секундах
$views=10; //количество разрешённых посещений за период $period
mysql_select_db('ibp2',mysql_connect('host','root','password')) or die(mysql_error()); //подключаемся к базе данных
$now_time=date("U"); //Узнаём текущее время
$query="SELECT time FROM log WHERE time>".($now_time-$period)." AND ip='$REMOTE_ADDR' AND url='$REQUEST_URI'"; //выбираем из базы все посещения определённого адреса за последние $period секунд
if (mysql_num_rows(mysql_query($query))>$views) //Если количество посещений больше разрешённого $views
{
mysql_query("INSERT INTO `log` ( `time` , `ip` , `url` , `method` , `agent` , `referer` , `flooder`) VALUES ('$now_time', '$REMOTE_ADDR', '$REQUEST_URI', '$REQUEST_METHOD', '$HTTP_USER_AGENT', '$HTTP_REFERER', 1)"); //добавляем запись о флуде
@fopen ($filename, 'r') or exit("<center>Извените!!!<br> Сервер находится под атакой! <br>Aдминистрация сайта предотвращает последствия атаки! <br>Попоробуйте зайти через 1 минуту!</center>"); //как-нибудь завершаем работу скрипта, функция fopen взята для примера
}
else // если же число посещений в норме
{
mysql_query("INSERT INTO `log` ( `time` , `ip` , `url` , `method` , `agent` , `referer` , `flooder`) VALUES ('$now_time', '$REMOTE_ADDR', '$REQUEST_URI', '$REQUEST_METHOD', '$HTTP_USER_AGENT', '$HTTP_REFERER', '')"); //просто добавляем строку в базу
}
$truncate=mysql_fetch_row(mysql_query("SELECT MIN(time) FROM log"));
if (($now_time-$truncate[0])>86400) mysql_query("TRUNCATE TABLE log"); //очищаем таблицу раз в сутки
?>
это все сохраняем в файле antiflood.php и в начале каждой странице которую хотите защитить вставляете include ('antiflood.php');
но нужно еще залить вот это в базу через навика или чем вы там еще пользуетесь
-- Структура таблицы `log`
--
CREATE TABLE `log` (
`time` int(11) NOT NULL default '0',
`ip` varchar(20) NOT NULL default '',
`url` varchar(200) NOT NULL default '',
`method` varchar(10) NOT NULL default '',
`agent` varchar(100) NOT NULL default '',
`referer` varchar(200) NOT NULL default '',
`flooder` tinyint(4) NOT NULL default '0',
PRIMARY KEY (`time`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
файл antiflood.php должен находится в одной директории с файлом который вы защищаете
Извените а как в файле .htaccess прописать Deny from тут ip и чтобы эти блокированные ip перенаправлялись, или это в апаче настраивается?
Line2GS Administrator: есть еще и вот такой способ!
Зачем так извращаться над выходом из скрипта? Простой конструкции
вместо
хватит вполне.
Ещё лучше добавить проверки на входящие данные запроса - через них можно осуществить инъекцию в бд. ($REQUEST_URI)
Пример
Выдаст запрос
Который делится на необходимый:
DROP DATABASE ipb;
--', '', '', '', 1);
и куда уедет наша база?
Оператор @ часто использовать не рекомендуется - очень усложняет процесс поиска ошибок.
от вашего творения при настоящем ДДоС сервер здохнет быстрей чем без него ... а для ДЛЕ всё просто:
/*
*--------------------------------------------------------
* Модуль antioverload
*--------------------------------------------------------
* Модуль предназначен для ограничения доступа к сайту или
* к страницам, где он включён.
* Принцип работы в том, что запоминается ip-адрес и время
* обращения с этого адреса. И если в течение заданного
* времени происходит обращение с того же адреса, то ему
* выдаётся ошибка 503.
* Модуль необходимо подключать к скрипту самым первым.
* Этим обеспечивается быстрота его работы.
*--------------------------------------------------------
*/
/* Время задержки в секундах */
$ad_delay=3;
/* Путь к папке с временными файлами. Должен существовать */
$ad_DirName=$_SERVER['DOCUMENT_ROOT'].'/tmp';
/*
*---------------------------------------------------------
* Список поисковых роботов.
* Очень не хорошо, если поисковый робот будет натыкаться
* на ошибки на сайте. Ему это может сильно не понравиться.
* Поэтому пишем список юзер-агентов роботов; добавляем или
* удаляем, что нужно.
*---------------------------------------------------------
*/
$ad_Robots_UserAgent=array(
'aipbot',
'Aport',
'eStyleSearch',
'Gigabot',
'Gokubot',
'Google',
'MJ12bot',
'msnbot',
'PlantyNet_WebRobot',
'StackRambler',
'TurtleScanner',
'Yahoo',
'Yandex',
'YaDirectBot',
);
/*
*----------------------------------------------------------
* Функция создаёт в указанной директории файл, начинающийся
* с буквы a (для отличия от других возможных файлов) и
* содержащий в имени ip-адрес клиента.
*----------------------------------------------------------
*/
function ad_WiteIP($dir){
$f=fopen($dir.'/a'.$_SERVER['REMOTE_ADDR'], 'w');
fclose($f);
}
/*
*----------------------------------------------------------
* Проверка на наличие в поле HTTP_USER_AGENT чего-нибудь из
* вышенаписанного списка.
*----------------------------------------------------------
*/
$ad_IsRobot=false;
foreach ($ad_Robots_UserAgent as $match){
if (strstr($_SERVER['HTTP_USER_AGENT'], $match)){
$ad_IsRobot=true;
break;
}
}
/*
*---------------------------------------------------------
* Поисковые роботы не любят, когда к адресу страницы
* добавляется переменная сессии. Поэтому, если на сайте
* используются сессии, то их лучше включать, если агент -
* не робот.
* Если сессии не используются, то этот кусок можно убрать.
*---------------------------------------------------------
*/
if (!$ad_IsRobot){
session_start();
}
if (!$ad_IsRobot){
/*** Чтение каталога и удаление старых файлов ***/
$ad_dir =opendir($ad_DirName)
or die('Отсутствует директория для временных файлов');
$ad_now =time();
$ad_forbid =$ad_now-$ad_delay;
/* IP-адрес в имени файла, начинающегося на букву a,
а время обращения - время изменения файла */
while (false!==($ad_FName=readdir($ad_dir))){
if (ereg('^a[1-9]',$ad_FName)
&& (@ filemtime($ad_DirName.'/'.$ad_FName)<$ad_forbid)){
@ unlink($ad_DirName.'/'.$ad_FName);
}
}
closedir($ad_dir);
/*** Проверка на существование пометки
о недавнем обращении с данного ip-адреса ***/
if (file_exists($ad_DirName.'/a'.$_SERVER['REMOTE_ADDR'])){
/* Если обращение было недавно, то выводим сообщение об ошибке */
header('HTTP/1.0 503 Service Unavailable');
header('Status: 503 Service Unavailable');
header('Retry-After: '.$ad_delay*3);
?>
<!doctype html public "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Ошибка 503</title>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251" />
</head>
<body>
<h1>Ошибка 503 (Service Unavailable)</h1>
<p>Сервер не может в данный момент выдать запрашиваемую Вами страницу.
Попробуйте вызвать эту страницу позже (клавиша F5).</p>
</body>
</html>
<?php
ad_WiteIP($ad_DirName); // Перед выходом записываем ip
exit;
}else{
ad_WiteIP($ad_DirName);
}
}
?>
WebDeveloper сервера DARKWORLD
Knoxval: от вашего творения при настоящем ДДоС сервер здохнет быстрей чем без него ...
Это точно.
И не путайте понятия, вы тут пишите о защите от http-флуда, а не от DDoS'а.
DDoS - распределённая атака с множества адресов, и в основном это запрос на соединение.
Ну а во вторых, на сколько я помню, при HTTP-флуде, стараются как можно больше минимизировать обработку запросов РНР, а SQL запросы исключить как таковые вообще.
это вообще улыбнуло:
#
ALTER TABLE 'phpbb_sessions' ADD session_search INT( 11 ) DEFAULT 0 NOT NULL AFTER session_page';
и
защита называется "убей свой MySQL" сам ... при флуде нужно слать юзера при первой же возможности ... + эта защита создаст дополнительную нагрузку в штатном режиме ИМХО
WebDeveloper сервера DARKWORLD
Knoxval: защита называется "убей свой MySQL" сам ... при флуде нужно слать юзера при первой же возможности ... + эта защита создаст дополнительную нагрузку в штатном режиме ИМХО
А что для защиты сервера предложишь ты? Помимо ДЛЕ.
Купил в инете скрипт от Ддос но как прикрутить его к себе на сайт так и не понял,
Стоит он копейки,кто сможет разобраться если несложно поделитес описаловом установки на русском языке,там есть но я в англ не бум бум
Скрипт
Если у кого есть что то подобное и работает,пишите возьму за капусту.
Перевод инструкции:
1. Положить все файлы в отдельную папку на вебсервере
2. Установить на fsAdmin/data/ и все файлы внутри права 777.
3. Запустить из браузера http://твойадрес/папкаскрипта/install/
4. Обязательно после установки удалить эту самую папку install
5. Зайти в админку скрипта (fsadmin) через браузер и настроить что необходимо
Подключение к вашему сайту:
Необходимо найти такой файл пхп, который постоянно вызывается, обычно это файл index.php и он лежит в корне, открываете этот файл и в самом верху, под <? вписываете require_once( "путьдоскрипта/firewall.php" );
— Дурак дураком
ioncube - там есть такая папка. Кто скажет как ее поставить на Апач? Ибо без нее не хочет работать. Видимо какие то библиотеки.
Fallenlord16rus: Купил в инете скрипт от Ддос но как прикрутить его к себе на сайт так и не понял,
Стоит он копейки,кто сможет разобраться если несложно поделитес описаловом установки на русском языке,там есть но я в англ не бум бум
Скрипт
Если у кого есть что то подобное и работает,пишите возьму за капусту.
Перезалейте плиз, а то некачает











