Установка пакетов
Устанавливаем необходимые пакеты
- 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-шника и запускаем.