Вы здесь

arpwatch как средство наблюдения за сетью

По мере разрастания сети, любой администратор сталкивается с проблемой появления неизвестных IP и/или попытками подмены IP.
Способов борьбы с этим злом существует довольно много. Как показала практика, эффективные решения оказываются нередко неоправданно дорогими, а дешевые решения не всегда достаточно эффективными и требующими больших человеческих и временных затрат.

Простое решение для обнаружения злоумышленников предлагает программа arpwatch.
Оно позволяет отслеживать изменения в сети и информирует вас, когда они происходят.
Программа наблюдает за сегментом локальной сети и ведет собственную таблицу пар адресов IP-МАС. Так, если в сети появятся новые машины или если машины начнут использовать другие IP-адреса, то arpwatch извещает системного администратора по электронной почте.
Если сеть достаточно большая, то держать такое количество почты будет неразумно, да и не всегда удобно, особенно если системных администраторов несколько.
Выходом из данной ситуации будет хранение информации в базе данных и просмотр ее через вэб-форму.
Исходные данные:
ОС FreeBSD 6.2 http://www.freebsd.org/
Почтовый сервер CommunigatePro http://lang.communigate.com/ru/
База данных mysql http://www.mysql.com/
Язык скртипта perl http://www.perl.org/
Дополнительно нужно установить модули DBI и Getopt::Long
Вэб-сервер – Apache c mod_php http://apache.org/
Устанавливаем arpwatch из портов.
%cd /usr/ports/net-mgmt/arpwatch/
% make install clean

После того, как программа проинсталлирована, редактируем /etc/rc.conf
Добавляем в него:
arpwatch_enable=»YES»
arpwatch_flags=»-m admin@mydomain.ru (e-mail на который нужно отсылать сообщения)
Если на сервере несколько интерфейсов, то можно указать arpwatch на каком интерфейсе нужно слушать.
Для этого добавляем в arpwatch_flags опцию –i имя_интерфейса.
Например arpwatch_flags=»-i rl0″
Если слушать нужно на нескольких интерфейсах, то перечисляем их в опции arpwatch_interfaces.
Например: arpwatch_interfaces=»em0 vlan10 vlan20″
Если на интерфейсе находиться несколько сетей (а также если в сегменте могут ходить IP из сетей не интересующие нас), то можно настроить arpwatch таким образом, чтобы он собирал данные только из определенных сетей.
Для этого нужно добавить флаг –n адрес сети/число-бит
Например arpwatch_flags=»-n 192.168.10.0/24″
Поскольку флаг применяется ко всем интерфейсам, для перечисления сетей по конкретным интерфейсам используем опции, например:
arpwatch_vlan10_options=»-n 192.168.10.0/24″
arpwatch_vlan20_options=»-n 192.168.20.0/24″

Если на интерфейсе несколько сетей, то перечисляем их, например
arpwatch_em0_options=»-n 10.0.0.0/24 -n 10.0.1.0/24″
Назначение других флагов можно прочитать в man, либо в переводе на http://xgu.ru/wiki/Man:arpwatch
Итак, у нас должно получиться чтото вроде:
arpwatch_enable=»YES»
arpwatch_flags=»-m admin@mydomain.ru
arpwatch_interfaces=»vlan10 vlan20″
arpwatch_vlan10_options=»-n 192.168.10.0/24″
arpwatch_vlan20_options=»-n 192.168.20.0/24″

Если будет достаточно лишь получать оповещения по почте, то можно запускать программу.
%/usr/local/etc/rc.d/arpwatch.sh start
По умолчанию, директория для хранения данных собранных arpwatch /usr/local/arpwatch
Изменить ее можно либо в файле /usr/local/etc/rc.d/arpwatch.sh, либо задав флаг –f в опциях arpwatch.
Если в опциях указано несколько интерфейсов, то arpwatch запускается отдельной копией для каждого интерфейса.
%ps ax | grep arpwatch
45968 p1- S 0:01,95 /usr/local/sbin/arpwatch -m arpwatch@awax.su  -i vlan10 -n 192.168.10.0/24 -f arp.vlan10.dat
45971 p1- S 0:02,88 /usr/local/sbin/arpwatch -m arpwatch@awax.su  -i vlan20 -n 192.168.20.0/24 -f arp.vlan20.dat

Обратите внимание, мы не указывали флаг –f , arpwatch сам его подставил, поскольку данные собираются на нескольких интерфейсах. По умолчанию (если слушается один интерфейс) данные пишутся в файл /usr/local/arpwatch/arp.dat
Будте готовы к тому, что вам начнет приходить масса почты.
arpwatch рассылает четыре вида сообщений.
new activity
Эта пара ethernet/ip-адресов хост проснулся после спячки в шесть месяцев или больше.
new station
Этот ethernet-адрес раньше не замечали.
flip flop
Ethernet-адрес изменился с одного известного адреса на другой известный адрес. (Если старый или новый адрес относится это DECnet-адрес и прошло меньше 24х часов, почтовая версия сообщения не отправляется).
changed ethernet address
Хост перешёл на использование нового ethernet-адреса.
Пока будет заполнятся база, можно отключить оповещение по почте, чтобы не выгребать из почты сообщения new station
Если данные необходимо хранить в базе данных mysql, то перед запуском arpwatch нужно настроить фильтр в почтовой программе, чтобы приходящие сообщения передавались на обработку во внешний скрипт.
Для начала нужно создать базу данных.
create database arpwatch;
создаем отдельные таблицы для каждого вида сообщений:
create table flip_flop(hostname varchar(255),ip_address varchar(15),ethernet_address varchar(17),ethernet_vendor varchar(255),old_ethernet_address varchar(17),old_ethernet_vendor varchar(255),timestamp varchar(19),previous_timestamp varchar(19),delta varchar(50));
create table changed_ethernet_address(hostname varchar(255),ip_address varchar(15),ethernet_address varchar(17),ethernet_vendor varchar(255),old_ethernet_address varchar(17),old_ethernet_vendor varchar(255),timestamp varchar(19),previous_timestamp varchar(19),delta varchar(50));
create table new_station(hostname varchar(255),ip_address varchar(15),ethernet_address varchar(17),ethernet_vendor varchar(255),timestamp varchar(19));
create table new_activity(hostname varchar(255),ip_address varchar(15),ethernet_address varchar(17),ethernet_vendor varchar(255),timestamp varchar(19));

Устанавливаем в случае необходимости модули perl.
%perl –MCPAN “-e install DBI”
%perl –MCPAN “-e install Getopt::Long”

Согласно лицензии, триал версию CommunigatePro можно использовать на законных основаниях для внутренних нужд компании, чем мы и воспользуемся. Установка и настройка данного сервера широко описана в сети и выходит за рамки данной статьи. Далее рассмотрены настройки относящиеся к теме.
Перенаправляем почту по фильтру имя отправителя (адрес отправителя и т.п.) во внешний скрипт arpwatch.pl
Для того, чтобы пользователь почты мог получить доступ к папке очередей, назначаем ему системное имя пользователя у которого есть соответсвующие права, либо создаем системного пользователя с такимже именем, как и имя почтового ящика и предоставляем ему права доступа в папку очередей.
Для примера, назначим нашему почтовому пользователю системное имя root
Для этого на закладке «Установки» в настройках пользователя, в разделе «Аутентификация» «Имя в ОС» задаем root.

Настраиваем правила.
Заходим на закладку «Почта» в настроках пользователя и создаем правило, например arpwatch.
Редактируем правило.
Выставляем данные
«Имя автора» «Равно» «*Arpwatch*»
Действия
«Выполнить» [FILE] /var/CommuniGate/arpwatch.pl
«Выбрость»

Скрипт принимает на входе файл сообщения, указанный в опции –f, например arpwatch.pl –f Queue/328152.msg
Обратите внимание, рабочая директория почтового сервера указывается в скрипте, в моем случае это /var/CommuniGate/
Тамже необходимо поправить данные по доступу к БД.
$db_user = «username»;
$db_passwd = «userpassword»;
$db_name = «database»;
$db_host = «localhost»;
$db_port = «3306″;
$maildir = «/var/CommuniGate/»;

Скрипт обрабатывает файл и в зависимости от темы, добавляет запись в соответствующую таблицу базы. Поскольку arpwatch убирает лидирующие нули в MAC адресе, скрипт приводит МАС к читабельному формату.
Для проверки работоспособности можно отправить на указанный почтовый ящик сообщения с соответствующими темами и именем автора
От: Arpwatch < my_email@mydomain.ru>

Тема
new activity
Сообщение
hostname:
ip address: 192.168.10.37
ethernet address: 0:2:cf:7c:9f:c6
ethernet vendor: ZyGate Communications, Inc.
timestamp: Tuesday, March 25, 2008 17:20:18 +0300

Тема
new station
Сообщение
hostname:
ip address: 192.168.10.37
ethernet address: 0:2:cf:7c:9f:c6
ethernet vendor: ZyGate Communications, Inc.
timestamp: Tuesday, March 25, 2008 17:20:18 +0300

Тема
flip flop
Сообщение
hostname:
ip address: 192.168.10.1
ethernet address: 0:2:cf:7c:9f:c6
ethernet vendor: ZyGate Communications, Inc.
old ethernet address: 0:0:cd:27:e5:11
old ethernet vendor: Allied Telesyn Research Ltd.
timestamp: Tuesday, March 25, 2008 17:40:11 +0300
previous timestamp: Tuesday, March 25, 2008 17:40:11 +0300
delta: 0 seconds

Тема
changed ethernet address
Сообщение
hostname:
ip address: 192.168.10.1
ethernet address: 0:2:cf:7c:9f:c6
ethernet vendor: ZyGate Communications, Inc.
old ethernet address: 0:0:cd:27:e5:11
old ethernet vendor: Allied Telesyn Research Ltd.
timestamp: Tuesday, March 25, 2008 17:40:11 +0300
previous timestamp: Tuesday, March 25, 2008 17:40:11 +0300
delta: 0 seconds

Но и без этого будет понятно, работает система или нет по заполнению таблицы new_station.
Если чтото пошло не так, и необходимо очистить таблицы, то нужно остановить arpwatch
%/usr/local/etc/rc.d/arpwatch.sh stop
Если данные из таблицы new_station удалялись, то перед повторным запуском arpwatch, необходимо удалить файлы баз arpwatch
%rm –rf /usr/local/arpwatch/ arp*.dat
Если все работает нормально, считаем что с задачей сбора данных мы справились. Переходим к задаче отображения собранной информации.
Разобравшись со структурой таблиц, можно самому написать любой скрипт по отображению этой информации.

Я пошел по пути наименьшего сопротивления. В свое время, для одного из проектов, у меня был написан php скрипт по отображению информации о пользователях. Я просто отредактировал его под новые нужды.
Скрипт использует темплейты.
Основной темлейт mail.html, в нем содержится форма выбора таблицы для просмотра, порядка сортировки, количества отображаемых записей на страницу, поле поиска и кнопку «Загрузить в Exel».
Последняя кнопка позволяет выгрузить данные в файле MS Exel. Данные выгружаются в соответсвии с заданными параметрами таблицы, сортировки и поиска.
Два темплейта таблиц – new_station.html для таблиц new_station и new_activity и flip_flop.html для таблиц flip_flop и changed_ethernet_address.
Во втором темплейте не используются поля ethernet_vendor и old_ethernet_vendor.
В скрипте значения для них передаются. Если вам они нужны, то в темплейт нужно вставить соответсвующие столбцы со значениями {VENDOR} и {OLDVENDOR}

 

Категория: 
© 2009-2104 CTPAHHuK.RU