Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #81, СЕНТЯБРЬ 2005 г.

Есть ли жизнь под DDoS-ом?

Докучаев Дмитрий aka Forb

Хакер, номер #081, стр. 081-066-2


Для большего понимания давай рассмотрим подробнее вышеописанные строки. В первой строке инициализируется размер так называемой хэш-таблицы, которая обрабатывает запросы к WWW-серверу. Затем располагаются счетчики запросов к одной странице и ко всему сайту. Интервал обращения по умолчанию равен одной секунде - это видно из последующих директив. Таким образом, если кто-то обратился к одной странице трижды за одну секунду, IP-адрес неприятеля будет заблокирован. Тот же самый результат произойдет в случае многократного обращения (50 попыток в секунду) к любой странице сайта.

Однако по умолчанию модуль просто возвращает ошибку 403 после блокировки. Даже в этом случае при масштабной атаке нагрузка на сервер может быть очень большой. Чтобы избежать подобного, я настроил модуль на простое добавление адреса в блэк-лист /var/log/niggerz с последующей обработкой этого файла специальным скриптом. Следовало учитывать, что операция записи происходит с правами nobody, поэтому необходимо установить атрибут 666 на файл.

Итак, система была настроена, и оставалось лишь запустить httpd. Как и ожидалось, после старта в списке злобных ниггеров стали появляться первые IP-адреса. Но почему-то там их было не так много, как я предполагал. Каждую минуту через crontab запускался специальный скрипт, который загонял в бан все адреса, накопившиеся в листе, а затем обнулял этот список. Все вроде бы работало, но особого эффекта не давало. Система также тормозила, а httpd вообще перестал инициализировать новые соединения.

[не знаешь сам - спроси товарища]

Поиски каких-либо решений в Сети оказались тщетными. На форумах проблема 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";

Назад на стр. 081-066-1  Содержание  Вперед на стр. 081-066-3