login:        password:      
Combats Scrolls
Rambler's Top100
Гость БК
ru
 20-06-07 @ 23:16
developers Open info : Cripter Open user info Open user photogallery
ДДОС
Скажу сразу статья не моя но более полно пожалуй и не напишешь. Тем более, что данная тема очень актуальна в эти нелегкие времена.
Powered by vBulletin® Russian v3.6.4, Copyright ©2000-2007, Jelsoft Enterprises Ltd.
Сначало, я расскажу про Ддос. Какие виды атак существует, как их отличить, чем они сильны… И так, как понять, каким видом флуда вас Ддос-ят? Очень просто - достаточно просто поверхностно взглянуть на сервер. Если в разы увеличились логи апача - значит это хттп флуд. Если нельзя присоединиться ни к одному из сервисов (к примеру, фтп) по причине того, что максимальное количество соединений достигнуто, значит, это SYN\ACK флуд. При ping flood практически не будет заметна разница между исходящим и входящим трафиком.

Теперь расскажу про методы атак по отдельности!
SYN\ACK Flood
Начну я, пожалуй, с SYN\ACK флуда. Всем, наверное, известно, что он рассчитан на забивания инфы о состоянии соединений в стеке TCP\IP. Зависит этот параметр строго от реализации стёка в ОС, используемой сервером. наибольшее число ботов атакуют все порты подряд - это их самый большой минус. По сути, атаковать нужно только те, где ведется учёт количества соединений на уровне приложения (например, FTP). Бестолковый админ может полностью потерять контроль над сервером извне. Допустим, если в настройках SSH демона выставлено максимальное число одновременных коннектов около 20, то привести этот демон в состояние DoS может даже одна машина. Самый простой выход кроется в том, чтобы замаскировать все порты под действующие без участия стёка TCP\IP и увеличить число максимальных коннектов на жизненно важные сервисы. Когда флуд начался, нужно уже начинать активно использовать фаервол. В идеале фаервол по топологии должен стоять до сервера (при дальнейшем рассмотрении я так и буду иметь ввиду, учтите). Можно найти где-нить стрёмненький системник, поднять там шлюз и играться с правилами - дело уже ваше. Самое главное в активной защите от данного вида флуда то, чтобы вёлся учет не полученных пакетов с выставленным SYN\ACK. Естественно, эти IP адреса должны добавляться в блэк-лист. Я видел приличное множество ботов, где даже алгоритм рандомной генерации спуфенного ИП был настолько прост, что через 5 минут доса всё генеренные ботом ИПшники были в блэке.
HTTP Flood
Следущий на очереди HTTP ддос. Он актуален только в 2х случаях - если админ идиот или сайт работает с базой данных (актуальность не теряется если эти 2 случая вместе ). Если сайт работает с базой данных, то вся цель сводится к атаке на скрипт с ней работающий. Под атакой подразумевается отправка GET-запросов. оптимизация скриптов, работающих с базой и самой базы даст в самом начале небольшой потенциал. Так же тут не помешает увеличение числа максимальных коннектов к базе одновременно. Тюнинговка самого вэб-сервера тоже должна помочь. Но если начался флуд, то тут уже нужно действовать кардинально иначе. Некоторые боты имеют в своём запасе только пару заголовков USER_AGENT (порой даже умудряются и их рандомно генерить). Если у вас такой случай - вам дико повезло. Прочекайте логи, уловите часто используемые записи по критерию USER_AGENT и баньте .Как именно расправляться с жертвами решать только вам - жестоко для невинных юзеров, но что же поделать. Иной вариант - изменение названия скрипта, создание поддомена (пойдет тот же www) и перенос сайта туда. Боты не обладают интеллектом, поэтому можно отсеивать их в блэк-листы по банальным "Нажмите на эту кнопку и попадёте на страницу". Выставив некий тайм-аут, вы можете с уверенностью 90% отсеять юзеров от ботов. Если чел нажал на кнопку ему добавляется кукис (самый простой вариант, есть боты которые работают с кукисами), который служит тикетом для прохода на сайт. Это спасёт если вы включите защиту на ранней стадии, когда все боты, как говорится, только разогреваются. Есть и другой вариант, когда демон (к примеру, апач) сразу после поднятия просто падает. Тут уже, батенька, спасёт только фаервол и блокировка ипаков, допустим, по странам. Самые дешевые загрузки - китайские, поэтому большинство нынешних сервисов низкого и среднего звена подгружают именно ту территорию. Нормальные же сервисы имеют в своём распоряжении машины даже из какой-нить задрипанной африканской республики, и блокировка там мало чем поможет.
ICMP flood
Самая жесть это ICMP flood. Старый, как стёк TCP\IP, вид доса, который очень многое может сделать, если ну вообще никак не настроен фаер. Если серверу ну просто жизненно важно отвечать на ICMP ECHO, тогда только увеличивайте свой канал. Если же нет, то одна строчка в iptables решит ваши проблемы. Если канал забьется до фаера, то тут уже ничем не помочь. Вообще предотвращение\защита любого вида доса\ддоса будет эффективнее, если усиливать пропускную способность канала.
UDP flood
UDP - протокол, не требующий какой либо процедуры синхронизации перед отправкой данных. Стало быть, eбашь себе и *башь. Никаких проблем, просто тупой флуд. Нападение проводится простой посылкой пакета на случайный UDP порт на сервере. Когда пакет доходит до порта, система начинает с ним усиленно работать. Работает, работает и наконец система обрабатывая кривой udp пакет, высылает другой ICMP пакет, который тоже является eбнутым. Как только пойдет флуд на UDP порты из кривых пакетов - система упадет. С атакой класса UDP FLOOD можно эффективно бороться, устанавливая брандмауэры в критических местах сети (таких как шлюзы), а также используя специализированное оборудование(наиболее известная контора Cisco), дабы фильтровать нападения хyесосов. Кроме того действия, которые должны быть предприняты в вашей сети это:
• во-первых, фильтрование или отключение echo и chargen сервисов.
• во-вторых, фильтрование другого, не использующего UPD ПО.
• в-третьих т.к. вы должны обеспечить максимально правильную работу вашей сети, вы должны следить за теми блоками ПО , которые действительно используют UDP по назначению и блокировать остальные.

Дальше я постораюсь обсудить как можно больше вариантов защиты от Ддос атак! Не только программные, которые можно применять на одном отдельно взятом сервере, но и те, которые связаны с дублированием баз данных с последующей синхронизацией и.т.д. И так: Авторизация на сайте. Неплохо защищает от http флуда, хотя есть несколько ботов которые могут обходить…

<?$name="DDoSer"; ## логин пользователя
$pass="psw"; ## пароль пользователя
if(!isset($PHP_AUTH_USER))
{
Header('WWW-Authenticate: Basic realm="Stat"');
Header('HTTP/1.0 401 Unauthorized');
exit;
}
else
{
if(($PHP_AUTH_USER != $name ) || ($PHP_AUTH_PW != $pass))
{
Header('WWW-Authenticate: Basic realm="Stat"');
Header('HTTP/1.0 401 Unauthorized');
exit;
}
}
?>
Очередной бариер: Работа с кукисами! Немногоие боты умеют принимать и работать с куками. Тоже неплохо помгает при http флуде - если проверка на куки не пройдена, не будет нагружаться лишний раз бд и нагрузка будет не такой сильной.

<?php
if(!$cookie)
{

header("Location: $PHP_SELF?cookie=1");

setcookie("test","1");
}
else
{
if(!$test)
{
header("Location: http://localhost/ddos/test1.php");// это любой пустой скрипт
}
}
?>
О также создание зеркал сайтов - слишком напряжно атакующему завалить и основной сайт и зеркала. тем более финансово это выходит ему в разы дороже. это тоже можно считать определенной защитой от Ддоса.
На форумах проблема DDoS практически не обсуждается, а если о ней и говорят, то готовых солюшенов никто не предлагает. Ничего не оставается, как спросить знакомых админов по ICQ. Один из них поделился со мной замечательным скриптом. Он работает при наличии файрвола!
Сценарий был написан на языке Perl и не отличался особой сложностью. Каждую минуту он вызывался по крону и при запуске смотрел результат выполнения команды «netstat -ant|grep ESTABLISHED». Затем устанавливался какой-то предел соединений. Если данный лимит был превышен, IP-адрес заносился в черный список фаервола. Таким образом, мой товарищ не раз защищался от масштабной атаки. [простой скрипт для защиты от DDoS]

#!/usr/bin/perl

@output=`netstat -ant|grep ESTABLISHED|awk '{print(\$4,\$5)}'`;

$arg=$ARGV[0];

foreach $line (@output) {

chomp($line);

$line=~/(.*\..*\..*\..*)\..* (.*\..*\..*\..*)\..*/;

$devs{'63.33.33.33'}="sis0";

$src{$2}=$devs{$1};

$ips{$2}=$ips{$2}+1;

}

foreach $ip (sort keys %ips) {

if ($src{$ip}) {

if ($arg eq '0') { print "($src{$ip}) $ip => $ips{$ip}\n"; }

if ($ips{$ip} > 7) {

chomp($date=`date +'%d.%m.%y %H:%M:%S'`);

open(f, ">>/var/log/attack.log");

print f "$date -> attack/scan from $ip [$ips{$ip}]\n";

close f;

system("/sbin/ipfw -q add 13 deny ip from $ip to me");

}}}
И я обнаружил этих ботов всего за несколько минут Для этого мне пришлось включить опцию verbose в моем фаерволе ipfw. Это делается простой командой sysctl -w net.inet.ip.fw.verbose=1. Затем я создал небольшое правило, обрабатывающее все пакеты. Данный рулес должен опережать по номеру правило, которое запрещает весь трафик на машину. Я выбрал в качестве идентификатора число 50000. Сама команда добавления выглядела следующим образом:

ipfw add 50000 count log logamount 0 ip from any to me 80

Теперь можно было приступить к анализу файла /var/log/security. Туда, по умолчанию, стали записываться все обращения к серверу на 80 порт. Немного переделав вышеописанный сценарий, я стал перечитывать фиксированный фрагмент лога (командой tail -1000 /var/log/security) и брать оттуда число обращений. Результат не заставил себя долго ждать - всего после 2-3 запусков нагрузка на сервер вновь упала.

Но подобным методом нельзя было защититься на все 100%, потому как за время своей работы скрипт уже успел забанить 20-30 легальных посетителей ресурса . Это объясняется тем, что обычный пользователь при определенных условиях вполне может превысить мой лимит обращений (при обновлении страницы или при слабом канале).

Вот один из лучших способов защиты от Ддос атак. Работает при наличии файрвола((
[perl-скрипт, спасающий от Ддос]

#!/usr/bin/perl

$num=`cat /var/log/rule`; # В этом файле хранится номер правила

chomp $num;

$cmd='tail -1000 /usr/local/apache/logs/access.log|grep "Win 9x 4."|cut -f1 -d" "|sort -u'; # Выгребаем последние 1000 записей с шаблоном, вырезаем из нее IP-адрес и убиваем дубликаты

@cmd=`$cmd`;

chomp @cmd;

foreach $each (@cmd) {

chomp $each;

$rule=0;

chomp $rule;

open(DB,"/var/log/niggerz");

while(<DB>) {

if (/$each/) { $rule=1; break } # Если адрес уже есть в базе - завершаем работу

}

close(DB);

unless ($rule) {

system("/sbin/ipfw add $num deny ip from $each to me 80"); # В противном случае - заносим IP в блэк-лист

open(LOG,">>/var/log/dos.log");

print LOG "banned ip $each as rules $num\n";

close(LOG);

open(DB,">>/var/log/niggerz");

print DB "$each\n"; # И добавляем запись в лог и в базу ниггеров .

close(DB);

$num++;

}}

`echo $num > /var/log/rule`; # Обновляем номер правила

Этот сценарий парсит журнал на предмет отличительных запросов, выделяет из них ip-адрес, а затем ищет аналогичный айпишник в специальной базе. Если адрес не найден, значит его нет в правилах ipfw, следовательно, он там незамедлительно появляется . В противном случае, ip бота уже был забанен, поэтому сценарий не засоряет файрвол повторным правилом.

Этот скрипт запускается через crontab каждую минуту. Этого вполне хватает, чтобы отразить атаку 2-3 тысяч ботов!!!! Единственный минус в работе сценария заключается в том, что он не может быстро восстановить работоспособность сервера. Иными словами, при излишне активной атаке (20-30 запросов в один момент времени), сервер все равно уходит в анабиозное состояние, но возвращается из него через 3-4 минуты
Если знаете другие способы отражения атак Ддос, пишите!!!

-= by Whack TeaM! =-

Вот ещё нашол! Правда, не пробовал ещё...Как попробоваете, дайте знать!


<?


//
// Путь к каталогу, где будут копится файлы
// В этом каталоге будут стерты все файлы, кроме тех, что начинаются
// с "." в имени.
//
// ОБЯЗАТЕЛЬНО ЗАДАЙТЕ КАТАЛОГ ДЛЯ ВРЕМЕННЫХ ФАЙЛОВ:
//
//$nf_path=getenv("DOCUMENT_ROOT")."/tmp-ip/";

//exit(getcwd());
$nf_path="/var/www/data/talken/tmp-ip/";

// имя файла для юзера - генерится из его IP-адреса
$nf_fip=$nf_path.getenv("REMOTE_ADDR");

// имя файла для встроенного крона (должно начинаться с точки)
$nf_fcron=$nf_path.".time";

//
// сек => кол-во
//
// не более скольки загрузок за сколько секунд можно сделать,
// чтобы не получить игнор
//
$nf_flood=array(
10 => 10, // не более 10 загрузок за 10 секунд
60 => 30, // не более 30 загрузок за минуту
300 => 50, // не более 50 загрузок за 5 минут
3600 => 200, // не более 200 загрузок за час
);

$nf_cron_run=1200; // раз в сколько секунд проверять старые файлы

$nf_old_file=7200; // через сколько секунд считать файл старым (и удалять)







function cron_update($fn,$update) {

if (!file_exists($fn)) {
if (!@touch($fn)) {
echo "не могу создать <b>".basename($fn)."</b>, проверьте права на файлы (w+)<br>";
return -1;
}
}
else {
if (time()-filemtime($fn)<$update) {return 0;}
}

$f=@fopen($fn,"r+");
if (!$f) {
echo "не могу открыть <b>".basename($fn)."</b>, проверьте права на файлы (r+)<br>";
return -1;
}
if (!flock($f,6)) {return;}
$text=fgets($f,100);
if (time()-intval($text)<$update) {return 0;}
fseek($f,0,SEEK_SET);
fwrite($f,time()." ");
fclose($f);

return 1;

}


$nf_cron_code=cron_update($nf_fcron,$nf_cron_run);
if ($nf_cron_code==-1) return;
if ($nf_cron_code==1) {
if ($nf_dir=@opendir($nf_path)) {
$nf_time=time()-$nf_old_file;
while (($nf_tmp=readdir($nf_dir))!==false) {
if ($nf_tmp[0]==".") continue;
if (filemtime($nf_path.$nf_tmp)<$nf_time &&
preg_match("!^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$!",$nf_tmp))
{
if (!unlink($nf_path.$nf_tmp)) {
echo "не могу удалить <b>$nf_tmp</b><br>";
}
}
}
closedir($nf_dir);
}
}
unset($nf_cron_code);


if (file_exists($nf_fip)) {
$nf_f=@fopen($nf_fip,"r+");
if (!flock($nf_f,6)) exit("Parallel processing disable.");
if (!$nf_f) {
echo "не могу открыть <b>".basename($nf_fip)."</b> (r+)<br>";
return;
}
$nf_buf=fgets($nf_f,1000);
$nf_buf=explode("|",$nf_buf);
}
else {
for ($nf_i=0; $nf_i<count($nf_flood)*2; $nf_i++) $nf_buf[]=0;
$nf_f=@fopen($nf_fip,"a+");
if (!$nf_f) {
echo "не могу создать <b>".basename($nf_fip)."</b> (a+)<br>";
return;
}
if (!flock($nf_f,6)) exit("Parallel processing disable.");
}


$nf_i=0;
$nf_stopflag=0;

//echo "<pre>";print_r($nf_buf);

foreach ($nf_flood as $nf_k=>$nf_v) {
if ($nf_buf[$nf_i+1]+$nf_k<time()) {
$nf_buf[$nf_i]=1;
$nf_buf[$nf_i+1]=time();
}
else {
if ($nf_buf[$nf_i]>$nf_v) {
$nf_stopflag=1;
$nf_buf[$nf_i+1]=time();
}
$nf_buf[$nf_i]++;
}
$nf_i+=2;
}


ftruncate($nf_f,0);
fseek($nf_f,0);
fputs($nf_f,implode("|",$nf_buf));

//print_r($nf_buf);
if ($nf_stopflag) exit("Flood detect!");

unset($nf_f);
unset($nf_i);
unset($nf_k);
unset($nf_v);
unset($nf_stopflag);
unset($nf_buf);
unset($nf_fip);
unset($nf_path);
unset($nf_flood);
unset($nf_cron_run);
unset($nf_cron_idle);

Я думаю, что это: Scrolls.multiLike:)

view mode: linear threads
Total disscussion threads: 5 Pages: 1
«« « 1 » »»

Post reply | Post reply with quote
Yan Kos Open user info Open user photogallery
21-06-07 @ 13:26
copy link to clipboard
статья интересная, код проверю позже но оформелние низачот! катом пользоватся нужно :)
Post reply Ответить с цитированием
СэрАртём Open user info Open user photogallery
27-06-07 @ 16:06
copy link to clipboard
поправил
Post reply Ответить с цитированием
Лорд Разрушитель Open user info
09-07-07 @ 17:53
copy link to clipboard
Угу.
А вот что делать, если хостер звонит и говорит, что у него его канал забит насмерть. Что "господа хорошие, я не знаю, что там у вас, но у нас из-за вас все висит!".
Когда хостер верхнего уровня просто банит IP сервера "в целях устранения ddos" - оно конечно работает, недоступный из инета сервер трудно задосить.
Когда просто входящий траффик под 1.5 гигабита...
Этих "когда" очень много. И защиты от пока нет. :-(
Post reply Ответить с цитированием
Гость БК
10-10-07 @ 12:11
copy link to clipboard

> И защиты от пока нет

Лучшая защита - нападение :)
Post reply Ответить с цитированием
cereus Open user info Open user photogallery
31-05-08 @ 03:30
паможте начинающему программисту
copy link to clipboard
Очень интересуюсь С++ !!!! литературку нашел а вот саму програмную среду нетт=((( Если кто что нибудь знаетъ-где и от куда качать можно эту самую среду,,,,,пишите!!!!!!!!!!!!!
Post reply Ответить с цитированием
Cripter Open user info Open user photogallery
09-07-08 @ 16:54
copy link to clipboard
У меня в городе с этим проблем нет, свободно продается на рынках и в магазинах, качать как то не доводилось)
Post reply Ответить с цитированием

Post reply | Post reply with quote

Total disscussion threads: 5 Pages: 1
«« « 1 » »»


 
 © 2007–2024 «combats.com»
  18+  
feedback