SITE LOGO
Меню сайта
Категории каталога
Windows системы [7]
Всё про windows
Unix системы [7]
Наш опрос
Что нужно добавить на сайт?

[ Результаты · Архив опросов ]

Всего ответов: 71
Главная » Файлы » Операционки » Unix системы

Учет сетевого траффика
[ ] 2006-11-05, 4:23 PM

Одна из забот сисадмина это учет сетевого траффика, который проходит через шлюз локальной сети. Рано или поздно любой администратор сталкивается с этой проблемой. Программы биллинга стоят довольно дорого и поэтому для небольших сетей эти затраты не оправданы. Ну что ж выходить из ситуации нужно. Все что нам нужно это:

1. Расширенные свойства ядра Linux по управлению сетевым траффиком.

2. В качестве маршрутизатора используется компьютерс с Linux

3. Для обработки результатов будем использовать скриптовые языки типа Perl или специализированные программы и базы данных.




Простой учет траффика


Итак, система учета траффика строится с использованием трех вещей:


1. Специально созданных правил на маршрутизаторе.

2. Программы снятия статистики.

3. Программы отображения статистики.



Начнем с описания структуры базы данных MySQL

Наша база будент называтся traf, а таблица - traffic.



CREATE TABLE traffic (

id int(11) NOT NULL auto_increment,

date datetime NOT NULL,

ip varchar(20) NOT NULL default '',

in int(11) NOT NULL default '0',

out int(11) NOT NULL default '0',

KEY id(id)

) TYPE=MyISAM;




id - индекс записи в базе данных;

date - дата и время сохраняемой записи;

ip - IP-адрес к которому относится информация;

in - содержит информацию по входящему траффику;

out - содержит информацию по исходящему траффику;



Далее сконфигурируем наш брандмауэр, который будет позволять учитывать траффик. Вынесем это в отдельный скрипт

traffic.conf

# Рабочие места

WS1="192.168.0.1"

WS2="192.168.0.2"

wsX="192.168.0.X"

# Сеть организации

ORG="192.168.2.0/24"

# Полный список адресов

ALLNETS="$WS1 $WS2 $WSX $ORG"




Далее рассмотрим правила учета для iptables которые находятся в файле rc.traffic. После отладки этого файла его можно

добавить в rc.local



#!/bin/bash

# Подключаем конфигурационный файл

. /etc/traffic.conf

# Функция для создания правила учета

addrule(){

/sbin/iptables -N ACCT_IN_$1

/sbin/iptables -F ACCT_IN_$1

/sbin/iptables -A INPUT -j ACCT_IN_$1

/sbin/iptables -A ACCT_IN_$1 -s $2

/sbin/iptables -N ACCT_OUT_$1

/sbin/iptables -F ACCT_OUT_$1

/sbin/iptables -A OUTPUT -j ACCT_OUT_$1

/sbin/iptables -A ACCT_OUT_$1 -d $2

/sbin/iptables -A FORWARD -j ACCT_IN_$1

/sbin/iptables -A FORWARD -j ACCT_OUT_$1

{

# СОздаем правило для учета траффика

for NET in$ALLNETS; do

# Для всех сетей в списке $ALLNET создать правила учета траффика

addrule $NET $NET

done




Далее тестируем наши правила Выполним приведенный скрипт и после этого выполним
iptables -L и убедимся в правильности его работы.



После этого нужно написать программу, которая будет снимать статистику и сохранять ее в базе данных. Это будет простейшая

программа, которую необходимо добавить в crontab и вызывать с периодичностью скаже минут эдак 10.



#!/usr/bin/perl

# Функция занимающаяся сбором и внесением данных в БД

sun account{

$name=$_[0];

$IP_IN=0;

$IP_OUT=0;

$mysqlcommand="/usr/bin/mysql -h localhost traf -e";

$ipstuff=`/sbin/iptables -L -Z ACCT_IN_$name -v -x`;

@IPTBMASS=split(/ /,$ipstuff);

chomp $IPTBMASS[2];

$string=$IPTBMASS[2];

$string=s/s{1,}/ /g;

@INFOMASS=split(/ /,$string);

$IP_IN=$INFOMASS[2];

$ipstuff=`/sbin/iptables -L -Z ACCT_OUT_$name -v -x`;

@IPTBMASS=split(/ /,$ipstuff);

$string=$IPTBMASS[2];

$string=~ s/s{1,}/ /g;

@INFOMASS2=split(/ /,$string);

$IP_OUT=$INFOMASS2[2];

($min, $hours, $day, $mounth, $year) = (localtime) [1,2,3,4,5];

$time=$hours.":".$min.":00";

$mounth=$mount+1;

$year=$year+1900;

$date=$year."-".$month."-".$day;

$sql="insert into traffic values ('','".$date."

".$time."','".$name."','".$IP_IN."','"$IP_OUT."');";

'$mysqlcommand "$sql";

}



$config='./lconfreader.sh';




Для работы последней команды скрипта нужно написать еще один скрипт lconfreader.sh




# #!/bin/bash

# . ./lbiling.conf

# echo $ALLNETS

chomp $config;

@NETMASS=split(/ /,$config);

foreach $nets(@NETMASS)

{

# Для каждого элемента списка выполнить функцию account

account $nets;

}




Простейшая система учета сетевого траффика готова. Остальное все в ваших руках, хотите дописывайте модули визуализации,

генераторы отчетов или используйте стандартные программы. В любом случае удачи в нашем нелегком труде :)

Категория: Unix системы | Добавил: bshack
Просмотров: 1453 | Загрузок: 0 | Комментарии: 1 | Рейтинг: 0.0/0 |

Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа
Поиск
Друзья сайта
Статистика
Copyright MyCorp © 2025Сайт управляется системой uCoz