Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Форумы (https://forum.antichat.xyz/forumdisplay.php?f=16)
-   -   Анти ДДОС (https://forum.antichat.xyz/showthread.php?t=92781)

Dimo4ka14 21.11.2008 00:51

Анти ДДОС
 
Принцип действия я думаю, понятен, вот сам код:

К примеру, создадим каталог anti_ddos и кидаем все скрипты туда:

index.php (модуль обнаружения DDOS атаки):

PHP код:

<?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");




© ZiK

.Slip 21.11.2008 00:54

А ты не подумал что при ддосе бот сначало коннектится к серверу а уже только потом выполняется скрипт?

Chaak 21.11.2008 00:58

Это не анти ддос, это анти http-flood. Лучше уж php + ip tables

x3r0x 21.11.2008 07:49

Цитата:

в начале каждого файла, который может быть подвергнут атаке добавляем строчку:
к тому же, например, в картинку или в css/js/etc файлы уже не вставишь, хотя эти файлы тоже могут быть подвергнуты атаке

Doom123 21.11.2008 08:47

это полный бред ... Тебя от дддоса ничего не спасёт ибо еси это норм ддос то он атткует сервер а не скрипт ....

neval 21.11.2008 09:37

А что ? Нормально...
Где написано что тушение пожара огнеметом это неправильно?
А почему не используется JavaScript ?

f®@me™ 30.11.2008 14:48

Смешно =)


Время: 19:34