PostHeaderIcon 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/ смотреть как заполняется база :)

5 комментариев на “Arpwatch и mysql”

  • ttys says:

    >>и идем по адресу http://server/arp/ смотреть как заполняется база :)чёто нифига у меня не заполняецца

  • ExJ says:

    Куча 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-шек.

  • lycane says:

    Ну это не варнинги, а всего лишЬ нотисы :) Говорят нам о том, что не определены переменные. Возможно потому, что арпвотч толЬко начал работатЬ и эти переменные (которые определяются в момент смены полЬзователем связки ip — mac) еще не определилсЬ. Ну это так, предположение.

  • ExJ says:

    База уже под 1000 mac-ip, а оно все еще так и уведомляет :)
    Попробую сам чего-нибудь нарисовать

  • lycane says:

    А страничка, на которой фиксируется смена mac-ip, работает? :)

Оставить комментарий

PR-CY.ru