Статьи‎ > ‎

Анализ трафика

Установка пакетов

Устанавливаем необходимые пакеты

  • fprobe - сборщик трафика
  • flow-tools - коллектор
  • postgresql - клиент коммандной строки для PostgreSQL или сама БД
  • dev-perl/GDGraph - модуль построения графиков для perl
  • dev-perl/DBD-Pg - модуль perl для работы с PostgreSQL

Настройка

Необходимые директории и права

 mkdir /var/lib/flows/ft
chown flows /var/lib/flows/ft

Создание структуры таблицы

 CREATE TABLE flows
(
unix_secs bigint NOT NULL DEFAULT 0::bigint,
unix_nsecs bigint NOT NULL DEFAULT 0::bigint,
sysuptime bigint NOT NULL,
exaddr character varying(16) NOT NULL,
dpkts bigint NOT NULL DEFAULT 0::bigint,
doctets bigint NOT NULL DEFAULT 0::bigint,
"first" bigint NOT NULL DEFAULT 0::bigint,
"last" bigint NOT NULL DEFAULT 0::bigint,
engine_type bigint NOT NULL,
engine_id bigint NOT NULL,
srcaddr character varying(16) NOT NULL DEFAULT '0'::character varying,
dstaddr character varying(16) NOT NULL DEFAULT '0'::character varying,
nexthop character varying(16) NOT NULL DEFAULT '0'::character varying,
"input" bigint NOT NULL DEFAULT 0::bigint,
output bigint NOT NULL DEFAULT 0::bigint,
srcport bigint NOT NULL DEFAULT 0::bigint,
dstport bigint NOT NULL DEFAULT 0::bigint,
prot bigint NOT NULL DEFAULT 0::bigint,
tos integer NOT NULL,
tcp_flags bigint NOT NULL DEFAULT 0::bigint,
src_mask bigint NOT NULL DEFAULT 0::bigint,
dst_mask bigint NOT NULL DEFAULT 0::bigint,
src_as bigint NOT NULL DEFAULT 0::bigint,
dst_as bigint NOT NULL DEFAULT 0::bigint
)

Запуск

Запускаем снифер

 fprobe -p -i eth1 127.0.0.1:2055

Экспорт информации в БД

Указываем пароль

 touch ~/.pgpass
chmod 0600 ~/.pgpass

формат записи

 hostname:port:database:username:password

Т.к. процедура коннекта с postgresql оказалась сильно бажной (или я что-то не понял), то пришлось делать промежуточную ковертацию в csv.

 #!/bin/bash

flow_files="/var/lib/flows/ft"
server="111.222.333.444"
port="5432"
user="flow"
database="statistics"
table="flows"
temp_sql="/tmp/flow_export.sql"
temp_csv="/tmp/flow_export.csv"

if [[ -f ${temp_sql} ]] ; then rm -f ${temp_sql}; fi
if [[ -f ${temp_csv} ]] ; then rm -f ${temp_csv}; fi

for flow_file in ${flow_files}/ft-* ; do
flow-export -f 2 < ${flow_file} > ${temp_csv}
fields=$(cat ${temp_csv} |grep "^\#"|sed "s/\#\://g")
cat ${temp_csv}|grep -v "^\#\:"|sed "s/^/INSERT INTO ${table} (${fields}) VALUES (/g"|sed "s/$/);/g" |sed "s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/\'&\'/g" > ${temp_sql}
psql -h ${server} -d ${database} -U ${user} -f ${temp_sql} -q
rm -f ${temp_csv}
rm -f ${temp_sql}
rm -f ${flow_file}
done

Анализ

Для анализа трафика можно использовать простой web-интерфейс, написанный на php/javascript с использованием JsCalendar. Чтобы использовать скрипт, потребуется установить apache или любой другой сервер, поддерживающий php, если он ещё не стоит. Фильтры в сценарии задаются следующим образом:

$filters = array (
array ("srcaddr0", "srcport0", "dstaddr0", "dstport0", "Filter1"),
array ("srcaddr1", "srcport1", "dstaddr1", "dstport1", "Filter2"),
... etc.
);

srcaddr - source address;

srcport - source port;

dstaddr - destination address;

dstport - destination port;

FilterN - название фильтра;


В случае, когда какой-либо из параметров принимать может любое значение, значение самого параметра в фильтре должно быть равным "%" (т.к. дальше этот параметр попадает в sql-запрос).

Задаём нужные фильтры, кладём всё в папку http-шника и запускаем.

Приложения (1)

  • stat.tbz2 – добавлено 02.11.2009 1:40 пользователем Олег Ключкин (версия 1)
    24 КБ Загрузить