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

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

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

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


[perl-скрипт, спасающий от DDoS]

#!/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 бота уже был забанен, поэтому сценарий не засоряет файрвол повторным правилом.

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

[админ спит, атака идет]

Если ты думаешь, что я поставил сценарий и забыл о ботах, то ошибаешься :). Несмотря на то, что за трафик я не платил (а боты нагоняли в день около 500 мегабайт мусора), я захотел справедливости. Поэтому моей задачей было отписать в abuse всем network-администраторам тех сетей, на которых крутились боты, тем самым разрушив ботнет. В течение часа с помощью команды whois, bash-евых средств автоматизации и какой-то матери :), я собрал почтовые адреса на 90% ботов. Моя задача упрощалась тем, что в большинстве случаях атака велась из одной подсети. Таким образом, мне понадобилось написать всего 400 жалоб, чтобы сообщить обо всех уязвимых машинах. Задача была выполнена всего за три часа, и уже через день я получил добрую половину ответов от админов, которые обещали обезвредить заразную машину. Всего через неделю поток флуда на мой сервер полностью прекратился. Видимо, ботмастер понял, что со мной опасно иметь дело, или заказчик флуда перестал платить деньги за атаку. В любом случае я одержал победу над злодеями, чему до сих пор очень рад.

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

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