Rat v0.2 - Демон ведущий учёт сетевого IPv4 трафика (os: linux, freebsd) (бесплатен)
Демон Rat - сердце системы учета сетевого трафика (Traffic-meter).
Возможности демона в области подсчёта IP трафика ограничены только фантазией и мощностью вашего сервера.
Ценой возможностей стала скорость. Я рекомендую использовать демон Rat на каналах связи не быстрее 100Mbit.
Особенности Rat:
- работает на linux, freebsd и на других UNIX i386 системах поддерживающих библиотеки libnet и libpcap.
- не зависит от настроек брандмауэра (firewall'а), так как использует интерфейс в "promisc mode", что в свою очередь позволяет вести учёт ip трафика не проходящего через сервер (в случае широковещательной сети)
- правила слежения за пакетами задаются в синтаксисе "berkeley packet filter", его использует множество программ (например tcpdump, и само ядро ОС).
Если у кого-то есть желание поближе познакомитсья с этими правилами, то обратите внимание на документацию по tcpdump.
- возможность установить режим слежения за определённым ip или сетью, в котором будет вестись полная статистика по исходящему и входящему ip трафику.
- простота подключения к системам визуализации данных ( MRTG ), для этого в пакете есть все необходимые утилиты и пример конфигурации для MRTG
Инсталляция:
Требуются библиотеки libnet и libpcap, после их инсталляции продолжаем:
>tar -zxvf rat-xxx.tar.gz
>cd rat-xxx
опционально: >vi Makefile - отредактируйте пути, я рекомендую не менять пути по умолчанию, так как они не наследуются утилитами
make
make install
теперь нужно редактировать конфигурацию:
>vi /usr/local/rat/conf/rat.cfg
структура:
interface
{
rule;
rule;
...
}
...
Пример:
На интерфейсе eth1 локальная сеть из 254 компьютеров: 10.11.12.0/24, внешний канал на интерфейсе eth0.
Нужно узнать внешний трафик (на интерфейсе eth0) для каждого из 256 компьютеров.
Конфигурационный файл в таком случае может иметь вид:
eth1 {
/usr/local/rat/log/total_s = src net [10.11.12] && ! dst net 10.11.12 ;
/usr/local/rat/log/total_d = dst net [10.11.12] && ! src net 10.11.12 ;
}
Внимание! окончание для путей логов имеет значение!
*_d - вести учёт по адресу назначения (d - destination), *_s - вести учет по адресу источника (s - source)
От стандартных правил "berkeley packet filter" эти строки отличаются лишь скобками [], они нововведение, означающее,
что нужны данные для каждого IP адреса сети заданной в скобках, иначе будет вестись учёт только для одного объекта - самой сети 10.11.12
теперь запускаем демон Rat:
>cd /usr/local/rat/bin; ./run_rat.sh
если вы видите в процессах демон rat (ps axuw|grep rat), то считайте что вам повезло :)
Теперь демон висит в памяти и активно занимается подсчётом поступающих пакетов.
Самое интересное. Как узнать что он там насчитал ? Пошлите демону rat сигнал ALRM:
>kill -ALRM `cat /usr/local/rat/log/eth1.pid`
получив этот сигнал, демон сохраняет дамп полученных данных о пакетах в каталог /usr/local/rat/log/
посмотрите на содержимое этих файлов, там будет что-то похожее на:
total_s:
total 298906 775
notIP 0 0
10.11.12.5 98906 275
10.11.12.1 8906 75
10.11.12.100 1906 5
10.11.12.7 5906 25
...
total_d:
total 29890 77
notIP 0 0
10.11.12.5 9890 27
10.11.12.1 890 7
10.11.12.100 190 3
10.11.12.7 590 5
...
total_s - дамп исходящего трафика, total_d - дамп входящего трафика, то есть всё что нужно было узнать.
Далее вы можете делать с этими данными всё что захотите.
Внимание! Сигнал ALRM очищает счётчики пакетов демона rat, то есть каждый новый дамп содержит данные
полученные после момента предыдущей поимки сигнала, либо запуска. (это должно быть вам знакомо если вы
пытались разобраться в методах слежения за данными в mrtg)
Для того чтобы совместить rat с mrtg, нужно использовать улилиты из каталого utils.
Скприпт getdata.pl обрабатывает вышеупомянутые дампы демона rat и передаёт их mrtg.
Пример конфигурации mrtg для работы c rat:
/usr/local/rat/conf/mrtg.conf:
##############################################################################
# TRAFIC
##############################################################################
Options[_]: absolute, growright, unknaszero, nobanner
MaxBytes[_]: 1100000
AbsMax[_]: 11000000
YLegend[_]: bytes/s
ShortLegend[_]: used
#############################################################################
Target[total]: `/usr/local/rat/utils/getdata.pl total_d eth0 total sig` +
`/usr/local/rat/utils/getdata.pl total_s eth0 total`
PageTop[total]: total
Title[total]: total
Target[10.11.12.1]: `/usr/local/rat/utils/getdata.pl total_d eth0 10.11.12.1` +
`/usr/local/rat/utils/getdata.pl total_s eth0 10.11.12.1`
PageTop[10.11.12.1]: 10.11.12.1
Title[10.11.12.1]: total
Target[10.11.12.7]: `/usr/local/rat/utils/getdata.pl total_d eth0 10.11.12.7` +
`/usr/local/rat/utils/getdata.pl total_s eth0 10.11.12.7`
PageTop[10.11.12.7]: 10.11.12.7
Title[10.11.12.7]: total
Запуск mrtg производится стандартным образом ( /usr/local/rat/bin/run_mrtg.sh ), результатом чего должны быть 3 страницы для 3х объектов: сети 10.11.12(total),
и 2х хостов: 10.11.12.1 и 10.11.12.7
Уникальные возможности Rat:
Теперь я даю описание возможности, которую нельзя реализовать обычными способами учёта трафика
(обычно для ведения учёта трафика используются пустые правила firewall'а).
Предположим вас, как человека любопытного, заинтересовал трафик машины с IP адресом 10.11.12.13, причём
не только количество трафика, но и пункты назначения - адреса удалённых хостов, а также количество трафика
приходящегося на каждый удалённый хост! Для этого достаточно написать пару строк конфигурации Rat:
eth1 {
/usr/local/rat/log/total_d = src host 10.11.12.13 && ! dst net 10.11.12 ; [0.0.0.0]
/usr/local/rat/log/total_s = dst host 10.11.12.13 && ! src net 10.11.12 ; [0.0.0.0]
}
Файлы /usr/local/rat/log/total_d и /usr/local/rat/log/total_s будут содержать ip адреса удалённых хостов и количество трафика.
Примеры конфигураций:
Учёт почтового трафика:
eth1 {
/usr/local/rat/log/mail_s = src net [10.11.12] && ! dst net 10.11.12 && dst port 25 ; # smtp
/usr/local/rat/log/mail_d = dst net [10.11.12] && ! src net 10.11.12 && src port 110 ; # pop3
}
Учёт внешнего UDP трафика:
eth1 {
/usr/local/rat/log/udp_s = src net [10.11.12] && ! dst net 10.11.12 && proto UDP ;
/usr/local/rat/log/udp_d = dst net [10.11.12] && ! src net 10.11.12 && proto UDP ;
}
|