Настройка 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