Статистика BIND

Почему захотелось

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

Требуется

bind9. Как установить — этого полно в интернете. Например, для debian требуется всего одна команда «apt-get install bind9». Запуск\остановка /etc/init.d/bind9 start\stop.

Настройка

Главное, это собирать информацию о принятых запросах. Файл named.conf.

logging {
    channel query_log {
        file "/var/log/bind/bind.log";
        severity dynamic;
        print-time yes;
    };
    channel main {
        file "/var/log/bind/main.log";
        severity dynamic;
        print-time yes;
        print-category yes;
        print-severity yes;
    };
    category queries { query_log; };
    category xfer-in { main; };
    category xfer-out { main; };
    category security { main; };
    category resolver { main; };
    category client { main; };
    category unmatched { main; };
    category default { main; };
    category database { main; };
};

Выше я написал все, что собирает мой DNS сервер. Достаточно будет:

logging {
    channel query_log {
        file "/var/log/bind/bind.log";
        severity dynamic;
        print-time yes;
    };
    category queries { query_log; };
};

Сбор статистики

Подготовка

Я использую очень простой механизм хранения логов bind. Для этого создан отдельный пользователь (adduser), для удобного доступа по ftp (демон proftpd). Внутри домашней директории (например /home/net) расположены еще две /home/net/bind — сюда складываются логи DNS сервера, /home/net/stat — сюда будет помещатся интересующая меня статистика. Сбор логов происходит с помощью php скрипта, запускаемого с помощью cron. Статистика собирается за месяц.

Конфигурация cron

# m h  dom mon dow   command
0 */1 * * * /usr/bin/php /home/net/bind.php > /dev/null 2>&1
1 */1 * * * /usr/bin/php /home/net/stat1.php > /dev/null 2>&1
2 */1 * * * /usr/bin/php /home/net/stat2.php > /dev/null 2>&1
3 */1 * * * /usr/bin/php /home/net/stat3.php > /dev/null 2>&1
4 */1 * * * /usr/bin/php /home/net/stat4.php > /dev/null 2>&1

Первый скрипт, запускаемый каждый час делает остановку DNS сервера, копирование файла с логом и запуск DNS сервера. Интервал можете изменить по своему усмотрению. Мне все-равно необходимо перезапускать DNS сервер каждый час. Если нужно только обновить зоны, то надо «rndc reload». Остальный скрипты создают интересующую меня статистику. Запускаются последовательно, чтобы не нагружать сервер. Многие скрипты можно написать более оптимально, но я предлагаю только основу.

bind.php


Статистика

1. Кто, что именно и сколько раз спрашивал

Файл с информацией вида IP адрес [tab] количество запросов. Пример:

xx.143.5.39             954
xxx.177.96.1            858
xx.111.180.223          378
xxx.92.168.54           373
xxx.122.226.27          247
xxx.23.19.2             204

Файл с информацией о том, какими записями сколько раз интересовались. Пример:

$$.ru         19137
$$$$.ru         2969
$$$$.ru         1523
$$$$.ru         1224
$$$$$$.ru               1119
$$$$$.ru                1055
$$$.ru          1047

Файл с более детальной информацией, указывающей какими именно типами записей интересовались. Пример:

A       $$.$$.tj                39
AAAA    $$$.$$$$.ru             36
AAAA    $$$.$$$.ru              34
A       $$$$.ru         32
A       $$$.$$$$.ru             31
MX      $$$.$$$$.ru             30
A       $$$.$$$$$$$.com         30
A       $$$$.ru         30
A6      $$$.$$$$.ru             29

PHP-скрипт для создания такой информации:


—mef 16:16, 26 декабря 2008 (MSK)

2. Распределение запросов по времени

Статистика по часам, такого вида:

00      689     3.25%
01      673     3.17%
02      660     3.11%
...
21      878     4.14%
22      816     3.85%
23      836     3.94%

По минутам (почти все тоже самое) Таблица распределения типов запросов от времени и их общее количество.

H\RR|  A   |  MX  | AAAA | SRV  | ANY  | SOA  |  A6  | TXT  | AXFR | IXFR |CNAME |  NS  |TYPE99| PTR  |
----|------|------|------|------|------|------|------|------|------|------|------|------|------|------|
 00 |   276|   333|    40|    21|     5|    11|     2|     1|     0|     0|     0|     0|     0|     0|
 01 |   246|   338|    44|    20|     4|    10|     4|     1|     0|     0|     0|     5|     1|     0|
 02 |   278|   293|    46|    20|    10|    11|     2|     0|     0|     0|     0|     0|     0|     0|
 03 |   274|   243|    23|    20|    22|    13|     0|     2|     0|     0|     0|     0|     0|     0|
...
 23 |   310|   363|    54|    21|    68|    11|     0|     9|     0|     0|     0|     0|     0|     0|
----|------|------|------|------|------|------|------|------|------|------|------|------|------|------|
Sum |  7853| 10664|  1124|   528|   559|   297|    71|    38|    17|    25|    10|    18|     1|    10|
----|------|------|------|------|------|------|------|------|------|------|------|------|------|------|

Скрипт создания такой информации


3. Детально, по домена второго уровня

Такую же табличку распределения запросов хочется сделать для каждого домена, обслуживаемого DNS сервером. Очевидно, что для многих она будет «скромнее», чем общая. Пример:

# $$$$.ru
----|------|------|------|------|------|
H\RR|     A|   SRV|   ANY|    MX|  AAAA|
----|------|------|------|------|------|
 00 |    44|    21|      |    13|      |
 01 |    25|    20|      |     7|     1|
 02 |    54|    20|      |    35|      |
...
 20 |    36|    23|      |    31|      |
 21 |    29|    20|     1|    54|      |
 22 |    35|    20|     2|    24|      |
 23 |    29|    21|     8|    18|      |
----|------|------|------|------|------|
    |     A|   SRV|   ANY|    MX|  AAAA|
Sum |   895|   528|    27|   783|     3|
----|------|------|------|------|------|

Скрипт:


Источник http://firstwiki.ru/index.php/%D0%A1%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0_BIND

Запись опубликована в рубрике *Unix,*Linux, *Сети, FreeBSD. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Я не спамер This plugin created by Alexei91