Arpwatch и mysql
Arpwatch изначально умеет только слать уведомления о событиях в сети на почту и писать лог. А сеть у нас большая. Поэтому придется прибегнуть к средствам, которые помогут нам подружить arpwatch с базой данных. И прикрутим ко всему этому делу веб-интерфейс. Для удобства, красоты и наглядности :)
Этот пост я напишу по мотивам вот этой статьи. Только лично мне не очень понравилась идея со сторонним почтовым сервером. Не хотелось городить лишние огороды, когда в комплекте у нас есть великий и ужасный sendmail :)
Имеем:
FreeBSD 7.3-PRERELEASE
MTA sendmail
MySQL
Apache
Настройка arpwatch
Устанавливаем
1 | cd /usr/ports/net-mgmt/arpwatch/ && make install clean |
Заводим пользователя arpwatch. Он нам будет нужен для отправки почты.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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! |
Редактируем /etc/rc.conf
1 2 | arpwatch_enable="YES" arpwatch_flags="-i em0 -m arpwatch@localhost" |
Запускаем arpwatch
1 | sudo /usr/local/etc/rc.d/arpwatch start |
Проверяем
1 2 | ps ax | grep arpw 1071 con- S 0:14.40 /usr/local/sbin/arpwatch -i em0 -m arpwatch@localhost -f arp.em0.dat |
В логах увидим что то похожее в больших количествах:
1 | May 17 16:38:55 servak arpwatch: new station 10.20.0.164 0:e0:4c:a1:4:f9 |
Так же в больших количествах будет приходить почта примерно такого содержания:
1 2 3 4 5 6 7 8 9 10 11 | 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 |
Делаем вывод — arpwatch работает нормально :)
На время выполнения следующих манипуляций arpwatch лучше остановить. Но если не остановили сразу, то можно остановить потом и удалить из папки /usr/local/arpwatch файлики arp.dat и arp.dat-, чтобы при повторном запуске arpwatch наловил соответствий ip-mac по новой.
Настройка базы данных
1 2 3 4 5 6 7 8 | 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)); |
Скачиваем скриптик arpwatch.pl, распаковываем и кладем в /usr/local/arpwatch. Он нам нужен для раскладывания информации, содержащейся в письмах, по соответствующим таблицам базы. Открываем его на редактирование, в самом верху находим строчки
1 2 3 4 5 | $db_user = ""; $db_passwd = ""; $db_name = ""; $db_host = "localhost"; $db_port = "3306"; |
и подставляем соответствующие значения.
Для корректной работы скрипта нам понадобится установить модули
1 2 3 | 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 |
Настройка sendmail
Редактируем /etc/mail/aliases. Добавляем алиас для пользователя arpwatch и перенаправляем его почту в скрипт arpwatch.pl
1 | arpwatch: "| exec /usr/local/arpwatch/arpwatch.pl" |
Перестраиваем базу алиасов командой
1 | sudo sendmail -bi |
Настройка apache
Скачиваем веб-интерфейс отсюда или отсюда. Распаковываем архив в /usr/local/www. Меняем права доступа
1 | sudo chown -R www:www arpwatch/ |
Находим в папке файлик config.inc.php, открываем на редактирование и меняем соответствующие значения в строчках
1 2 3 4 | $dbhost = "localhost"; $dbuser = "username"; $dbpassword = "userpassword"; $dbname = "database"; |
В конфиг апача добавляем
1 2 3 4 5 6 7 | Alias /arp/ "/usr/local/www/arpwatch/" DirectoryIndex index.php AllowOverride None Order Deny,Allow Deny from all Allow from |
Говорим апачу перечитать конфиг
1 | sudo apachectl graceful |
Запускаем arpwatch
1 | sudo /usr/local/etc/rc.d/arpwatch start |
и идем по адресу 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, работает? :)