Довольно часто в сети которая использует для настройки протокол DHCP возникает проблема с появлением нелегальных 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 [ $? = 200 ]; then (echo "Subject: Найден DHCP в ${iface}"; echo "From: [email protected]"; echo "To: [email protected]"; echo "${RESULT}") | sendmail [email protected] [email protected] fi done
Сохраняем скрипт в формате .sh и добавляем в планировщик задач cron.
Алгоритм работы скрипта очень простой. Сначала мы считываем конфигурацию DHCP интерфейсов(интерфейсы на которых работает DHCP сервер), а далее для каждого интерфейса выполняем команду dhcdrop -q -t -i {имя интерфейса} -l f8:1a:67:14:7a:79
. Если программа завершается с кодом 200, что сигнализирует об присутствии нелегитимного DHCP сервера, отправляем email при помощи sendmail. Отправку почты не составит труда адаптировать под другой клиент. Нужно только поменять email адреса на реальные. Данный скрипт написан для FreeBSD и успешно используется на протяжении долгого времени.
Далее действуйте на ваше усмотрение, либо забейте весь пул адресов, либо просто отключите злоумышленника на оборудовании найдя его по МАС адресу.