Arpwatch – мониторинг соответствие между IP и MAC-адресами
Рано или поздно, любой сетевой администратор сталкивается с необходимостью контролировать смену/появление новых MAC-адресов в сети. Если сеть совсем маленькая – это не сложно, если же сеть на сотни устройств – контролировать подключение устройств к сети становится довольно проблематично. С помощью утилиты ARPWatch можно отслеживать изменения в сети. ARPWatch отслеживает соответствие Ethernet-адресов и IP-адресов. Активность регистрируется в syslog и с помощью почтовых оповещений. Для прослушивания ARP-трафика на локальном ethernet-интерфейсе используется библиотека pcap.
Назначение ARPWatch
- отслеживать появление в сети новых устройств
- отслеживать подмену IP-адресов
- обнаруживать атаки ARP-вирусов
Принцип работы
- ARPWatch запускается на Unix-сервере и работает в фоновом режиме как демон
- ARPWatch слушает на указанном сетевом интерфейсе все широковещательные ARP-уведомления вида “я, устройство с MAC-адресом 11-22-33-44-55-66, имею IP-адрес 77.88.99.111”
- Информация сохраняется во внутренней базе
- При появлении новых устройств или изменении существующих связок MAC-IP отправляется уведомление по электронной почте
Недостатки
- Каждое уведомление отправляется отдельным сообщением.
- Такая отчётность занимает много места, и самое главное – абсолютно лишена наглядности.
- В большой сети не всегда возможно подключить сервер с ARPWatch в каждый сегмент.
Режимы Веб-интерфейса
- Показ сообщений с группировкой по MAC или IP
- Фильтрация за последний день и час
- Показ всех сообщений для выбранного MAC или IP
- Статистика по количеству сообщений для MAC и IP
Устанавливаем arpwatch
Из порта:
cd /usr/ports/net-mgmt/arpwatch && make install clean
Пакетом:
pkg_add -r arpwatch
после чего правим rc.conf для запуска arpwatch при загрузке системы:
vi /etc/rc.conf arpwatch_enable="YES" #включаем arpwatch arpwatch_interfaces="nfe0" #какие интерфейсы слушать #arpwatch_interfaces="" #слушать все интерфейсы #arpwatch_nfe0_options="-m admin@mydomain.ru" #отправлять лог себе на мыло
Ведение логов
для ведения логов лучше настроить для этого syslog.conf:
vi /etc/syslog.conf !arpwatch *.notice /var/log/arpwatch.log
Мониторинг
Таблица соответствия адресов находится в файле /usr/local/arpwatch/arp.<интерфейс>.dat и выглядит как обычный текстовый файл, с MAC-адресом, IP-адресом, временем попадения в таблицу, и именем интерфейса, через который пришёл исходный запрос.
cat /usr/local/arpwatch/arp.nfe0.dat 0:f:ea:63:e2:d7 192.168.1.31 1265370078 oksen 0:1:29:1b:35:7e 192.168.1.18 1265369952 narman 0:2:b3:b2:26:e4 192.168.1.254 1265370062 ns 0:1d:7d:a6:77:64 192.168.1.67 1265368627 r423-1 0:1d:7d:a6:70:80 192.168.1.84 1265370079 lib5 0:1d:7d:70:6f:28 192.168.1.43 1265370029 tender 0:1d:7d:a6:70:35 192.168.1.82 1265370064 lib3 0:c:76:97:51:e5 192.168.1.48 1265368690 jurist 0:b:6a:6d:fd:81 192.168.1.83 1265370048 lib4 0:e0:4d:2a:cd:68 192.168.1.35 1265369127 matbuh2 0:1d:7d:a6:6a:4b 192.168.1.86 1265370064 lib7 0:1a:4d:dc:db:46 192.168.1.65 1265370078 r421a 0:e:a6:27:5a:59 192.168.1.156 1265370034 lib2-ab1 0:2:44:5a:a4:3d 192.168.1.45 1265369568 ois3 0:f:ea:4f:20:89 192.168.1.24 1265370015 glbuh 0:1a:4d:fb:e:a4 192.168.1.152 1265370059 lib2-4z 0:2:b3:b8:8a:36 192.168.1.38 1265370059 serv3
arpwatch формирует события следующих типов:
Важные:
- new activity – Это Ethernet/IP был использован впервые за 6 месяцев.
- new station – Это Ethernet/IP был использована впервые
- flip flop – Замена адреса с одного на другой (оба были в списке).
- changed ethernet address – Замена на новый MAC адрес Ethernet.
Дополнительные:
- ethernet broadcast – MAC-адрес хоста является широковещательным.
- ip broadcast – IP-адрес хоста является широковещательным.
- bogon – Адрес отправителя IP-пакета не входит в непосредственно подключённую
сеть (directly connected network) для заданного интерфейса. - ethernet broadcast – MAC-адрес отправителя состоит из одних нулей или одних
единиц. - ethernet mismatch – MAC-адрес отправителя пакета не соответствует MAC-адресу,
указанному внутри ARP-запроса. - reused old ethernet address – Ethernet-адрес изменился с известного адреса на
адрес, который был замечен ранее, но не только
что. (Похоже на flip flop, но чуть-чуть другое.) - suppressed DECnet flip flop – Сообщение “flip flop” подавлено в связи с тем,
что как минимум один из двух адресов является адресом DECnet.
если есть необходимость вести журнал всех событий (не только важных), то меняем (*.notice) на (*.*) в syslog.conf
после чего перезагружаем syslog
killall -HUP syslogd
выглядеть это будет примерно так:
cat /var/log/arpwatch.log
Feb 5 09:27:20 bsd-9 arpwatch: new station 192.168.1.169 0:13:8f:27:2f:6f Feb 5 09:30:39 bsd-9 arpwatch: new station 192.168.1.29 0:13:8f:24:a3:a Feb 5 09:35:39 bsd-9 arpwatch: new station 192.168.1.28 0:2:44:5a:69:65 Feb 5 09:53:28 bsd-9 arpwatch: new station 192.168.1.33 0:2:44:5a:69:6b Feb 5 09:55:40 bsd-9 arpwatch: new station 192.168.1.8 0:1d:7d:a6:6a:73 Feb 5 10:17:35 bsd-9 arpwatch: new station 192.168.1.249 0:13:46:65:81:f5 Feb 5 10:17:36 bsd-9 arpwatch: changed ethernet address 192.168.1.249 0:11:95:b8:96:42 (0:13:46:65:81:f5) Feb 5 10:41:15 bsd-9 arpwatch: new station 192.168.1.146 0:f:ea:63:f8:40 Feb 5 10:49:11 bsd-9 arpwatch: new station 192.168.1.164 0:19:5b:2f:99:b1 Feb 5 10:52:11 bsd-9 arpwatch: new station 192.168.1.124 0:f:ea:63:f8:32 Feb 5 11:00:57 bsd-9 arpwatch: new station 192.168.1.170 0:f:ea:4f:65:d7
по желанию можно настроить ротацию:
vi /etc/newsyslog.conf /var/log/arpwatch.log 644 3 100 * JC
Перенесена с www.ignix.ru
http://muff.kiev.ua/content/arpwatch-sledim-za-novymi-ustroistvami-v-seti
Web-interface №2
Первым делом необходимо создать базу данных, куда будем записывать данные, полученные от 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 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 ) );
Скачиваем скрипт arpwatch.pl в каталог /usr/local/arpwatch и распакуем его из архива:
# cd /usr/local/arpwatch # fetch http://muff.kiev.ua/files/arpwatch.pl.tar.gz arpwatch.pl.tar.gz 100% of 1210 B 9 MBps # tar -xzf arpwatch.pl.tar.gz
Этот скрипт будет парсить информацию, получаемую от ARPWatch и раскладывать ее по таблицам базы данных. Для того, чтобы скрипт мог “достучаться” до базы данных, необходимо изменить в нем параметры коннекта к базе данных. Редактируем файл и выставляем переменные в необходимые значения:
$db_user = "arpwatch"; $db_passwd = "VerySecretPassword"; $db_name = "arpwatch"; $db_host = "localhost"; $db_port = "3306";
Для корректной работы скрипта необходима поддержка таких модулей Perl, как DBI, DBD-mysql и Getopt-Long. Если какой-то из модулей не установлен, его необходимо установить. Желательно из системы портов:
# cd /usr/ports/databases/p5-DBI && make install clean && rehash # cd /usr/ports/databases/p5-DBD-mysql && make install clean && rehash # cd /usr/ports/devel/p5-Getopt-Long && make install clean && rehash
Для того, чобы скрипт “скармливал” данные в БД, необходимо в него перенаправить уведомления электронной почты ARPWatch. В моем случае на роутере работает Sendmail в дефолтной конфигурации. Выполним его настройку так, чтобы письма отправленные пользователю arpwatch перенаправлялись в скрипт arpwatch.pl.
Создадим пользователя arpwatch, которому и будем доставлять почту (я использовал uid 1005 – проверьте у себя какой uid можно использовать):
# pw useradd -n arpwatch -u 1005 -g mailnull -c ARPWatch -d /nonexistent -s /usr/sbin/nologin
Отредактируем опции запуска ARPWatch в /etc/rc.conf, а именно – получателем уведомлений сделаем локального пользователя arpwatch:
# cat /etc/rc.conf | grep arpwatch_flags arpwatch_flags="-m arpwatch@localhost"
Создаем почтовый алиас для пользователя arpwatch с перенаправлением его почты в скрипт arpwatch.pl:
# echo 'arpwatch: "|/usr/bin/perl /usr/local/arpwatch/arpwatch.pl"' >> /etc/mail/aliases
Чтобы изменения, добавленные в /etc/mail/aliases вступили в силу, необходимо отправить Sendmail-у команду на перечитывание алиасов:
# sendmail -bi /etc/mail/aliases: 29 aliases, longest 40 bytes, 344 bytes total
Запускаем ARPWatch и проверяем, заполняются ли таблицы базы данных. Если заполняются – значит все в норме. Если же нет – смотрите /var/log/maillog и диагностируйте ошибку.
Приступим к настройке веб-интерфейса. Перейдем в каталог /usr/local/www и загрузим туда архив веб-интерфейса:
# cd /usr/local/www # fetch http://muff.kiev.ua/files/arpwatch-www.tar.gz arpwatch-www.tar.gz 100% of 51 kB 52 MBps # tar -xzf arpwatch-www.tar.gz # chown -R www:www /usr/local/www/arpwatch # rm arpwatch-www.tar.gz
Необходимо указать параметры доступа к базе данных в файле /usr/local/www/arpwatch/config.inc.php. Редактируем следующие поля:
$dbhost = "localhost"; //Сервер базы данных $dbuser = "arpwatch"; //Имя пользователя БД $dbpassword = "VerySecretPassword"; //Пароль в БД $dbname = "arpwatch"; //Имя БД
Добавим такой блок в 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>
Отправим Apache команду на перечитывание конфигурации:
# apachectl graceful
В браузере вводим ссылку http://ip_servera/arp/ и видим следующий интерфейс: