Как узнать адрес dhcp сервера

Немного теории

При запросе к DHCP серверу, сервер выдает определенный ip адрес и закрепляет его за MAC адресом клиента. Это значит, что клиенту с таким MAC адресом может быть выдан только такой ip адрес. IP адрес резервируется сервером для клиента на определенное время и если по истечению этого периода клиент не запросил продление, ip адрес может быть выдан другому пользователю. На каждом домашнем роутере настроен определенный пул адресов — количество IP адресов которое может сервер выдать, обычно это от нескольких десятков до 2х сотен адресов. После того как все адреса в пуле зарезервированы, DHCP сервер игнорирует запросы клиентов.

Чем плохи ложные DHCP сервера?

Плохи они тем, что когда у клиента вашего сервера закончится время аренды ip адреса, он запросит в аренду новый ip адрес сформировав DHCP запрос (DHCPDISCOVER) используя случайный исходящий MAC адрес. Таким образом если первый сервер который выдаст в аренду ip адрес будет не ваш, а одного из пользователей, то все кто получит от него адреса не смогут получить доступ к интернету.

Как обезопасить сеть от ложных DHCP серверов?

Есть несколько способов борьбы с ложными серверами, блокировка на оборудовании доступа или программное обеспечение. Очень редко L2 коммутаторы имеют функции блокировки DHCP ответов. В этом случае нам понадобится программа dhcdrop, которая поможет нам бороться с поддельными серверами.

Учитывая все выше написанное, при появлении в сети ложного DHCP сервера нам только нужно взять в аренду все его адреса, заняв весь его пул. Однако эта статья описывает то, каким образом нам находить эти сервера и получать автоматические уведомления на почту.

С полным списком функций программы вы можете ознакомится на официальном сайте проекта, а для текущей статьи нам понадобится всего несколько простых команд и небольшой скрипт(на сайте проекта можно загрузить приложение).

Исходя из документации мы имеем:

  • -q — тихий режим работы;
  • -t — режим теститрования;
  • -i — сетевой интерфейс;
  • -l — легальный сервер(указывать МАС адрес);

Режим тестирования нам нужен для того, чтоб программа не начинала автоматическое подавление сервера, нам это ни к чему, тихий режим, чтоб не сыпать в консоль сообщениями, так как у нас скрипт будет запускаться каждые 5 минут через планировщик задач.

Пример команды которую мы будем использовать:

dhcdrop -q -t -l f8:1a:67:14:7a:79 -i vlan10

Поскольку сеть в которой я работаю разбита на виртуальные подсети и каждый интерфейс подсети имеет имя vlanN, при помощи скрипта мы будем перебирать интерфейсы и для каждого запускать сканирование. Если же вам просто нужно просканировать на интерфейсе, просто пишете имя интерфейса(eth0,ix0 и т.п).

Сам скрипт выглядит следующим образом:

#!/bin/sh . /etc/rc.subr load_rc_config dhcpd LEGAL_DHCP=»f8:1a:67:14:7a:79″ for iface in ${dhcpd_ifaces}; do RESULT=$(/usr/local/sbin/dhcdrop -q -t -i ${iface} -l ${LEGAL_DHCP}) if ; then (echo «Subject: Найден DHCP в ${iface}»; echo «From: root@youserver.com»; echo «To: youemail@gmail.com»; echo «${RESULT}») | sendmail -froot@youserver.com youemail@gmail.com fi done

Сохраняем скрипт в формате .sh и добавляем в планировщик задач cron.

Алгоритм работы скрипта очень простой. Сначала мы считываем конфигурацию DHCP интерфейсов(интерфейсы на которых работает DHCP сервер), а далее для каждого интерфейса выполняем команду dhcdrop -q -t -i {имя интерфейса} -l f8:1a:67:14:7a:79. Если программа завершается с кодом 200, что сигнализирует об присутствии нелегитимного DHCP сервера, отправляем email при помощи sendmail. Отправку почты не составит труда адаптировать под другой клиент. Нужно только поменять email адреса на реальные. Данный скрипт написан для FreeBSD и успешно используется на протяжении долгого времени.

Далее действуйте на ваше усмотрение, либо забейте весь пул адресов, либо просто отключите злоумышленника на оборудовании найдя его по МАС адресу.

Маршрутизаторы Mikrotik позволяют вычислить чужой, «левый», сторонний DHCP-сервер который находится в вашей сети и тем самым мешает вашим устройствам получать правильные IP-адреса. Такая ситуация может возникнуть, когда клиент, например, подсоединил свой домашний роутер не через WAN порт, а через LAN-порты, а ваша сеть не ориентированна на изоляцию клиента (VLANs, EoIP/VPLS Tunnels, Horizon Bridging/Private VLAN Edge (PVE)). Для этого в RouterOS существует настройка /ip dhcp-server alert:

Добавляем правило, с отсылкой на выполнения скрипта script1:

interface — интерфейс, на котором искать не легитимные DHCP-сервера;
valid-server — список МАС-адресов ваших легитимных DHCP-серверов;
alert-timeout — таймаут обнаружения чужих DHCP-серверов. Если параметр не заполнить (сделать не активным) — скрипт выполнится один раз при обнаружении. Это важный параметр, заполнять его нужно исходя из DHCP Lease Time вашей сети. Если у вас Lease Time стоит 12 часов, то alert-timeout можно сделать 1−2 часа. Вероятность того, что чужой сервер раздаст между этими периодами адреса минимальна. Если Lease Time то и alert-timeout нужно уменьшить. Но, если вы будете при обнаружении «левого» DHCP отправлять e-mail, то сильно уменьшенное время в alert-timeout приведет к спаму на ваше «мыло» до того момента, пока «левый» сервер не пропадет.
unknown-server — список МАС-адресов обнаруженных неизвестных серверов DHCP. Сервер будет удален из этого списка после тайм-аута.
on-alert — сценарий для запуска, если неизвестный сервер DHCP обнаружен;
reset-alert — не выведен в интерфейс WinBox, доступен с командной строки. Команда /ip dhcp alert reset-alert очищает список всех найденных «левых» DHCP-серверов.

Если DHCP Alerts не может получить dhcp-пакет, он действует как dhcp-клиент и посылает пакеты DHCP Discover раз в минуту. В on-alert можно добавлять как сам скрипт, так и ссылку на него в виде названия скрипта в /system script.
Но наша задача при появлении «левого» DHCP-сервера отсылать уведомление на e-mail. Что-бы на «мыло» приходило не только оповещение, но и IP, интерфейс на котором найден и MAC-адрес чужого DHCP-сервера. Для этого скрипт нужно писать напрямую в окне on-alert, так как там мы будем использовать спец-переменные. Проблема в том, что оператором get данные с DHCP Alerts получить нельзя (проблема микротиковцам известна). Итак, напишем скрипт в on-alert:

В пункте Unknown Server видно MAC-адрес «левого» сервера. Alert Timeout стоит тестовые 10 секунд, обычно это значение у меня 1 час. Интерфейс может быть как реальный, так и бридж. Значение Valid Servers заполняем нашими легитимными DHCP-серверами, так как у меня он только один (мое текущее устройство), то заполняем MAC с нашего интерфейса.

Сам скрипт:

После появления в сети чужого DHCP-сервера раз в заданное время опроса скрипт будет выполнятся, в это время будут писаться записи в терминал и лог журнал:

Последняя запись в логе инициализированная скриптом. Ну и само письмо будет иметь такой вид:

Как видим в тему письма подтягиваются название роутера (идентификатор). А в тело — IP, интерфейс обнаружения и MAC-адрес чужого DHCP-сервера. Письма будут отсылаться через промежуток времени указанный в Alert Timeout, до того момента, пока DHCP-сервер не пропадет или вы его не найдете.

Используемые материалы: Upd рабочий скрипт:
——————————————

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *