- Мониторинг (измерение) потребляемого траффика в Linux
- Пошаговая инструкция
- Рулим трафиком в Linux. Аккаунтинг, сбор статистики
- Настройка PPTP-сервера
- Настройка ulog-acctd
- Настройка iptables
- MySQL и схема БД
- Парсим лог
- Форум русскоязычного сообщества Ubuntu
- Автор Тема: [HOWTO] Подсчёт трафика по ip на шлюзе (через iptables) (Прочитано 21532 раз)
- sht0rm
- thunderamur
- sht0rm
- thunderamur
- Unreg
- AnrDaemon
- thunderamur
- thunderamur
- andreyos
- AnrDaemon
- podkovyrsty
- thunderamur
- Трафик-полицай
- Недельный лимит трафика — 100 МБ
- Т.е. в сутки должно быть в среднем 20 МБ, можно больше, но за неделю, чтоб не выходило больше недельного лимита
Мониторинг (измерение) потребляемого траффика в Linux
Однажды мне потребовалось измерить количество трафика, которое «пожирает» некоторое приложение. Один из способов такого измерения — это установить прокси. Но что, если не хочется ставить прокси-сервер. Мне вот не хотелось. В поисках других способов я сначала перерыл Хабр, потом интернет. Так как я в своё время потратил на это много времени, то сейчас я создаю эту заметку, чтобы у других такой проблемы не возникло.
ВАЖНО:
Этот метод работает, если мы знаем по какому адресу (адресам) обращается наше приложение, или же с какого/каких портов.
Пошаговая инструкция
1. iptraf
iptraf — это небольшая программа, которая умеет мониторить всю сетевую активность компьютера.
Исходники и бинарники можно загрузить с сайта iptraf.
В случае Ubuntu установить iptraf можно выполнив команду:
sudo apt-get install iptraf
2. Запускаем!
В терминале пишем: iptraf
3. Настраиваем
Надо включить логирование (иначе программа ограничиться выводом на экран). Делается это, очевидно, в разделе «Configure».
4. Запуск мониторинга
Уходим из настроек, жмём «IP traffic monitor» и выбираем путь к файлу, куда будем логировать сетевую активность.
После этого мы должны увидеть такую картину:
Это всё, что нужно! Почти.
5. Анализ
Как я уже упоминал выше, нужно знать, по какому адресу/порту обращается наше приложение (трафик которого мы высчитываем).
Например, если мы хотим посчитать сколько трафика «стоит» час радио last.fm, мы должны определить следующее:
приложение last.fm обращается к адресам вроде таких:
195.24.* (last.fm не обращается к одному адресу, а обращается к диапазону адресов).
Чтобы вытащить из лога (который писался час) количество трафика, которое было съедено, я написал небольшую «программку» на java, которая этот трафик и считает:
Этот вариант хорошо работает, когда вы постоянно пишите логи, а потом уже надо «что-то там» измерить. Просто нужно написать/сконфигурировать парсер именно так, как необходимо в конкретной ситуации, и тогда можно получить все необходимые данные.
Источник
Рулим трафиком в Linux. Аккаунтинг, сбор статистики
Каждый админ должен в своей жизни настроить сендмейл, написать биллинг и обругать маздай 🙂
© bash.org.ru
Сендмейл мы настраивать не будем, как и ругать детище Билли, а попробуем создать что-то вроде биллинга, т.к. этот вопрос рано или поздно встает практически перед всеми системными администраторами.
Статья ориентирована на новичков в администрировании и опытным спецам навряд ли будет интересна.
И так, что мы имеем? Сеть из 50-200 компьютеров, выделенный интернет-канал (ADSL, Ethernet, etc..), linux-роутер. Требуется считать интернет-трафик пользователей (по разным направлениям), ограничивать скорость, определять лимиты трафика в месяц. В дополнение, хочется управлять всем этим через какую-нибудь веб-морду.
За основу возьмем дистрибутив ubuntu-server 8.04.
Чтобы однозначно идентифицировать пользователя и обезопасить кражи трафика при помощи подмены айпи-адресов, настроим VPN-сеть, используя PPTPD.
Практически все действия в консоли будем выполнять от рута, поэтому чтобы не писать каждый раз sudo, пишем:
Настройка PPTP-сервера
# apt-get install pptpd
Открываем конфиг /etc/pptpd.conf и добавляем строчки:
определяем адрес сервера и диапазон адресов пользователей в виртуальной сети.
По-умолчанию pptpd хранит аккаунты пользователей в файле /etc/ppp/chap-secrets, добавляем тестовые аккаунты:
# Secrets for authentication using CHAP
# client server secret IP addresses
user1 pptpd 123 10.1.0.2
user2 pptpd 567 10.1.0.3
обратите внимание на айпи-адреса, они должны быть из диапазона, указанного в параметре remoteip файла /etc/pptpd.conf!
Перезапускаем сервис pptpd:
Разрешаем подключения к нашему сервису:
# iptables -A INPUT -s 192.168.0.0/24 -p tcp -m state —state NEW -m tcp —dport 1723 -j ACCEPT
Вместо 192.168.0.0/24 подставьте адрес своей локальной сети. Пробуем подключиться к нашей виртуальной сети, для этого создаем на машине с Win XP новое VPN — соединение («Создание нового подключения» — «Подключение к сети на рабочем месте» -«Подключение к виртуальной частной сети»). Если все получилось двигаемся дальше.
Настройка ulog-acctd
# apt-get install ulog-acctd
Открываем конфиг /etc/ulog-acctd.conf. Нас интересуют параметры accounting format и fdelay.
Параметр accounting format отвечает за формат записи лога, подробное описание каждого параметра есть в комментариях, так что подробно расписывать не буду. Нам нужен такой формат:
# время отправитель получатель трафик
accounting format=»%t\t%s\t%d\t%b\n»
Параметр fdelay определяет через какой промежуток времени ulog-acctd будет сбрасывать накопленную статистику в лог, выставим его в 10 секунд.
Настройка iptables
# iptables -t nat -A POSTROUTING -s 10.1.0.0/24 -j MASQUERADE
Этим правилом сообщаем ulog’у какой трафик логировать:
# iptables -A FORWARD -d 10.1.0.0/24 -j ULOG —ulog-cprange 48 —ulog-qthreshold 50
Нас интересует транзитный трафик, идущий в VPN — сеть.
Теперь протестируем получившуюся связку, подключитесь к сети и попробуйте что-нибудь скачать, в логе /var/log/ulog-acctd/account.log должны появится такие записи:
1224187495 208.67.222.222 10.1.0.2 126
1224187534 205.188.9.192 10.1.0.2 40
1224187556 62.213.122.2 10.1.0.2 10660
1224187594 205.188.9.192 10.1.0.2 40
1224187599 62.213.122.2 10.1.0.2 22130
1224187615 62.213.122.2 10.1.0.2 1037
.
Первое значение — время в формате unix, второе — адрес отправителя, третье — адрес получателя (пользователя), четвертое — количество байт.
MySQL и схема БД
# apt-get install mysql-server
Создаем в MySQL пользователя ulog и импортируем схему БД:
CREATE DATABASE `ulogdb` DEFAULT CHARSET utf8;
CREATE TABLE `data` (
`id` int(11) NOT NULL auto_increment,
`id_user` int(11) NOT NULL,
`ts` int(11) NOT NULL,
`bytes` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET utf8;
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`login` varchar(32) NOT NULL,
`password` varchar(64) NOT NULL,
`ip` varchar(15) NOT NULL,
PRIMARY KEY (`id`),
KEY `ip` (`ip`)
) ENGINE=MyISAM DEFAULT CHARSET utf8;
Это упрощенная схема, позже мы ее модернизируем. В таблице data храним агрегированную статистику по трафику, в users информация о пользователях. Добавьте в таблицу users пользователей, которых указали в /etc/ppp/chap-secrets.
INSERT INTO `users` (`login`, `password`, `ip`) VALUES
(‘user1’, ‘123’, ‘10.1.0.2’);
INSERT INTO `users` (`login`, `password`, `ip`) VALUES
(‘user2’, ‘567’, ‘10.1.0.3’);
Парсим лог
# apt-get install libdbd-mysql-perl
Привожу полный текст срипта:
# определяем имя БД, пользователя и пароль
my $db_name = «ulogdb»;
my $db_user = «ulog»;
my $db_pass = «1234»;
# путь к лог-файлу
$account_log = «/var/log/ulog-acctd/account.log»;
# подключаемся к нашей базе
my $DBH = DBI->connect(«DBI:mysql:$db_name:localhost»,$db_user,$db_pass) or die «Error connecting to database»;
# получаем список пользователей в связке ip+id_user
my $STH = $DBH->prepare(«select ip,id from users»);
$STH->execute;
while (@tmp = $STH->fetchrow_array()) <
$users <$tmp[0]>= $tmp[1];
>
$STH->finish;
# делаем временную копию лога и очищаем оригинальный файл
system «cp $account_log /tmp/ulog-parser.tmp && cat /dev/null > $account_log»;
open LOGFILE,» ) <
chomp;
# переменную $saddr пока не используем,
# она пригодится позже
($ts,$saddr,$daddr,$bytes) = split /\t/;
# создаем новую временную метку, необходимо для агрегирования
# статистки пользователя за определенный интервал времени
# в одну запись. интервалом будем считать 1 минуту
# сопоставляем айпи из лога со списком пользователей
# если айпи имеется в базе — наш клиент
# массив со статистикой имеет древовидную структуру:
# метка времени -> id пользователя -> полученный трафик
# подготавливаем запросы к БД
my $STH_CHK = $DBH->prepare(«select id_user,id from data where ts=?»);
my $STH_ADD = $DBH->prepare(«insert into data (id_user,ts,bytes) values(. )»);
my $STH_UPD = $DBH->prepare(«update data set bytes=bytes+? where >
# проходим по всему массиву статистики вложенным циклом
#
for $ts (keys %data) <
# проверяем, если ли в базе записи с такой меткой времени
$STH_CHK->execute($ts);
%ex_data = ();
while (@tmp = $STH_CHK->fetchrow_array()) <
$ex_data <$tmp[0]>= $tmp[1];
>
$STH_CHK->finish;
# выбираем данные о пользователях в текущем периоде
for $id_user (keys %<$data<$ts>>) <
if (exists($ex_data<$id_user>)) <
# если запись уже есть, то просто обновляем значение поля bytes
$STH_UPD->execute($data<$ts><$id_user>,$ex_data<$id_user>);
$STH_UPD->finish;
> else <
# иначе добавляем новую запись
$STH_ADD->execute($id_user,$ts,$data<$ts><$id_user>);
$STH_ADD->finish;
>
>
>
# отключаемся от БД
$DBH->disconnect;
Сохраним скрипт как /usr/bin/ulog-parser.pl и установим атрибуты:
# chmod 700 /usr/bin/ulog-parser.pl
Пробуем запустить, и смотрим, появились ли данные в таблице data:
При минимальных знаниях PHP и SQL сделать вывод статистики не составит труда 😉
На этом я пока закончу, статья и так слишком большая получилась. Если данная тема будет Вам интересна — напишу продолжение (группировка по трафика по направлениям, ограничение скорости).
Источник
Форум русскоязычного сообщества Ubuntu
Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!
Автор Тема: [HOWTO] Подсчёт трафика по ip на шлюзе (через iptables) (Прочитано 21532 раз)
0 Пользователей и 1 Гость просматривают эту тему.
‘$time1’
AND `timestamp`
$arCli = Array(
Array(«192.168.0.1″,»Новый сервер»),
Array(«192.168.0.220″,»Тест»),
.
);
под себя.
после чего сможем увидеть
sht0rm
- Старожил
- Сообщений: 3397
-
Re: Подсчёт трафика на шлюзе (iptables)
thunderamur
- Автор темы
- Заслуженный пользователь
- Старожил
- Сообщений: 6848
-
Re: Подсчёт трафика на шлюзе (iptables)
он умеет считать трафик по айпи?
т.е. мне надо знать: сколько съел сам шлюз и сколько компы, которые через него ходят в инет.
sht0rm
- Старожил
- Сообщений: 3397
-
Re: Подсчёт трафика на шлюзе (iptables)
thunderamur
- Автор темы
- Заслуженный пользователь
- Старожил
- Сообщений: 6848
-
Re: Подсчёт трафика на шлюзе (iptables)
ну тогда вопрос номер 1:
чо бы такое добавить в iptables, чтобы увидеть, сколько схавал сам шлюз.
Есть мысль смотреть:
— =
Но думаю есть вариант кошернее.
Unreg
- Активист
- Сообщений: 751
- Ubuntu 8.04 / Acer Aspire One 110 > Debian 5.04
-
Re: Подсчёт трафика на шлюзе (iptables)
AnrDaemon
- Заслуженный пользователь
- Старожил
- Сообщений: 27732
-
Re: Подсчёт трафика на шлюзе (iptables)
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.
Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…
thunderamur
- Автор темы
- Заслуженный пользователь
- Старожил
- Сообщений: 6848
-
Re: Подсчёт трафика на шлюзе (iptables)
в общем сделал всё на fprobe + flow-tools, несколько дней посчитало, потом почему-то нули скрипт стал показывать, потом почему-то не появилась новая папка для нового дня, короче не впечатлило, разбираться не охота, лучше просто iptables буду считать, оно как-то понятнее, сам себе хозяин, как хочу так и дрочу что называется. вопрос только в том, как учесть трафик самого шлюза, т.е. сколько он не перенаправил, а захавал сам?
есть вариант смотреть общий и вычитать из него то, что было раздано, но думаю есть вариант кошернее.
thunderamur
- Автор темы
- Заслуженный пользователь
- Старожил
- Сообщений: 6848
-
Re: [РЕШЕНО] Подсчёт трафика на шлюзе (iptables)
andreyos
- Новичок
- Сообщений: 11
-
Re: [РЕШЕНО] Подсчёт трафика на шлюзе (iptables)
AnrDaemon
- Заслуженный пользователь
- Старожил
- Сообщений: 27732
-
Re: [РЕШЕНО] Подсчёт трафика на шлюзе (iptables)
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.
Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…
podkovyrsty
- Старожил
- Сообщений: 1547
- Content-Type: alternative
-
Re: [РЕШЕНО] Подсчёт трафика на шлюзе (iptables)
thunderamur
- Автор темы
- Заслуженный пользователь
- Старожил
- Сообщений: 6848
-
Re: [РЕШЕНО] Подсчёт трафика на шлюзе (iptables)
Буду очень благодарен если подробней уважаемый автор темы опишет как создать такую таблицу в mysql базе, я так понимаю название базы traffic имя пользователя базы user и пароль тот что тоже в скрипте, название скрипта который нужно добавить в cron — traffic.py? если не трудно то детально оришите как добавить в cron, */1 * * * * /root/traffic.py я там сохнанил скрипт и так добавляю в cron но не исполняется он
и тоже интересует как прикрутить веб морду ко всему этому?
вторую неделю ищу хоть чтото что считает трафик юзеров по ip и это лучшее что я нашел но много вопросов
буду рад детальным инструкциям
# m h dom mon dow command
*/1 * * * * sudo /home/thunder/bin/traffic.py
скрипт должен быть исполняемым. В нём должны быть введены ваши данные для работы с базой — логин, пароль, расположение.
Трафик-полицай
/* Переменные для соединения с базой данных */
$hostname = «localhost» ;
$username = «user» ;
$password = «» ;
$dbName = «traffic» ;
/* Таблица MySQL, в которой хранятся данные */
$userstable = «raw» ;
/* создать соединение */
if (! mysql_connect ( $hostname , $username , $password )) <
echo( mysql_error ());
die( mysql_error ());
>;
/* выбрать базу данных. Если произойдет ошибка — вывести ее */
if (! mysql_select_db ( $dbName )) <
echo( mysql_error ());
die( mysql_error ());
>;
mysql_query ( «SET NAMES utf8;» );
if( $_SERVER [ ‘REMOTE_ADDR’ ]!= «127.0.0.1» ) : ?>
Недельный лимит трафика — 100 МБ
Т.е. в сутки должно быть в среднем 20 МБ, можно больше, но за неделю, чтоб не выходило больше недельного лимита
‘$time1’
AND `timestamp`
опять же его нужно править под себя.
З.Ы.: материал рассчитан на тех кто не знает как посчитать собственно траффик, но знает всё остальное, для них будет достаточно наличие самого скрипта, который нужно поправить и засунуть в крон.
Источник