Arpwatch и mysql
Arpwatch изначально умеет только слать уведомления о событиях в сети на почту и писать лог. А сеть у нас большая. Поэтому придется прибегнуть к средствам, которые помогут нам подружить arpwatch с базой данных. И прикрутим ко всему этому делу веб-интерфейс. Для удобства, красоты и наглядности :)
Этот пост я напишу по мотивам вот этой статьи. Только лично мне не очень понравилась идея со сторонним почтовым сервером. Не хотелось городить лишние огороды, когда в комплекте у нас есть великий и ужасный sendmail :)
Имеем:
FreeBSD 7.3-PRERELEASE
MTA sendmail
MySQL
Apache
Настройка arpwatch
Устанавливаем
[cc lang=»bash»]cd /usr/ports/net-mgmt/arpwatch/ && make install clean[/cc]
Заводим пользователя arpwatch. Он нам будет нужен для отправки почты.
[cc lang=»bash»]sudo adduser
Username: arpwatch
Full name: Arpwatch pseudo-user
Uid (Leave empty for default):
Login group [arpwatch]:
Login group is arpwatch. Invite arpwatch into other groups? []:
Login class [default]:
Shell (sh csh tcsh zsh bash rbash nologin) [sh]: nologin
Home directory [/home/arpwatch]: /nonexistant
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]: no
Lock out the account after creation? [no]:
Username : arpwatch
Password :
Full Name : Arpwatch pseudo-user
Uid : 1004
Class :
Groups : arpwatch
Home : /nonexistant
Home Mode :
Shell : /usr/sbin/nologin
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (arpwatch) to the user database.
Add another user? (yes/no): no
Goodbye![/cc]
Редактируем /etc/rc.conf
[cc lang=»bash»]arpwatch_enable=»YES»
arpwatch_flags=»-i em0 -m arpwatch@localhost»[/cc]
Запускаем arpwatch
[cc lang=»bash»] sudo /usr/local/etc/rc.d/arpwatch start[/cc]
Проверяем
[cc lang=»bash»]ps ax | grep arpw
1071 con- S 0:14.40 /usr/local/sbin/arpwatch -i em0 -m arpwatch@localhost -f arp.em0.dat[/cc]
В логах увидим что то похожее в больших количествах:
[cc lang=»bash»]May 17 16:38:55 servak arpwatch: new station 10.20.0.164 0:e0:4c:a1:4:f9[/cc]
Так же в больших количествах будет приходить почта примерно такого содержания:
[cc lang=»text»]From lycane@servak.local Mon May 17 16:39:15 2010
Date: Mon, 17 May 2010 16:39:15 +0300 (VOLT)
From: arpwatch@servak.local (Arpwatch)
To: lycane@servak.local
Subject: new station
hostname:
ip address: 10.20.0.164
ethernet address: 0:e0:4c:a1:4:f9
ethernet vendor:
timestamp: Monday, May 17, 2010 16:39:14 +0300[/cc]
Делаем вывод — arpwatch работает нормально :)
На время выполнения следующих манипуляций arpwatch лучше остановить. Но если не остановили сразу, то можно остановить потом и удалить из папки /usr/local/arpwatch файлики arp.dat и arp.dat-, чтобы при повторном запуске arpwatch наловил соответствий ip-mac по новой.
Настройка базы данных
[cc lang=»bash»]create user arpwatch;
create database arp;
grant all on arp.* to arpwatch@localhost identified by ‘password’;
use arp
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));[/cc]
Скачиваем скриптик arpwatch.pl, распаковываем и кладем в /usr/local/arpwatch. Он нам нужен для раскладывания информации, содержащейся в письмах, по соответствующим таблицам базы. Открываем его на редактирование, в самом верху находим строчки
[cc lang=»perl»]$db_user = «»;
$db_passwd = «»;
$db_name = «»;
$db_host = «localhost»;
$db_port = «3306»;[/cc]
и подставляем соответствующие значения.
Для корректной работы скрипта нам понадобится установить модули
[cc lang=»bash»]cd /usr/ports/databases/p5-DBI && make install clean
cd /usr/ports/databases/p5-DBD-mysql && make install clean
cd /usr/ports/devel/p5-Getopt-Long && make install clean[/cc]
Настройка sendmail
Редактируем /etc/mail/aliases. Добавляем алиас для пользователя arpwatch и перенаправляем его почту в скрипт arpwatch.pl
[cc lang=»bash»]arpwatch: «| exec /usr/local/arpwatch/arpwatch.pl»[/cc]
Перестраиваем базу алиасов командой
[cc lang=»bash»]sudo sendmail -bi[/cc]
Настройка apache
Скачиваем веб-интерфейс отсюда или отсюда. Распаковываем архив в /usr/local/www. Меняем права доступа
[cc lang=»bash»]sudo chown -R www:www arpwatch/[/cc]
Находим в папке файлик config.inc.php, открываем на редактирование и меняем соответствующие значения в строчках
[cc lang=»php»]$dbhost = «localhost»;
$dbuser = «username»;
$dbpassword = «userpassword»;
$dbname = «database»; [/cc]
В конфиг апача добавляем
[cc lang=»bash»]Alias /arp/ «/usr/local/www/arpwatch/»
DirectoryIndex index.php
AllowOverride None
Order Deny,Allow
Deny from all
Allow from
[/cc]
Говорим апачу перечитать конфиг
[cc lang=»bash»]sudo apachectl graceful[/cc]
Запускаем arpwatch
[cc lang=»bash»] sudo /usr/local/etc/rc.d/arpwatch start[/cc]
и идем по адресу http://server/arp/ смотреть как заполняется база :)
>>и идем по адресу http://server/arp/ смотреть как заполняется база :)чёто нифига у меня не заполняецца
Куча warning`ов, но работает. Спасибо!
Notice: Undefined variable: page_link in /usr/local/www/arp/index.php on line 83
Notice: Undefined index: old_ethernet_vendor in /usr/local/www/arp/index.php on line 154
Notice: Undefined index: old_ethernet_address in /usr/local/www/arp/index.php on line 162
Notice: Undefined index: old_ethernet_vendor in /usr/local/www/arp/index.php on line 163
Notice: Undefined index: previous_timestamp in /usr/local/www/arp/index.php on line 164
Notice: Undefined index: delta in /usr/local/www/arp/index.php on line 165
Notice: Undefined index: rows in /usr/local/www/arp/template.inc.php on line 210
Буду благодарен за помощь в «допиливании» php-шек.
Ну это не варнинги, а всего лишЬ нотисы :) Говорят нам о том, что не определены переменные. Возможно потому, что арпвотч толЬко начал работатЬ и эти переменные (которые определяются в момент смены полЬзователем связки ip — mac) еще не определилсЬ. Ну это так, предположение.
База уже под 1000 mac-ip, а оно все еще так и уведомляет :)
Попробую сам чего-нибудь нарисовать
А страничка, на которой фиксируется смена mac-ip, работает? :)