Система написана на php и предназначена только для ослабления атаки http флуда, от другого типа ddos атаки, к примеру: icmp и udp на уровне обычного владельца веб сайта защититься невозможно.
Вкратце о системе: система включает модуль обнаружения DDOS атаки, который производит постоянный мониторинг загруженности сайта, путем отслеживания количества приходящих запросов в секунду, в случае если количество запросов в секунду превысит 10 (это по умолчанию, можно выставить больше), то подключается модуль погашения атаки, который начинает вычислять IP адреса атакующих машин-зомби и заносить их в блэклист, мониторинг при этом отключается по умолчанию на 1 час.
Принцип действия я думаю, понятен, вот сам код:
К примеру, создадим каталог anti_ddos и кидаем все скрипты туда:
index.php (модуль обнаружения DDOS атаки):
<?php $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=''; fputs($ad_file,$ad_string); fclose($ad_fp); } else { $ad_file=fopen("{$ad_dir}/{$ad_check_file}","w"); $ad_string=''; fputs($ad_file,$ad_string); fclose($ad_fp); } } ?>
anti_ddos.php (модуль погашения DDOS атаки):
<?php function getIP() { if(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 () будет заблокирован!!!
<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");