Последний отсчет

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

Xakep, номер #052, стр. 052-068-2


for(1..$count) { $num = $num / 1024 } ## Выполним деление на 1024 для выяснения трафика

$num=sprintf("%.2f",$num); ## И округлим до двух чисел после запятой

print "$what $num $pref","bytes\n"; ## Выводим результат

}

}

Вот этот маленький скрипт будет выдавать тебе значения текущего трафика. Но помнишь, я упомянул об обнулении правил по истечении суток? И не надейся, что я буду тебе расписывать ежедневный дамп статистики в файлах - это ты сделаешь сам, благо опыта у тебя уже много. А вот отправку на мыло, оптимальный и самый легкий вариант, я предусмотрел. Для этого тебе потребуется накатать еще один скрипт sendstat.sh, на этот раз на языке sh.

#!/bin/sh

/root/trafstat/stat.pl | mail -s 'Traffic statistic' root@localhost

/root/trafstat/stat.pl -z

Как ты уже понял, задача этого скрипта - выполнить подсчет статистики за данный период и намылить его руту. Затем еще раз запустить этот же скрипт, но с параметром -z, чтобы сбросить счетчики на правилах. Задумаемся над вопросом, как и когда запускать этот sh’шный скрипт. Все просто! На помощь придет cron, в котором нужно задать правило, которое будет выполняться в 23:59 каждый день. Я надеюсь, ты работал с кроном. Если нет, то слушай сюда :). Выполни команду crontab -e под рутом (иначе скрипт просто не сможет обратиться к фаерволу). Таким образом ты войдешь в среду vi редактора. Там нажимаешь "i", тем самым войдя в режим вставки (INSERT), и вписываешь следующую строку:

59 23 * * * /root/trafstat/sendstat.sh >/dev/null 2>&1

Затем корректно выходим комбинацией клавиш: ESC, :wq, Enter. Внимание, на sendstat.sh не забудь установить атрибут 755, иначе все твои усилия пропадут даром. >/dev/null 2>&1 - не какие-то марсианские знаки, которые иногда отбрасывают, мотивируя тем, что не знают, что они означают :). Это необходимо, чтобы STDOUT и STDERR при выполнении скрипта не уходили на мыло руту. Зачем тебе лишний локальный спам? Его хватает из глобала...

Считаем внешними программами

Если вдруг так случилось, что по каким-то причинам заюзать ipfw ты не можешь (как было у меня на FreeBSD 4.3, когда из-за ipfw машина загадочно подвисала к полуночи), можешь доверить подсчет трафика внешним софтинам. Как я уже сказал, банальное снифание сетевого интерфейса помогает достичь нужного результата в подсчете трафика. Если же ты виртуоз, можешь заюзать даже tcpdump и парсить из него суммарную статистику :), но есть софтины, которые проделают эту грязную работу за тебя. Я долго определялся, какой софт выбрать, и решил остановиться на argus. Испытываемая версия - 2.0.5. Недолго думая, сливаем это творение по ссылке http://qosient.com/argus/src/argus-2.0.5.tar.gz. Распаковываем, конфигурим, собираем. Все как обычно, ничего нового. Затем наступает интересная процедура редактирования argus.conf. Вот так выглядит мой конфигурационный файл:

ARGUS_DAEMON=yes

ARGUS_BIND_IP=""

ARGUS_INTERFACE="fxp1"

ARGUS_OUTPUT_FILE=/usr/local/argus/argus.out

ARGUS_SET_PID=yes

ARGUS_GO_PROMISCUOUS=yes

ARGUS_FLOW_STATUS_INTERVAL=30

ARGUS_MAR_STATUS_INTERVAL=60

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

Hosted by uCoz