Page tree
Skip to end of metadata
Go to start of metadata



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

С помощью DHCP Snooping коммутатор контролирует процесс получения DHCP-клиентом IP-адреса для предотвращения атак DHCP и появления нелегитимных DHCP-серверов в сети, устанавливая доверенные и недоверенные порты.

Сообщения из доверенных портов передаются коммутатором без проверки. Обычно, доверенные порты используются для подключения DHCP-сервера или DHCP Relay, а недоверенные - для подключения DHCP-клиентов. Коммутатор передает DHCP-запросы из недоверенных портов, но не передает из них DHCP-ответы. Кроме того, при получении DHCP-ответа из недоверенного порта, коммутатор может выполнить предварительно настроенное действие: shutdown или blackhole. Если включена функция DHCP Snooping Binding, то после каждого успешного получения IP-адреса через DHCP коммутатор создаст запись в таблице, которая свяжет полученный IP-адрес с MAC-адресом DHCP-клиента, номером его VLAN и порта. С помощью этой информации можно реализовать контроль доступа пользователей

DHCP Option 82  - это опция протокола DHCP, которая используется для информирования DHCP-сервера о том, от какого DHCP-ретранслятора и через какой его порт был получен запрос. Данная опция применяется для привязки IP-адреса к определенному порту коммутатора.

Конфигурация DHCP Snooping и Option 82

ip dhcp snooping enable
ip dhcp snooping binding enable
ip dhcp snooping information enable
ip dhcp snooping information option subscriber-id format hex
ip dhcp snooping vlan <>

Не забываем указать порт в сторону DHCP-сервера как Trust:

Interface Ethernet <uplink>
 ip dhcp snooping trust

Также дополнительно рекомендуется включить функционал user-control на портах подключения абонентов, и указать максимальное количество абонентов, подключенных к порту:

Interface Ethernet <customer>
 ip dhcp snooping binding user-control
 ip dhcp snooping binding user-control max-user 1

Если вы хотите получать информацию о заблокированных с помощью user-control хостах, то в режиме глобальной конфигурации введите команду:

ip dhcp snooping blocked record enable

Результат можно посмотреть в blocked-таблице с помощью команды:

show ip dhcp snooping blocked all

 или для конкретного порта: 

switch#sh ip dhcp snooping blocked int e1/0/10

Interface           Vlan ID      MAC                 IP address          Date                
-------------------------------------------------------------------------------------------------
Ethernet1/0/10      100          f0-de-f1-19-d5-eb   192.168.1.2         Sun Jan 01 00:38:56 2006
ip dhcp snooping blocked record count:1
-------------------------------------------------------------------------------------------------

Коммутаторы серий S2995G/S3850G имеют возможность резервирования базы "ip dhcp snooping binding", сохраняя ее на Flash-память. Записи в таблице будут восстановлены после перезагрузки коммутатора:

ip dhcp snooping user-bind autosave <filename.tbl>
ip dhcp snooping user-bind autosave time <1-48>

Параметр 'time' указывает, с какой периодичностью перезаписывать файл на Flash.

Конфигурация DHCP-сервера ISC DHCP

Рассмотрим детально пример минимальной конфигурации DHCP-сервера ISC DHCP.

Включаем вывод сообщений в Syslog, это упростит отладку в случае каких-либо проблем:

log-facility local7;
local-address 172.16.0.10;​

Проверяем наличие Option 82 в пакете:

if exists agent.remote-id {

Если пакет с Option 82, то пишем в Syslog информацию:

   log ( info, concat(

Информацию будем писать о коммутаторе и порту подключения, с которого пришел пакет:

     "Switch MAC: ", binary-to-ascii(16, 8, ":", option agent.remote-id),
    "Switch port: ", binary-to-ascii(10, 8, ".", option agent.circuit-id)
  ));
}    

Создаем класс для порта коммутатора:

class "sw01-p01" {
  match if

Берем последние 6 байт agent.remote-id, делим на 8-битные числа, каждые из которых преобразуем в 16-шестнадцатиричную систему счисления. Полученные числа объединяем между собой через «:» и проверяем соответствие полученного MAC-адреса коммутатора в agent.remote-id с необходимым:

  binary-to-ascii(
    16, 8, ":", suffix(option agent.remote-id ,6)
  )="f8:f0:82:75:cd:41" and

Аналогичным образом получаем порт коммутатора из agent.circuit-id и сверяем его:

binary-to-ascii(
    10, 8,"", suffix(option agent.circuit-id, 1)
) = "1";
}
subnet 172.16.0.0 netmask 255.255.255.0 {
  option routers 172.16.0.1;
  option subnet-mask 255.255.255.0;
  authoritative;

Выдаем IP-адрес согласно описанному выше классу:

   pool {
    range 172.16.0.121;
    allow members of "sw01-p01";  
           }
}