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

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »



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
-------------------------------------------------------------------------------------------------

Коммутаторы SNR-S2995G/SNR-S3850G имеют возможность резервирования таблицы "ip dhcp snooping binding" , сохраняя ее на flash. Записи в таблице будут сохранены после перезагрузки коммутатора. Для этого был реализован функционал "dhcp snooping user-bind autosave". Параметр time указывает с какой периодичностью перезаписывать файл на flash.

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

Конфигурация 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";  
           }
}
  • No labels