Рано или поздно, любой сетевой администратор сталкивается с необходимостью контролировать смену/появление новых MAC-адресов в сети. Если сеть совсем маленькая - это не сложно, если же сеть на сотни устройств - контролировать подключение устройств к сети становится довольно проблематично. С помощью утилиты ARPWatch можно отслеживать изменения в сети. ARPWatch отслеживает соответствие Ethernet-адресов и IP-адресов. Активность регистрируется в syslog и с помощью почтовых оповещений. Для прослушивания ARP-трафика на локальном ethernet-интерфейсе используется библиотека pcap.
Назначение ARPWatch
Принцип работы
Недостатки
Режимы Веб-интерфейса
Более детально с информацией о ARPWatch можно ознакомиться на странице проекта. После чтения документации можно приниматься за установку ARPWatch из системы портов:
По завершению установки выводится уведомление о возможности обновления файла ethercodes.dat:
You can update the ethercodes.dat file executing the following steps
cd /usr/local/arpwatch fetch http://standards.ieee.org/regauth/oui/oui.txt ./massagevendor oui.txt > ethercodes.dat rm oui.txt
Выполним предложенные шаги:
Большинству администраторов известно, что в первых трех октетах МАС-адреса кодируется производитель оборудования. Вышеописанными действиями мы обновили локальную базу связки МАС/Производитель.
Для запуска утилиты необходимо добавить опции запуска в rc.conf:
В даном примере указан e-mail, на который отправлять уведомления и дополнительно перечислены сетевые интерфейсы, на которых нужно искать связки IP-MAC.
Запускаем утилиту:
Проверяем, запустилась ли утилита:
Если на указанный е-mail начали приходить уведомления, значит ARPWatch корректно работает. Пример пришедшего уведомления с темой "new station":
hostname: <unknown> ip address: 10.200.96.20 ethernet address: f4:ec:38:9a:e4:f ethernet vendor: TP-LINK TECHNOLOGIES CO., LTD. timestamp: Thursday, October 13, 2011 1:43:02 +0300
ARPWatch рассылает четыре вида сообщений.
Кроме отправки уведомлений на e-mail, ARPWatch также пишет события в syslog. Пример записи в syslog:
В syslog могут писаться следующие типы уведомлений:
Настроим ведение логов в syslog. Добавим необходимые опции в syslog.conf:
Не стоит забывать о самом файле логов. Необходимо создать его:
После всех этих манипуляций даем команду на перезапуск syslogd:
В /var/log/arpwatch.log теперь попадают следующие записи:
Oct 18 01:10:05 router0 arpwatch: new station 10.100.0.1 0:15:17:8f:bf:fc Oct 18 01:10:05 router0 arpwatch: new station 10.100.0.116 0:12:cf:55:6e:40 Oct 18 01:10:08 router0 arpwatch: new station 10.100.0.2 0:1e:58:2d:46:11
Также не стоит забывать о регулярной ротации логов. Ротацию логов будем выполнять каждый шестой день недели:
Ну и напоследок, попробуем "прикрутить" web-интерфейс к ARPWatch. Остановим ARPWatch и удалим dat-файлы, чтобы после запуска ARPWatch все вхождения считал по новому:
Рассмотрено два различных Web-интерфейса для отображения результатов работы ARPWatch:
Лично я отдаю предпочтение варианту №2. Возможно я его и не тестировал бы, если бы первый вариант полностью устраивал.
Скачиваем себе в домашний каталог архив с дополнениями к ARPWatch. Распаковываем архив в созданный каталог arpwatch:
# mkdir /home/muff/arpwatch && cd /home/muff/arpwatch# fetch http://muff.kiev.ua/files/arpwatch.tar.gzarpwatch.tar.gz 100% of 21 kB 9548 kBps # tar -xzf arpwatch.tar.gz
Рекомендую ознакомиться с файлом README - именно в нем и хранятся инструкции по дальнейшей настройке.
Шаг первый - создание базы данных:
Дальше необходимо создать структуру таблиц. Согласно README, необходимо выполнить импорт из файла arpwatch.sql, но его я никак не мог обнаружить, поэтому пошел альтернативным путем. В консоли MySQL необходимо выполнить следующий запрос для создания структуры таблиц (надеюсь консоль MySQL не закрывали и на данный момент задействована БД arpwatch):
);
Шаг второй - создание пользователей с необходимыми правами доступа:
Шаг третий - запуск arpwatch. Стоит иметь ввиду, что в данном случае необходимо, чтобы почта доставлялась локальному пользователю arpwatch. Создадим пользователя arpwatch, которому и будем доставлять почту (я использовал uid 1005 - проверьте у себя какой uid можно использовать):
Отредактируем опции запуска ARPWatch в /etc/rc.conf, а именно - получателем уведомлений сделаем локального пользователя arpwatch:
Запустим arpwatch:
В почтовом лог-файле можно обнаружить записи о доставке сообщений локальному пользователю arpwatch. Пример такой записи:
Шаг четвертый - внесение запуска файла arpwatch2sql в cron. Для начала скопируем файл arpwatch2sql из домашнего каталога, куда был распакован архив, в рабочий каталог ARPWatch:
Необходимо "поправить" arpwatch2sql - переменную $mbox необходимо установить в /var/mail/arpwatch. Также я обратил внимание на то, что скрипт требует наличия Perl-ового расширения Date::Parse в системе (это будет оговорено в пятом шаге инструкции, но модуль требуется для шага 4, поэтому описываю его установку здесь). Выполним установку даного расширения из системы портов:
По ходу инсталяции Date::Parse установил еще три десятка модулей Perl, но это, как говорится, уже издержки производства.
Добавим в cron запуск скрипта arpwatch2sql с интервалом в 5 минут. Есть отличия от предложенного примера. Путь к исполняемым файлам необходимо указывать полностью. Строка запуска выглядит следующим образом:
База данных должна наполняться данными, а почтовый ящик пользователя arpwatch (/var/mail/arpwatch) - опустошаться.
Шаг пятый - настройка веб-интерфейса. Мануал советует поместить файлы в каталог cgi-bin веб-сервера. Однако, мы легких путей не ищем. Добавим такой блок в httpd.conf - конфигурационный файл веб-сервера Apache:
Создадим каталог /usr/local/www/arpwatch и скопируем в него файлы веб-интерфейса и установим владельцем файлов пользователя www:
Также необходима поддержка таких модулей Perl, как DBI и CGI.
Шаг шестой - настройка параметров подключения к базе данных. Необходимо отредактировать файл WebUtils.pm и изменить параметры соединения с базой данных на корректные (секция sub webutils_utminit). После внесения изменений можно проверить скрипт на наличие ошибок синтаксиса:
Отправим Apache команду на перечитывание конфигурации:
В браузере вводим ссылку http://ip_servera/arp/ и наблюдаем примерно такую картину:
Первым делом необходимо создать базу данных, куда будем записывать данные, полученные от ARPWatch. Создадим базу данных и пользователя с правами на эту базу данных:
mysql> create database arpwatch;Query OK, 1 row affected (0.00 sec) mysql> grant all on arpwatch.* to arpwatch@localhost identified by 'VerySecretPassword'; Query OK, 0 rows affected (0.00 sec) mysql> use arpwatch; Database changed
SQL-запросы для создания структуры таблиц будут следующие:
CREATE TABLE changed_ethernet_address(
CREATE TABLE new_station(
CREATE TABLE new_activity(
Скачиваем скрипт arpwatch.pl в каталог /usr/local/arpwatch и распакуем его из архива и выставим:
Этот скрипт будет парсить информацию, получаемую от ARPWatch и раскладывать ее по таблицам базы данных. Для того, чтобы скрипт мог "достучаться" до базы данных, необходимо изменить в нем параметры коннекта к базе данных. Редактируем файл и выставляем переменные в необходимые значения:
Для корректной работы скрипта необходима поддержка таких модулей Perl, как DBI, DBD-mysql и Getopt-Long. Если какой-то из модулей не установлен, его необходимо установить. Желательно из системы портов:
Для того, чобы скрипт "скармливал" данные в БД, необходимо в него перенаправить уведомления электронной почты ARPWatch. В моем случае на роутере работает Sendmail в дефолтной конфигурации. Выполним его настройку так, чтобы письма отправленные пользователю arpwatch перенаправлялись в скрипт arpwatch.pl.
Создадим пользователя arpwatch, которому и будем доставлять почту (я использовал uid 1005 - проверьте у себя какой uid можно использовать):
Создаем почтовый алиас для пользователя arpwatch с перенаправлением его почты в скрипт arpwatch.pl:
Чтобы изменения, добавленные в /etc/mail/aliases вступили в силу, необходимо отправить Sendmail-у команду на перечитывание алиасов:
Запускаем ARPWatch и проверяем, заполняются ли таблицы базы данных. Если заполняются - значит все в норме. Если же нет - смотрите /var/log/maillog и диагностируйте ошибку.
Приступим к настройке веб-интерфейса. Перейдем в каталог /usr/local/www и загрузим туда архив веб-интерфейса:
Необходимо указать параметры доступа к базе данных в файле /usr/local/www/arpwatch/config.inc.php. Редактируем следующие поля:
Добавим такой блок в httpd.conf - конфигурационный файл веб-сервера Apache:
Alias /arp/ "/usr/local/www/arpwatch/" <Directory "/usr/local/www/arpwatch/"> Options -Indexes DirectoryIndex index.php AllowOverride None Order Deny,Allow Allow from all </Directory>
В браузере вводим ссылку http://ip_servera/arp/ и видим следующий интерфейс:
На этом настройку утилиты ARPWatch можно считать оконченной. Теперь сеть находится под более жестким контролем.