Найти всех…

Итак, имеем: дружественная фирма, даже две, с десятком инженеров-технарей, офисная подсеть класса C, куча всякого оборудования и отсутствие системного администратора. В довесок вопросы вроде:

– Слушай, а как определить у этой железки сетевой адрес (предъявляется железка в промышленном исполнении), не сбрасывая настройки? Кто настраивал не знаю, но когда-то у нас она работала, в какой подсети – тоже не знаю.
– Случаем не знаешь на каком адресе у нас стоит DVSR? Да, у нас такой есть, да, мы ставили, но никто не помнит.
– А какие у нас адреса не заняты с 64 по 80?
– (Звонок приходящего админа) У вас почтовый сервер утром полег потому что кто-то занял его IP. Судя по логам, у того компьютера был MAC xx:xx:xx:xx:xx:xx, не подскажешь что это было?

И ради этого мне мешают днем спать! Надо срочно найти решение, можно даже неэлегантное, но быстрое и эффективное.

Итак, приступим. Начнем с того, что админского доступа у меня нет ни к одному серверу, ни к роутеру. Но зато есть одна мощная выциганенная машинка, на которой обосновался Ubuntu Linux. Значит все будет жить на ней, а результат работы будет доступен на локальном веб-сервере.

Чтобы закрыть проблему с технической стороны, необходимо просто знать какие устройства появлялись в сети (MAC-адреса), какие IP они занимали, быть в курсе, если в сети появляется новое устройство с IP из офисных подсетей (10.0.0.0/24 и 62.85.xx.0/28 (DMZ+demo)).

Можно либо пассивно слушать сеть и собирать все MAC-адреса, либо для тех же целей применять активное сканирование и всю новую информацию писать в лог. Второй вариант показался мне более простым и интересным.

1) Установим arp-scan:

$ sudo apt-get install arp-scan

2) Напишем небольшой скриптик, который будет создавать 2 файла: список компьютеров, активных в сети сейчас, и список всех обнаруженных сочетаний MAC/IP за время работы скрипта (кумулятивный) и выкладывать их на внутренний веб. Дополнительно он будет оповещать системного администратора обо всех новых устройствах в сети, для отсылки почты воспользуемся утилитой sSMTP, описанной ранее.

#!/bin/bash
#
# quick and dirty scan for new devices
# create empty /var/www/list.txt before first run
#
arp-scan --interface eth0 62.85.xx.0/28 | grep ^62 > /tmp/x2
arp-scan --interface eth0 10.0.0.0/24 | grep ^10 > /tmp/x1
echo `date` > /var/www/current.txt
cat /tmp/x1 /tmp/x2 | sort | uniq >> /var/www/current.txt
#
# send email if completely new IP/MAC pair found
test `diff /var/www/current.txt /var/www/list.txt | grep '<' | wc -l` -gt 1 && \ (echo "Subject: New equipment found" > /tmp/report; diff /var/www/current.txt /var/www/list.txt | grep '<' >> /tmp/report;\
ssmtp rat@admin.lv < /tmp/report) || echo false > /dev/null
# mplayer /usr/share/sounds/war2/orcs/basic-orc-voices/annoyed7.wav
#
cat /var/www/list.txt /tmp/x1 /tmp/x2 | sort |uniq > /tmp/list.txt
mv /tmp/list.txt /var/www/list.txt

Получаем достаточно информативный список всех IP и всех MAC, которые когда-либо использовали эти IP, с указанием вендоров сетевых интерфейсов.

Так как arp-scan использует доступ очень низкого уровня, и он сам, и весь скрипт работают только с правами администратора.

3) Добавим скрипт в crontab (я выбрал ежечасную сработку):

$ sudo mv arpscan /etc/cron.hourly/
$ sudo chown root.root /etc/cron.hourly/arpscan
$ sudo chmod +x /etc/cron.hourly/arpscan

Все, теперь у нас на руках есть актуальная и автоматически (!) обновляемая информация об активных устройствах в сети (источник сканирования показан не будет):

Sat Dec 13 00:17:35 EET 2008
10.0.0.10 00:17:a4:0c:8f:xx Global Data Services
10.0.0.1 00:50:da:de:a7:xx 3COM CORPORATION
10.0.0.102 00:00:85:77:e9:xx CANON INC.
10.0.0.104 00:1b:78:24:19:xx Hewlett Packard
10.0.0.11 00:18:fe:33:59:xx Hewlett Packard

Вдобавок, в почтовом ящике есть лог когда в первый раз в сети засветился какой-нибудь интерфейс.

Кстати, такая статистика вполне пригодится и начинающим админам, которые пытаются фильтровать доступ в интернет и вести учет трафика только по IP-адресам машин, а ушлые юзвери втихаря меняют себе IP и творят что хотят. Теперь же такие “игры разума” будут задокументированы.

Пьем кофе дальше…

Share/Bookmark

2 Comments

ОлегJuly 23rd, 2015 at 14:12

Привет. Подскажи в чем проблема, пожалуйста. Выдает такое:

/etc/cron.hourly/arpscan: line 12: syntax error near unexpected token `echo’
/etc/cron.hourly/arpscan: line 12: `test `diff /var/www/current.txt /var/www/list.txt | grep ‘ /tmp/report; diff /var/www/current.txt /var/www/list.txt | grep ‘> /tmp/report;\’

ОлегJuly 24th, 2015 at 07:21

Заключил скобки в обратные кавычки, вроде отрабатывает. Но теперь arp-scan выдает пустой результат.

Leave a comment

Your comment