Настройка access-портов
В данной заметке описана настройка портов доступа коммутаторов CISCO, т.е. портов в которые подключены компьютеры пользователей, видеокамеры, принтеры и т.п. устройства.
Базовая настройка
Заходим в режим конфигурации и выбираем диапазон интерфейсов, например так:
sw-ds-bag-1(config)#interface range fastEthernet 0/1 - 24
Почти всегда по умолчанию порт находится в режиме dynamic auto, теоретически послав сообщение DTP пользователь (злоумышленник) может перевести порт в состояние
TRUNK, настроив со своей стороны интерфейс так же в транке, получит доступ ко всем VLAN.
Вот пример такой атаки: http://toastresearch.com/2012/02/13/vlan-abuse
Поэтому access-порт нужно перевезти в состояние access, либо включить режим nonegotiate , мне кажется первый вариант более логичный.
sw-ds-bag-1(config)# switchport mode access
Теперь указываем какому VLAN принадлежит этот порт:
sw-ds-bag-1(config)#switchport access vlan 120
Включаем функцию portfast, она позволяет пропустить состояния listening и learning (при использовании протоколов STP) и сразу же перейти в состояние forwarding. Т.е. порт поднимается значительно быстрее.
sw-ds-bag-1(config)#spanning-tree portfast
Так же Вы можете указать speed и duplex, тут все банально, пример приводить не буду.
Настройка port-security
Функция port-security направлена на предотвращение атак связанных с переполнением CAM-таблицы коммутатора, а так же несанкционированной смены mac-адреса.
Например коммутатор Catalyst 2960 может содержать 8192 MAC адресоа, переполнение CAM-таблицы приводит к тому, что он начинает работать как концентратор (HUB) в результате кадры рассылаются по всем портам. Злоумышленник сможет прослушать весь трафик.
Пример такой атаки можно посмотреть тут: http://www.youtube.com/watch?v=64MjOCXfMH8
Что бы этого избежать нужно задать ограничение количества mac-адресов на порту, для этого используется команда в режиме конфигурации интерфейса:
sw-ds-bag-1(config-if)switchport port-security maximum 2
По умолчанию время которое коммутатор помнит mac-адрес равно 5 минут, если вы ограничите количество адресов всего-лишь одним, то только через 5 минут коммутатор забудет старый адрес и будет работать с новым, поэтому в таких случаях рекомендуется уменьшить этот интервал например до двух минут:
sw-ds-bag-1(config-if)switchport port-security aging time 2
Так же следует указать причину удаления адресов
sw-ds-bag-1(config-if)switchport port-security aging type inactivity
При необходимости можно перечислить mac-адреса разрешенные на порту:
sw-ds-bag-1(config-if)#switchport port-security mac-address aaaa.bbbb.cccc
Теперь нужно настроить режим реагирования на нарушение безопасности, тут три варианта: shutdown (по умолчанию), protect и restrict
Если порт настроен режиме shutdown, то при сработке порт перейдет в состояние error-disabled. В случае если настроен режим protect, то порт
просто перестает принимать/передавать кадры, при режиме restrict коммутатор так же перестает форвардить кадры, но еще отправляет сообщение администратору.
sw-ds-bag-1(config-if)switchport port-security violation restrict
Посте того как все настроили включаем port-security командой:
sw-ds-bag-1(config-if)switchport port-security
Посмотреть список заблокированных портов можно командой:
sw-ds-bag-1#sh port-security
Secure Port MaxSecureAddr CurrentAddr SecurityViolation Security Action
(Count) (Count) (Count)
---------------------------------------------------------------------------
Fa0/1 2 1 0 Restrict
Fa0/2 2 0 0 Restrict
Fa0/3 2 0 0 Restrict
Fa0/4 2 0 0 Restrict
Fa0/5 2 0 0 Restrict
Fa0/6 2 0 0 Restrict
Fa0/7 2 0 0 Restrict
Fa0/8 2 1 0 Restrict
Fa0/9 2 0 0 Restrict
Fa0/10 2 1 0 Restrict
Fa0/11 2 1 0 Restrict
Fa0/13 2 0 0 Restrict
Fa0/15 2 0 0 Restrict
Fa0/16 2 3 25 Restrict
Fa0/17 2 0 0 Restrict
Fa0/18 2 0 0 Restrict
Fa0/19 2 0 0 Restrict
Fa0/20 2 0 0 Restrict
Fa0/21 2 1 0 Restrict
Fa0/22 2 1 0 Restrict
Fa0/23 2 0 0 Restrict
---------------------------------------------------------------------------
Total Addresses in System (excluding one mac per port) : 2
Max Addresses limit in System (excluding one mac per port) : 1024
Видно 25 сработок на 16-м порту из-за переполнения количества адресов.
Настройка BPDU Guard
Функция BPDU Guard позволяет перевести порт в состояние error-disabled при получении BPDU. Это нужно что-бы защитить протокол STP. Ведь злоумышленник может объявить себя root-ом для всех VLAN, что заставит перестроиться протокол STP и весь трафик будет терминироваться через него. Т.к. эта функция переводит порт в состояние error-disabled, то лучше включить recovery для нее. Что бы порт в последствии сам поднялся и нам не пришлось его включать руками:
sw-ds-bag-1(config)#errdisable recovery cause bpduguard
sw-ds-bag-1(config)#errdisable recovery interval 60
Теперь, когда эта фича сработает, мы увидим в логах (или SNMP-трапах), что порт упал по причине сработки bpduguard, через минуту он поднимется, а нам надо теперь смотреть что воткнуто в этот порт и принимать соответствующие меры.
BPDU Guard можно включит глобально, тогда она будет работать на портах настроенных как portfastast или же на каждом порту отдельно:
sw-ds-bag-1(config-if)spanning-tree bpduguard enable
если эта фишка сработает, то в логах увидим такое:
Oct 1 13:37:28 10.1.1.19 2627: 6w6d: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/13, changed state to up
Oct 1 13:37:28 10.1.1.19 2628: 6w6d: %SPANTREE-2-BLOCK_BPDUGUARD: Received BPDU on port FastEthernet0/13 with BPDU Guard enabled. Disabling port.
Oct 1 13:37:29 10.1.1.19 2629: 6w6d: %PM-4-ERR_DISABLE: bpduguard error detected on Fa0/13, putting Fa0/13 in err-disable state
Oct 1 13:37:29 10.1.1.19 2630: 6w6d: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/13, changed state to down
Oct 1 13:37:31 10.1.1.19 2631: 6w6d: %LINK-3-UPDOWN: Interface FastEthernet0/13, changed state to down
Так же имеется функция bpdufilter, но в отличии от bpduguard, она только блокирует сообщения BPDU, не переводя порт в состояние error-disabled, при этом режиме
траблшутинг немного затруднен, поэтому я предпочитаю использовать только bpduguard.
Отключаем CDP
Cisco Discovery Protocol - штука хорошая, полезная, но на access портах совершенно ненужная, т.к. злоумышленник может получить от нее много информации, о версии IOS например или IP адресах устройств, поэтому на портах доступа рекомендуется этот протокол отключать.
sw-ds-bag-1(config-if)#no cdp enable
Настройка DHCP snooping
DHCP snooping — функция коммутатора, предназначенная для защиты от атак с подменой DHCP-сервера или атаки DHCP starvation, которая заставляет DHCP-сервер выдать все существующие адреса злоумышленнику.
Включается сначала глобально
sw-ds-bag-1(config)#ip dhcp snooping
Затем для каждого VLAN отдельно:
sw-ds-bag-1(config)#ip dhcp snooping vlan 120
Теперь нужно выбрать порт (порты) через который мы будем пропускать DHCP ответы от сервера, т.е. не доверяем никому, кроме этих портов:
sw-ds-bag-1(config-if)#ip dhcp snooping trust
На некоторых коммутаторах после включения dhcp snooping пропадает возможность получать ip адрес через dhcp, хотя все настроено правильно, при этом в логе будет:
Oct 1 12:55:39 10.1.1.217 1002: 20:19:48: DHCP_SNOOPING: received new DHCP packet from input interface (FastEthernet0/1)
Oct 1 12:55:39 10.1.1.217 1003: 20:19:48: DHCP_SNOOPING: process new DHCP packet, message type: DHCPDISCOVER, input interface: Fa0/1, MAC da: ffff.ffff.ffff, MAC sa: 0003.471f.884b, IP da: 255.255.255.255, IP sa: 0.0.0.0, DHCP ciaddr: 0.0.0.0, DHCP yiaddr: 0.0.0.0, DHCP siaddr: 0.0.0.0, DHCP giaddr: 0.0.0.0, DHCP chaddr: 0003.471f.884b
Oct 1 12:55:40 10.1.1.217 1004: 20:19:48: DHCP_SNOOPING: add relay information option.
Oct 1 12:55:40 10.1.1.217 1005: 20:19:48: DHCP_SNOOPING_SW: Encoding opt82 CID in vlan-mod-port format
Oct 1 12:55:40 10.1.1.217 1006: 20:19:48: DHCP_SNOOPING_SW: Encoding opt82 RID in MAC address format
Oct 1 12:55:40 10.1.1.217 1007: 20:19:48: DHCP_SNOOPING: binary dump of relay info option, length: 20 data:
Oct 1 12:55:40 10.1.1.217 1008: 0x52 0x12 0x1 0x6 0x0 0x4 0x0 0x15 0x1 0x1 0x2 0x8 0x0 0x6 0x0 0x1C 0xF 0xE5 0xCB 0x80
Oct 1 12:55:40 10.1.1.217 1009: 20:19:48: DHCP_SNOOPING_SW: bridge packet get invalid mat entry: FFFF.FFFF.FFFF, packet is flooded to ingress VLAN: (120)
Oct 1 12:56:21 10.1.1.217 1011: 20:20:30: DHCPSNOOP(hlfm_set_if_input): Setting if_input to Fa0/1 for pak. Was not set
Oct 1 12:56:21 10.1.1.217 1012: 20:20:30: DHCPSNOOP(hlfm_set_if_input): Clearing if_input for pak. Was Fa0/1
Связано это с настройкой опции 82, что бы все заработало можно настроить DHCP опцию 82 или отключить ее:
sw-ds-bag-1(config)#no ip dhcp snooping information option
ACL на коммутаторах второго уровня
Мало кто знает, но оказывается на портах коммутатора так же можно применять access-листы, правда с ограничениями. Расширенный лист мне не удалось повесить
на интерфейс, но доведенный почти до стандартного вполне работает, например
access-list 100 permit ip host 10.10.10.10 host 10.10.10.11
access-list 100 deny ip any any
Так же мне не удалось вписать сюда ICMP, не понимает он его.
Применить ACL можно только на входе коммутатора, т.е. только так:
sw-ds-bag-1(config-if)#ip access-group 100 in
Пример получившейся конфигурации access-порта:
interface FastEthernet0/1
description bla-bla-bla
switchport access vlan 120
switchport mode access
switchport port-security
switchport port-security maximum 2
switchport port-security aging time 2
switchport port-security violation restrict
switchport port-security aging type inactivity
ip access-group 100 in
no cdp enable
spanning-tree portfast
spanning-tree bpduguard enable
end
При этом в глобальной конфигурации есть следующие строки:
ip dhcp snooping vlan 120
no ip dhcp snooping information option
ip dhcp snooping
vtp mode transparent
errdisable recovery cause bpduguard
errdisable recovery interval 60
access-list 100 permit ip host 10.10.10.10 host 10.10.10.11
access-list 100 deny ip any any
Примерно такую же конфигурацию можно получить используя макросы cisco:
sw-ds-bag-1(config-if)#macro apply cisco-desktop
После чего смотрим конфигурацию интерфейса:
sw-ds-bag-1(config-if)#do sh run int fa 0/20
Building configuration...
Current configuration : 358 bytes
!
interface FastEthernet0/20
switchport mode access
switchport port-security
switchport port-security aging time 2
switchport port-security violation restrict
switchport port-security aging type inactivity
mls qos cos override
macro description cisco-desktop | cisco-desktop
no cdp enable
spanning-tree portfast
spanning-tree bpduguard enable
end
Как видим все тоже самое, только добавлены правила qos. Кстати что бы посмотреть все макросы можно воспользоваться командой:
sw-ds-bag-1#sh parser macro brief
default global : cisco-global
default interface: cisco-desktop
default interface: cisco-phone
default interface: cisco-switch
default interface: cisco-router
default interface: cisco-wireless
Или более подробно:
sw-ds-bag-1#sh parser macro