DHCP snooping

Материал из Xgu.ru

Перейти к: навигация, поиск
Автор: Наташа Самойленко

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

DHCP snooping регулирует только сообщения DHCP и не может повлиять напрямую на трафик пользователей или другие протоколы. Некоторые функции коммутаторов, не имеющие непосредственного отношения к DHCP, могут выполнять проверки на основании таблицы привязок DHCP snooping (DHCP snooping binding database). В их числе:

  • Dynamic ARP Protection (Inspection) — проверка ARP-пакетов, направленная на борьбу с ARP-spoofing,
  • IP Source Guard — выполняет проверку IP-адреса отправителя в IP-пакетах, предназначенная для борьбы с IP-spoofingом.


Содержание

[править] Введение

DHCP snooping позволяет:

  • защитить клиентов в сети от получения адреса от неавторизованного DHCP-сервера,
  • регулировать какие сообщения протокола DHCP отбрасывать, какие перенаправлять и на какие порты.

Для правильной работы DHCP snooping, необходимо указать какие порты коммутатора будут доверенными (trusted), а какие — нет (untrusted, в дальнейшем — ненадёжными):

  • Ненадёжные (Untrusted) — порты, к которым подключены клиенты. DHCP-ответы, приходящие с этих портов отбрасываются коммутатором. Для ненадёжных портов выполняется ряд проверок сообщений DHCP и создаётся база данных привязки DHCP (DHCP snooping binding database).
  • Доверенные (Trusted) — порты коммутатора, к которым подключен другой коммутатор или DHCP-сервер. DHCP-пакеты полученные с доверенных портов не отбрасываются.

[править] Принципы работы DHCP snooping

Пример топологии

По умолчанию коммутатор отбрасывает DHCP-пакет, который пришел на ненадёжный порт, если:

  • Приходит одно из сообщений, которые отправляет DHCP-сервер (DHCPOFFER, DHCPACK, DHCPNAK или DHCPLEASEQUERY);
  • Приходит сообщение DHCPRELEASE или DHCPDECLINE, в котором содержится MAC-адрес из базы данных привязки DHCP, но информация об интерфейсе в таблице не совпадает с интерфейсом, на котором был получен пакет;
  • В пришедшем DHCP-пакете не совпадают MAC-адрес указанный в DHCP-запросе и MAC-адрес отправителя;
  • Приходит DHCP-пакет, в котором есть опция 82.

[править] Пример топологии

Топология изображенная на рисунке не является рекомендацией, а служит демонстрацией того, какие порты коммутаторов указывать доверенными, а какие ненадёжными.

Настройки DHCP snooping на коммутаторах разных производителей выполняются для этой топологии (конфигурационные файлы коммутаторов в конце страницы).

Пояснения к рисунку:

  • На коммутаторах sw1 и sw2 включен DHCP snooping;
  • Порт 24 коммутатора sw1 и порт a1 коммутатора sw2 указаны доверенными, так как на ненадежных портах сообщения DHCP-сервера будут отбрасываться;
  • Порт 24 коммутатора sw1 и порт a1 коммутатора sw2 указаны доверенными, так как коммутатор, на котором включен DHCP snooping будет перенаправлять DHCP-запросы только на доверенные порты.

[править] Порядок настройки

  1. Настройка и проверка работы DHCP-сервера и DHCP-ретранслятора без включенного DHCP snooping.
  2. Включение DHCP snooping. После включения DHCP snooping на коммутаторе и в соответствующих VLAN, все порты коммутатора по умолчанию считаются ненадёжными.
  3. Указание доверенных портов. Те порты к которым подключены коммутаторы и которые ведут к DHCP-серверу (или порты к которым сервер подключен) должны быть настроены как доверенные.
  4. Настройка политики обработки опции 82.
  5. (Опционально) Включение или выключение дополнительных проверок DHCP-сообщений.

После того, как DHCP snooping включен на коммутаторе, по мере выдачи адресов клиентам, начинает заполняться база данных привязки DHCP.

В базе данных привязки DHCP хранятся (информация хранится только о ненадёжных портах):

  • MAC-адрес клиента
  • Арендованный IP-адрес клиента
  • Время аренды в секундах
  • Идентификатор VLAN
  • Идентификатор порта к которому присоединен клиент

[править] Использование опции 82

По умолчанию коммутатор на котором включен DHCP snooping, вставляет опцию 82 в DHCP-запросы. Коммутатор может изменять или вставлять опцию 82, даже если клиент и сервер находятся в одной подсети.

При вставке опции 82, коммутатор фактически вставляет два значения:

  • Remote ID (MAC-адрес или IP-адрес коммутатора). Это значение можно настраивать;
  • Circuit ID (порт с которого пришел запрос). Это значение не настраивается.

Icon-caution.gif

По умолчанию коммутатор, использующий DHCP snooping, обнаруживает и отбрасывает любой DHCP-запрос содержащий опцию 82, который он получил через ненадёжный порт.

Этот режим стоит оставить, если коммутатор соединен с конечными клиентами. Получение запроса с опцией 82 от клиента будет говорит об атаке, которую коммутатор должен предотвратить.

Но если функция DHCP snooping включена на нескольких коммутаторах, которые соединены последовательно, то такое поведение по умолчанию, приведет к тому, что клиенты не смогут получить адрес по DHCP (если сервер находится через несколько коммутаторов).

В приведенной схеме такая проблема возникнет:

  • Когда sw1 получает запрос от хоста, он проверяет его и, если все в порядке, отправляет дальше. Но при этом, в этот запрос вставляется опция 82
  • sw2, при получении запроса на ненадёжном интерфейсе, опять выполняет проверки и, увидев опцию 82 в запросе, отбрасывает его

Есть три способа решения этой проблемы:

  • Сделать порт a5 на коммутаторе sw2 доверенным
    • Хотя тогда запросы от хостов и не будут проверяться, чаще всего, это не страшно, так как, все запросы клиентов уже были проверены на sw1
  • Настроить варианты обработки опции 82 на sw2:
    • Сохранить опцию 82 в пришедшем пакете
    • Заменить опцию 82 в пришедшем пакете
  • Отключить вставку опции 82 на sw1 (может быть не на всем оборудовании)

[править] Настройка DHCP snooping на коммутаторах ProCurve

Включить DHCP snooping:

sw2(config)# dhcp-snooping

Включить DHCP snooping в VLAN, которые должны быть защищены с его помощью:

sw2(config)# dhcp-snooping vlan 25

[править] Настройка доверенных и ненадёжных портов

По умолчанию на коммутаторе все порты ненадёжные, поэтому доверенные порты надо явным образом указывать.

Указать доверенные порты:

sw2(config)# dhcp-snooping trust a1

[править] Настройка авторизованного DHCP-сервера

После того как порт указан как доверенный, сообщения от любого DHCP-сервера, который подключен к этому порту передаются. Для того чтобы указать IP-адреса конкретных DHCP-серверов, которым разрешено работать в сети, необходимо настроить список авторизованных DHCP-серверов.

Максимальное количество DHCP-серверов в списке — 20.

(Опционально) Указать адрес авторизованного DHCP-сервера, доступного через доверенный порт:

sw2(config)# dhcp-snooping authorized-server 192.168.25.254

После указания авторизованных серверов коммутатор не будет отбрасывать сообщения DHCP-сервера, если выполняются оба условия:

  • сообщение пришло на доверенный порт,
  • адрес сервера указан с списке авторизованных DHCP-серверов.

[править] Проверка соответствия MAC-адресов

По умолчанию, после включения DHCP snooping, на коммутаторе включена проверка соответствия MAC-адресов. Коммутатор проверяет соответствие MAC-адреса в DHCP-запросе MAC-адресу клиента. Если они не соответствуют, то коммутатор отбрасывает пакет.

При необходимости можно отключить эту проверку:

switch(config)# no dhcp-snooping verify mac

[править] Настройка опции 82

С опцией 82 связаны две настройки:

  • Настройка значения remote ID;
  • Настройка политики обработки пакетов с опцией 82.

Настройка remote ID:

sw2(config)# dhcp-snooping option 82 remote-id [mac | subnet-ip | mgmt-ip]

Значения remote ID:

  • mac — MAC-адрес коммутатора (значение по умолчанию);
  • subnet-ip — IP-адрес VLAN, который получил DHCP-запрос;
  • mgmt-ip — IP-адрес коммутатора.

Настройка политики обработки пакетов с опцией 82:

sw2(config)# dhcp-snooping option 82 untrusted-policy [drop | keep | replace]

Значения политики:

  • drop — отбросить пакет;
  • keep — коммутатор отправляет пакет с сохранением значения опции 82;
  • replace — коммутатор отправляет пакет, но заменяет значение опции 82.

Отключить вставку опции 82:

switch(config)# no dhcp-snooping option 82 

[править] Просмотр настроек и проверка работы DHCP snooping

Просмотр настроек DHCP snooping:

sw2(config)# show dhcp-snooping

 DHCP Snooping Information

  DHCP Snooping              : Yes
  Enabled Vlans              : 1 10 25 30
  Verify MAC                 : Yes
  Option 82 untrusted policy : replace
  Option 82 Insertion        : Yes
  Option 82 remote-id        : mac

  Store lease database : Not configured

  Authorized Servers
  ------------------
  192.168.25.254


  Port  Trust
  ----- -----
  A1    Yes  
  A2    No   
  A3    No   
  A4    No   
  A5    No   
.......

Просмотр статистики DHCP snooping:

sw2(config)# show dhcp-snooping stats

 Packet type  Action   Reason                        Count
 -----------  -------  ----------------------------  ---------
 server       forward  from trusted port              15
 client       forward  to trusted port                9
 server       drop     received on untrusted port     3
 server       drop     unauthorized server            0
 client       drop     destination on untrusted port  0
 client       drop     untrusted option 82 field      13
 client       drop     bad DHCP release request       0
 client       drop     failed verify MAC check        0

Просмотр базы данных привязки DHCP для коммутатора sw2:

sw2(config)# show dhcp-snooping binding

  MacAddress    IP              VLAN Interface Time Left
  ------------- --------------- ---- --------- ---------
  00163e-000101 192.168.10.10   10   A5        562      
  00163e-000103 192.168.30.10   30   A5        569      

Просмотр базы данных привязки DHCP для коммутатора sw1:

sw1(config)# show dhcp-snooping binding 

  MacAddress    IP              VLAN Interface Time Left
  ------------- --------------- ---- --------- ---------
  00163e-000101 192.168.10.10   10   1         525      
  00163e-000103 192.168.30.10   30   7         532      

[править] DHCP snooping и DHCP-ретранслятор

Настройки опции 82 с DHCP snooping перекрывают любые глобальные настройки указанные при настройке коммутатора для работы DHCP-ретранслятором.

Описание процедуры настройки коммутаторов ProCurve для работы DHCP-ретранслятором можно прочитать на странице Опция 82 DHCP.

Если DHCP snooping не настроен в VLAN, то для него применяются глобальные настройки.

[править] Поиск неисправностей

Включение debug:

sw2# debug dhcp-snooping [agent | event | packet]

В прошивках старше K.15

sw2# debug security dhcp-snooping [agent | event | packet]


Если необходимо вывести сообщения отладки в текущую сессию:

sw2# debug destination session

Если необходимо отправлять сообщения на log-сервер (log-сервер должен быть настроен командой logging <IP-адрес>):

sw2# debug destination logging

[править] Настройка DHCP snooping на коммутаторах Cisco

Включить DHCP snooping:

sw2(config)# ip dhcp snooping

Включить DHCP snooping в VLAN, которые должны быть защищены с его помощью:

sw2(config)# ip dhcp snooping vlan 10

Note-icon.gif

После включения DHCP snooping в VLAN, коммутатор перестает отправлять DHCP-сообщения от клиента на все порты VLAN. Сообщения по-прежнему отправляются на широковещательный адрес, но теперь коммутатор будет передавать их только на доверенные порты, так как только на них может находиться DHCP-сервер.

[править] Настройка доверенных и ненадёжных портов

По умолчанию на коммутаторе все порты ненадёжные, поэтому доверенные порты надо явным образом указывать.

Указать доверенные порты:

sw2(config)# interface fa 0/1
sw2(config-if)# ip dhcp snooping trust

(Опционально) Указать адрес авторизованного DHCP-сервера, доступного через доверенный порт:

sw2(config)#ip dhcp-server 10.84.168.253

По умолчанию, после включения DHCP snooping, на коммутаторе включена проверка соответствия MAC-адресов. Коммутатор проверяет соответствие MAC-адреса в DHCP-запросе MAC-адресу клиента. Если они не соответствуют, то коммутатор отбрасывает пакет.

При необходимости можно отключить эту проверку:

switch(config)# no ip dhcp snooping verify mac-address

[править] Добавление статических записей в базу данных привязки DHCP

Добавление статической записи в базу данных привязки DHCP:

sw2#ip dhcp snooping binding <mac-address> vlan <vid> <ip-address> interface <interface-id> expiry <seconds>

[править] Настройка опции 82

С опцией 82 связаны две настройки:

  • Настройка значения remote ID;
  • Настройка политики обработки пакетов с опцией 82.

Настройка remote ID (по умолчанию используется MAC-адрес коммутатора):

sw2(config)# ip dhcp snooping information option format remote-id [string ASCII-string | hostname] 

Настройка политики обработки пакетов с опцией 82. Коммутатор не будет отбрасывать пакеты, в которых есть опция 82:

sw2(config)# ip dhcp snooping information option allow-untrusted

Отключить вставку опции 82:

switch(config)# no ip dhcp snooping information option 

[править] Просмотр настроек и проверка работы DHCP snooping

Просмотр настроек DHCP snooping:

sw2# show ip dhcp snooping

Просмотр статистики DHCP snooping:

sw2# show ip dhcp snooping statistics

Просмотр базы данных привязки DHCP:

sw2# show ip dhcp snooping binding     

[править] Конфигурационные файлы

[править] DHCP-сервер

Конфигурационный файл DHCP-сервера:

ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;

subnet 192.168.25.0 netmask 255.255.255.0 {
  range 192.168.25.200 192.168.25.220;
  option routers 192.168.25.254;
}

subnet 192.168.10.0 netmask 255.255.255.0 {
  range 192.168.10.10 192.168.10.15;
  option routers 192.168.10.1;
}

subnet 192.168.30.0 netmask 255.255.255.0 {
  range 192.168.30.10 192.168.30.15;
  option routers 192.168.30.1;
}

[править] Коммутаторы ProCurve

Конфигурация sw1:

; J4906A Configuration Editor; Created on release #M.10.41

hostname "sw1"
vlan 1 
   name "DEFAULT_VLAN" 
   untagged 2-6,8-48 
   ip address dhcp-bootp 
   no untagged 1,7 
   exit 
vlan 10 
   name "VLAN10" 
   untagged 1 
   tagged 24 
   exit 
vlan 30 
   name "VLAN30" 
   untagged 7 
   tagged 24 
   exit 

# Включение DHCP snooping
dhcp-snooping

# Включение DHCP snooping в VLAN'ах 1, 10, 30
dhcp-snooping vlan 1 10 30 

# Настройка 24 порта доверенным
interface 24
   dhcp-snooping trust
   exit

Конфигурация sw2:

; J8697A Configuration Editor; Created on release #K.13.23

hostname "sw2"
module 1 type J8705A
interface A10
   disable   
exit
ip routing   
snmp-server community "public" Unrestricted
vlan 1
   name "DEFAULT_VLAN"
   untagged A2-A24
   ip address dhcp-bootp
   no untagged A1
   exit
vlan 10
   name "VLAN10"

# По умолчанию на коммутаторе включен DHCP-ретранслятор.
# ip helper-address указывает куда перенаправлять DHCP-запросы. 
# 192.168.25.254 — адрес DHCP-сервера.
# Теперь все DHCP-запросы полученные в этом VLAN будут перенаправлены на адрес 192.168.25.254.
   ip helper-address 192.168.25.254 
   ip address 192.168.10.1 255.255.255.0 
   tagged A5 
   exit 
vlan 30 
   name "VLAN30" 

# ip helper-address указывает куда перенаправлять DHCP-запросы. 
   ip helper-address 192.168.25.254 
   ip address 192.168.30.1 255.255.255.0 
   tagged A5 
   exit 
vlan 25 
   name "VLAN25" 
   untagged A1 
   ip address 192.168.25.1 255.255.255.0 
   exit 

# Включение DHCP snooping
dhcp-snooping

# Задание адреса авторизованного DHCP-сервера
dhcp-snooping authorized-server 192.168.25.254

# Настройка политики обработки опции 82. 
# Так как на коммутаторе sw1 включен DHCP snooping, 
# то на коммутатор sw2 DHCP-запросы приходят с опцией 82. 
# По умолчанию коммутатор такие пакеты отбрасывает. 
# Эта политика указывает, что опцию 82 в пришедших пакетах надо заменить.
dhcp-snooping option 82 untrusted-policy replace

# Включение DHCP snooping в VLAN'ах 1, 10, 25, 30
dhcp-snooping vlan 1 10 25 30 

# Настройка порта a1 доверенным
interface A1
   dhcp-snooping trust
   exit

[править] Дополнительная информация

[править] Материалы по DHCP на Xgu.ru