Наша совместная команда Banwar.org

Связаться с нами

  • (097) ?601-88-87
    (067) ?493-44-27
    (096) ?830-00-01

Статьи

8.5. Підрахунок трафіку. програма MRTG

8.5. Підрахунок трафіку. програма MRTG

Ця тема є однією з найбільш цікавих. Хочу відразу зауважити, що існує така безліч способів вважати трафік, що можна було б написати не одну книгу, розглядаючи всі з них.

Найпростішим способом є підрахунок за допомогою програми ifconfig. Щоб зрозуміти як все працює, введіть команду:

cat / proc / net / dev

В результаті ви побачите рядки, зображені на рис. 8.7. Для наочності я ввів цю команду в ОС Linux зі старим ядром, так як в новому ядрі з'явилися нові опції обліку і вони не вміщаються в вікні терміналу, а при перенесенні рядків втрачається наочність прикладу.

8

Мал. 8.7. Команда cat / proc / net / dev


Файл / proc / net / dev містить інформацію про роботу мережевих пристроїв. На цьому і ґрунтується даний метод підрахунку трафіку. Для самого ж підрахунку зручніше використовувати нижченаведений сценарій stat:

#! / Bin / sh

/ Bin / grep "$ 1" / proc / net / dev | / Bin / awk -F ":" '{print $ 2}' | \

/ Bin / awk '{print "In:" $ 1 "\ nOut:" $ 9; } '

Символ \ використовується як перенесення в звичайному тексті. Його зазвичай використовують для підвищення зручності читання сценаріїв. Інтерпретатором він буде сприйнятий як порожній символ.

Скопіюйте даний сценарій в каталог / usr / bin і зробіть його здійсненним:

ср ./stat / usr / bin

chmod 755 / bin / stat

Використовувати даний сценарій можна так:

/ Bin / stat eth0

де eth0 - це потрібний вам інтерфейс.

Можна було б додати перевірку на правильність вказівки сценаріїв, але це не стосується самого підрахунку трафіку. Спробуйте пропінгувати інтерфейс eth0 по його IP-адресою і знову виконайте сценарій.

Чесно кажучи, це найпростіший спосіб і, швидше за все, для вас він виявиться абсолютно марним. Я привів його лише для демонстрації - це як своєрідна програма "Hello, world!".

Тепер перейдемо до більш традиційним методом. В даному методі для підрахунку трафіку використовується IpChains. Щоб глибше розуміти, про що піде мова, я рекомендую прочитати спочатку гл. 14, а потім повернутися до цієї чолі. Думаю, читач мене простить за це незручність - так вже вийшло. Втім, я постараюся пояснити все якомога детальніше і в цьому розділі, у всякому разі, все повинно бути зрозуміло, а за роз'ясненнями опцій ipchains читач може звернутися до гл. 14.

Пропонований мною спосіб є не найкращим, але з його допомогою я сподіваюся підштовхнути читача на створення свого фундаментального продукту для підрахунку трафіку. Для того щоб цей спосіб працював, необхідно включити опцію IP: accounting в конфігураторі ядра і перекомпіліровать його. У більшості випадків ця опція вже включена. Потім потрібно встановити IpChains. Коли все буде готово, встановіть наступне правило IpChains:

ipchains -A output -d AAA.ААА.АAА.ААА -j ACCEPT

Дане правило потрібно встановити для кожної адреси, облік якого ви хочете вести. А переглянути статистику можна за допомогою команди:

ipchains -L -v

Chain input (policy ACCEPT: 4195746 packets, 1765818402 bytes):

Chain forward (policy ACCEPT: 142999 packets, 29941516 bytes):

Chain output (policy ACCEPT: 4182597 packets, 1309541595 bytes):

pkts bytes target prot opt ​​tosa tosx ifname source destination

4 308 ACCEPT all 0xFF 0x00 any anywhere AAA.AAA.AAA.AAA

Як ви помітили, це не повний лістинг. Я вибрав основне, пропустивши поля mark, outsize і ports, які не уявляють для нас інтересу.

Тут видно, що клієнт ААА.ААА.ААА.ААА отримав 308 байт або 4 пакети. В даному випадку в якості пакетів вступали пакети протоколу ICMP. Правило встановлено таким чином, що облік ведеться по всіх інтерфейсах (ifname = any), з будь-якого джерела, тобто адреси (source = anywhere) і враховуються всі протоколи (prot = all). Аналогічно можна встановити правило для обліку даних, отриманих від клієнта. Тільки в цьому випадку необхідно буде використовувати ланцюжок input. Вам потрібно встановити це правило, тому що зазвичай вважається не тільки вихідний, але і вхідний трафік клієнта, якщо ваш сервер, наприклад, виступає в ролі шлюзу.

Можна також використовувати дані, взяті з апаратного маршрутизатора Cisco. До речі, через Cisco працює популярна програма tacacs +. Ця програма використовується для обліку часу роботи користувачів в системі. І саме ця програма використовується поряд провайдерів при організації dialin-доступу. Програма доступна за адресою ftp.vsu.ru/pub/hardware/cisco/tacacs/tac+ia-0.96pre9.3.tar.gz

Дуже корисна також програма useripacct. Вона дозволяє дізнатися про трафік кожного користувача.

Вважати трафік можна також програмою trafshow, яку ви знайдете на компакт-диску. Ця програма вважає тільки локальний трафік (скільки байтів прийняв і передав даний комп'ютер і від кого він прийняв і кому передав). Тому, встановивши її на шлюзі, можна цілком контролювати трафік всієї мережі (див. Рис. 8.8). Крім того, трохи змінивши вихідний код trafshow, можна змусити її відображати не тільки IP-адреси або доменні імена комп'ютерів вашої мережі, але і МАС-адреси. Вихідний код цієї програми ви також знайдете на компакт-диску.

Мал. 8.8. програма trafshow


Як я вже писав, можна навести сотні способів обліку трафіку, а користуватися ви все одно будете одним. Причому, в більшості випадків, це буде спосіб, який ви «винайдете» самі, написавши сценарій для обробки даних статистики.

До інших способів обліку трафіку можна віднести облік з використанням протоколу SNMP. Саме з цього протоколу працює програма MRTG (http://www.switch.ch/misc/leinen/snmp/perl/). Програма MRTG надає дуже зручні засоби для підрахунку трафіку: підрахунок для всієї мережі і для окремого вузла, генерування звітів і діаграм в форматі HTML і багато іншого.

Програма MRTG (The Multi Router Traffic Grapher) призначена для моніторингу завантаження каналу за добу, тиждень, місяць і рік. Програма MRTG вміє малювати красиві картинки в форматі PNG, які відображають стан каналу за певний період часу.

Приклад використання ви можете побачити на сайті: http://www.stat.ee.ethz.ch/mrtg/

Для роботи mrtgнам потрібно маршрутизатор, який підтримує протокол SNMP. У цьому ж розділі буде розглянуто приклад, що дозволяє обійтися без маршрутизатора і взагалі не використовувати протокол SNMP. Загальна конфігурація мережі повинна виглядати приблизно як на рис 8.9.

9

Мал. 8.9. конфігурація мережі


З малюнка видно, що наша мережа отримує доступ до Internet через SNMP-маршрутизатор. Комп'ютер MRTG - це вузол локальної мережі, на якому встановлена ​​програма MRTG. Програма MRTG буде періодично запускатися на вузлі MRTG, оновлюючи інформацію про трафік. Користувачі локальної мережі можуть ознайомитися з цією інформацією по протоколу HTTP. Природно, на вузлі MRTG повинен бути встановлений Web-сервер.

Перед установкою програми переконайтеся в наявності таких бібліотек:

1. gd (http://www.boutell.com/gd/);

2. libpng (http://www.libpng.org/pub/png/);

3. zlib (http://www.info-zip.org/pub/infozip/zlib/).

Завантажити останню версію MRTG можна за адресою: http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/pub .

Якщо ви використовуєте операційну систему RedHat версії 7 або вище, програма MRTG, швидше за все, буде вже у вас встановлена. Ми не будемо завантажувати вихідні тексти програми, а відразу скористаємося вже зібраним пакетом rpm. Встановимо mrtg командою:

rpm -ih mrtg *

Після установки потрібно підготувати програму до першого запуску, тобто вказати, звідки отримувати відомості про трафік.

Програма MRTG складається з трьох частин:

1. cfgmaker - утиліта для створення конфігураційного файлу.

2. indexmaker - утиліта для створення файлу index.html - сторінки короткого огляду, що дає вам загальне уявлення про всіх цілях, які ви контролюєте. Про цілі ми поговоримо трохи пізніше.

3. mrtg - сам mrtg.

Перший конфігураційний файл зручно створити за допомогою програми cfgmaker, а потім додати в нього додаткові параметри.

Введіть команду:

cfgmaker -global 'WorkDir: / var / www / html / mrtg' \

-global 'Options [_]: bits, growright' \

-output /var/www/html/mrtg/mrtg.cfg \

community @ router

Тепер розберемося, що все це означає. Перш за все, нагадаю, що означає похила риса: це просто перенесення рядка. Коли ви будете вводити команду, замість похилої риси використовуйте пробіл як роздільник параметрів. Похила риса використовується, коли команда не поміщається в командному рядку.

Параметр WorkDir задає робочий каталог. У цей каталог будуть поміщені html-файли і малюнки - звіти про трафік. Каталог / var / www / html /, як ви вже встигли помітити, є кореневим каталогом нашого Web-сервера, тому для перегляду статистики потрібно ввести наступний URL в вікні браузера: http: // host / mrtg /

Крім параметра WorkDir є також параметри HtmlDir і ImageDir.

У ці каталоги будуть поміщені html-файли і картинки. При визначенні цих параметрів потрібно враховувати, що параметр WorkDir має пріоритет над параметрами HtmlDir і ImageDir і тому, якщо вказано параметр WorkDir, mrtg помістить звіти і картинки саме в цей каталог, а значення параметрів HtmlDir і ImageDir будуть проігноровані.

Група глобальних параметрів Options управляє побудовою зображення. Параметр bits означає, що ми вимірюємо трафік в бітах, тому всі числа потрібно помножити на 8. Другий параметр, growright, вказує напрямок осі часу. Пізніше ми розглянемо всі параметри докладніше.

Параметр output програми cfgmaker задає ім'я конфігураційного файлу, який буде створений.

Примітка. Параметри WorkDir і Options є параметрами програми mrtg, а параметри global та output - параметрами програми cfgmaker.

Параметр community @ router вказує ім'я спільноти SNMP-устрій-ства. У нашому випадку - це наш SNMP-маршрутизатор. Зазвичай використовується ім'я спільноти public. За більш точною інформацією звертайтеся до адміністратора SNMP-маршрутизатора. Замість імені вузла в цьому параметрі можна вказати IP-адресу, наприклад, [email protected].

Параметр community @ router якраз і є метою, яку ми будемо контролювати.

Після виконання цієї команди буде згенеровано такий файл mrtg.cfg:

WorkDir: / var / www / html / mrtg

Options [_]: bits, growright

Target [r1]: community @ router

Ім'я мети (r1) пишеться в квадратних дужках. Для різних цілей можна задавати різні параметри, наприклад:

Target [r1]: 1: community @ router

Target [r2]: 2: community @ router

MaxBytes [r1]: 1250000

MaxBytes [r2]: 2500000

Title [r1]: Traffic Analysis for first interface

PageTop [r1]:

Title [r2]: Traffic Analysis for second interface

PageTop [r2]:

Параметр MaxBytes визначає максимальне число байт для мети. Значення, що перевищують MaxBytes, будуть ігноруватися.

Параметр Title визначає заголовок сторінки, яка буде містити інформацію про мету, а параметр PageTop - текст, який буде поміщений у верхній частині цієї сторінки.

Числа 1 і 2 перед ім'ям спільноти - це номери інтерфейсів у внутрішній таблиці SNMP-пристрою. Після імені (або IP-адреси) SNMP-пристрою можна вказати порт SNMP. За замовчуванням використовується стандартний порт 161:

community @ router: 161

В якості мети може бути використана програма, яка виводить на стандартний висновок чотири рядки:

1. Кількість прийнятих байтів.

2. Кількість відправлених байтів.

3. Час роботи об'єкта після включення.

4. Назва об'єкту.

Програму потрібно записати в зворотних лапках, наприклад:

Target [r3]: `/ usr / bin / program`

Дуже корисними параметрами є Refresh і Interval. Перший визначає частоту оновлення сторінок зі звітами в браузері, а другий - передбачуваний інтервал запуску програми MRTG. За замовчуванням значення обох параметрів дорівнює 300 секундам.

Опції perminute і perhour дозволяють вимірювати трафік в одиницях за хвилину і годину відповідно. Опція noinfo пригнічує висновок інформації про пристрій і часу його роботи. приклад:

Options [_]: bits, perminute, noinfo

Я думаю, що теорії цілком достатньо, тим більше, що разом з MRTG поставляється відмінна документація, яка доступна за адресою http: // localhost / mrtg /. Тепер перейдемо до практичної налаштування. Швидше за все, у вас не буде SNMP-маршрутизатора, оскільки в невеликих мережах маршрутизатором є сама Linux-машина, а виділення коштів на придбання апаратного маршрутизатора в найближчі кілька років не передбачається. Та й набагато цікавіше вважати трафік свого комп'ютера, а не якогось маршрутизатора, якого ви навіть і не бачили і який встановлений десь на третьому поверсі.

Для роботи MRTG необхідно встановити і налаштувати сервер snmpd. Однак в більшості випадків цього робити не потрібно: коректна настройка даного сервера - це досить нетривіальне завдання, а зайва «діра» в системі безпеки нам не потрібна. До того ж настройка сервера snmpd виправдовує себе, якщо ви хочете вважати трафік цього комп'ютера не локальною програмою mrtg, а віддаленої, яка запущена на іншому комп'ютері і отримує дані від нашого сервера по протоколу SNMP.

Я пропоную досить просте рішення, настройка якого не займе у вас багато часу. Грунтується воно ось на чому: як я вже зазначав, замість мети можна вказати програму, яка б виводила інформацію на стандартний висновок в такому форматі:

рядок 1

рядок 2

рядок 3

рядок 4

• Рядок 1 - це що входять байти (прийняті).

• Рядок 2 - вихідні байти (відправлені).

• Рядок 3 - час, на протязі якого працює пристрій.

• Рядок 4 - ім'я мети.

Де ж взяти цю програму? Написати самому! Зараз я детально опишу, як це зробити. Настійно не рекомендую вам відразу взяти і використовувати готовий лістинг: ви не зрозумієте найголовнішого - як саме відбувається підрахунок трафіку. В результаті ваша система підрахунку трафіку буде працювати в такому режимі: програма буде вважати трафік, a MRTG - будувати графіки.

Визначимо, звідки братимемо інформацію про трафік. Операційна система Linux сама виконує підрахунок трафіку. Вся інформація, яка вам необхідна, міститься в файлі / proc / net / dev. Виконайте команду:

cat / proc / net / dev

Результат виконання цієї команди ви вже бачили в цьому розділі (рис. 8.7). Більш нові ядра надають більше інформації про роботу мережевих пристроїв, тому виконайте цю команду для того, щоб побачити, яку інформацію про мережеві пристрої надає ваша система. Зазвичай перше інформаційне поле файлу / proc / net / dev - це кількість прийнятих байтів, а дев'яте - кількість відправлених байтів.

Розробляється програма повинна знайти потрібний інтерфейс і повернути кількість прийнятих і переданих байтів. Потім програма повертає час, протягом якого працює пристрій. Це час досить легко обчислюється за допомогою програми uptime.

1:51 pm up 2:10, 4 users, load average: 0.02, 0.04, 0.00

Програма uptime, крім всякої іншої інформації, повертає час, протягом якого система працює, тобто з моменту завантаження операційної системи. У наведеному вище прикладі видно, що машина безперервно працювала 2 години і 10 хвилин. 2 години і 10 хвилин - це значення, яке розробляється програма повинна вивести в третьому рядку. Ви можете сміливо використовувати цей час, тому що в основному інтерфейси сервера «піднімаються» при завантаженні системи і різниця між uptime системи і uptime інтерфейсу складе всього кілька секунд.

Четвертий рядок - це ім'я мети, тобто ім'я інтерфейсу, трафік якого нам потрібно підрахувати. Сподіваюся, що алгоритм програми ясний, залишилося реалізувати все це програмно.

Створіть файл count (див. Лістинг 8.10) і помістіть його в каталог / usr / bin (не забудьте зробити його виконуваним!).

Де ж взяти цю програму?

Новости

Banwar.org
Наша совместная команда Banwar.org. Сайт казино "Пари Матч" теперь доступен для всех желающих, жаждущих волнения и азартных приключений.