Как-то мысль пришла в голову о том, что хорошо бы иметь свою систему мониторинга для Cisco, с помощью которой иметь однозначное понятие в каком кабинете подключен тот или иной компьютер к сети. Причем делать это автоматически и, желательно, с WEB-интерфейсом. Радует то, что на наше счастье существует такая вещь, как SNMP – Simple Network Management Protocol. Устройства Cisco его поддерживают весьма неплохо. Учитывая, что в примере мы будем собирать MAC-адреса, нам потребуется библиотека BRIDGE-MIB, которую (как и другие) можно скачать с http://www.cisco.com/public/sw-center/netmgmt/cmtk/mibs.shtml, указав конкретную модель своего устройства.
Что мы имеем? Коммутатор с L3 (Cisco Catalyst 3560G), получаем все MAC-адреса, которые записаны в коммутаторе:
# show mac-address-table
Те, что с VLAN: All – это внутренние адреса портов. А вот Vlan: 1 – собственно осевшие МАКи. Обращаем внимание на тип: Dynamic и номер порта (Gi0/N). Это нам пригодится.
Далее, я завел виртуальную машину с Apache+PHP, в котором раскомментировал модуль snmp (для Apache2 устанавливается php5-extensions и выбирается модуль snmp).
Пишем скрипт на PHP.
Создаем вот такой скрипт:
Немного поясню его:
Завуалировал я свой IP и имя community.
Функция snmpwalk принимает параметры IP адрес коммутатора, имя комьюнити (см. ниже), и путь OID. Этот путь со сложным сочетанием цифр и точек можно получать из документации к Cisco MIB-файлов, т.е. описание “ветвей дерева”, где можно читать тот или иной параметр.
По пути 1.3.6.1.2.1.17.1.1 у нас лежит массив mac-адресов, а по пути 1.3.6.1.2.1.17.1.2 – соответствующие имена портов.
Обрезаю все лишнее из вывода через substr (так как выводятся тестом Hex STRING: и INTEGER типы данных);
Вывожу попарно вот таком виде:
Нетрудно понять, что если на порту несколько MAC-ов, то либо там находится какой-то коммутатор, либо подключались другие компьютеры за короткий промежуток времени, либо порт магистральный.
Поэтому лучше сразу пометить все магистральные порты и их не выводить, либо выводить с пометкой.
Настраиваем SNMP Community.
Входим в Cisco устройство:
# conf t
(config)# snmp-server community foo RO
Вместо foo можно указать любое имя для комьюнити, а RO – это ReadOnly, так как с помощью SNMP можно не только читать параметры, но и записывать их. Но нам пока это не нужно.
Теперь то, как я вижу развитие этого проекта:
- С определенным интервалом (cron) опрашиваются все Cisco коммутаторы и информация заносится в базу данных.
- В базе хранится информация о магистральных портах, о том, какой порт в какой кабинет ведет (по патч-панели проследить, это Const), какой компьютер какой MAC имеет (опрос ARP);
- Веб-интерфейсом рисуется карта (план здания) по этажам и у каждого кабинета подписываются включенные компьютеры;
- Генерировать репорты в случае:
- если MAC адрес обнаруживается на другом порту (не магистральном) – переноска на новое место;
- если обнаруживается новый MAC – несанкционированное подключение;
- если на одном порту появляется несколько MAC-ов – подключение разветвителя в виде свитча или хаба;
При желании эту тему можно развивать. Кто что думает, полезная вещь?
Друзья! Вступайте в нашу группу Вконтакте, чтобы не пропустить новые статьи! Хотите сказать спасибо? Ставьте Like, делайте репост! Это лучшая награда для меня от вас! Так я узнаю о том, что статьи подобного рода вам интересны и пишу чаще и с большим энтузиазмом!
Также, подписывайтесь на наш канал в YouTube! Видео выкладываются весьма регулярно и будет здорово увидеть что-то одним из первых!
> Кто что думает, полезная вещь?
Полезная, полезная.
> Simple Network Management Protocol. Устройства Cisco его поддерживают весьма неплохо.
Предлагаю указать конкретный стандарт, чтобы смотреть его в ТТХ при выборе свитча. В данном случае, емнип, это библиотека BRIDGE-MIB.
> Завуалировал я … community.
Неужели v1 в продакшене?
> Теперь то, как я вижу развитие этого проекта
У меня самой востребованной (мной)) фичей оказался поиск мака в сети. Помогает а) найти комп в сети и б) узнать, к какому порту какого свитча подключена розетка, в которую я воткнул ноут. Писал то ли на баше, то ли на питоне.
ЗЫ Админ, верни анона. А у регистрантов ещё и чудовищная понэль появляется, вкупе с шапкой сайта и панелями браузера они занимают аккурат полэкрана.
Спасибо, дополнил статью о BRIDGE-MIB. В SNMP+Cisco я только осваиваюсь, поэтому буду рад услышать некоторые комментарии о возможном применении.
Насчет v1 – я так понимаю, с безопасностью не очень хорошо. Чем будет отличаться работа с v2/3 от v1?
Насчет поиска компьютера в сети – примерно такую цель я и преследовал.
MAC-адрес в сети найдется в нескольких экземплярах, нужно будет только исключить магистральные порты из списка и тогда получим единственный порт. А зная куда он ведет – патч-панель – однозначно локализовать компьютер в сети.
Насчет анонов – подумаю. Надоедает разгребать спам-комментарии разных китайцев. Тем паче, комменты я сделал dofollow. Насчет панели – в ближайшее время попробую что-нибудь придумать.
Мне кажется, snmp v1, v2 можно использовать. Один из вариантов добавить везде на усройствах некий влан для управления. а доступ в этот влан сделать только для машин админа.
> Насчет v1 — я так понимаю, с безопасностью не очень хорошо. Чем будет отличаться работа с v2/3 от v1?
Шифрование в первую очередь, в v1 тупо plaintext.
> MAC-адрес в сети найдется в нескольких экземплярах, нужно будет только исключить магистральные порты из списка
В идеале да. У меня обстановка такая, что редкий комп включается в управляемый свитч, и на каждом порту масса маков. Access от trunk отличается глазуально по номеру — магистрали обычно 1 (традиционно), 25-26, 49-50 (gigabit/GBIC/SFP-порты). Но вообще классно было бы.
Ещё, кстати
>если на одном порту появляется несколько MAC-ов — подключение разветвителя в виде свитча или хаба
Есть вариант разрешить один мак на одном порту, попутно тем самым защитив себя от пары занятных атак. Но тогда не узнаешь, что у тебя есть потенциально опасный пользователь
ЗЫ Понэль таки отключилась галочкой в профиле.
plaintext передается имя community? Больше ж там ничег нет. Если оно RO, какие потенциальные проблемы могут быть ещё?
Магистрали у меня у самого обычно как раз SFP-порты (оптика, + не везде, но есть медь (резерв)), там уже да, 1-ый порт.
Насчет разрешить мак на порту – это PortSecurity? В принципе да, хорошая функция. А потенциально опасных надо ловить на ханипоты ))
> Если оно RO, какие потенциальные проблемы могут быть ещё?
Хозяин барин, но я бы побоялся всю инфу по своей сети дяде сливать. Кстати, в description у меня физическое положение свитча, что ещё добавляет пикантности
> Насчет разрешить мак на порту — это PortSecurity?
Да, на xgu есть хорошая статья по безопасности на link layer, мне особенно понравилась идея превратить свитч в хаб
Все красиво, но я воспользовался в таком варианте observium, показывает и что подключено и ip подключенного устройства к порту. в description я написал ip, а в программе указал кабинет и этаж.
Да, масса есть готовых решений. Мне было интересно сделать всё максимально на “низком уровне”, + практиковать своё PHP
Я соглашусь, что когда есть время то очень важно повысить навыки и по практиковать своё PHP, но к сожалению когда тебя в жатые сроки просят развернуть сеть и настроить ее мониторинг по сети, приходиться пользоваться готовыми решениями. В моем сучае это NAGIOS + NAGVIS + OBSERVIUM =)