Accton Edge Core ES 3526XA
Accton Edge-Core ES-3526XA
Цель статьи - описатьпроцедуру тестирования коммутатора Accton Edge-Core ES-3526XA. Планируется как замена Dlink DES-3526.
Необходимый функционал
- IP source Guard + DHCP Snooping + Otion 82 (Выдавать IP на основании порта коммутатора и запретить все IP кроме полученных по DHCP)
- ACL (Разрешить для неавторизованных IP только доступ на портал абонента)
- VLAN, SNMP - более менее стандартный функционал L2-коммутаторов.
Загрузка
Наблюдаю загрузку (9600 8N1) с консоли.
Image Loader 1.0.0.2 Loading Diagnostic Image File : ES3526XA-V2_DIAG_1005.bix Diagnostic 1.0.0.5 --- Performing Power-On Self Tests (POST) --- DUMMY Test 1 ................. PASS UART Loopback Test ........... PASS DRAM Test .................... PASS I2C Bus Initialization ....... PASS Done All Pass. ------------------ DONE --------------------- Loading Runtime Image File : ES3526XA_ES3510_V11022.bix Runtime 1.1.0.22 root init done [get stackingMac done ret_val] = 1 Assigned Unit ID:[1] stacking DB: unit = 0, module type = 0 Set Transition mode ... Finish Set Transition mode ... Enter Transition mode ... Finish Transition mode ... Enter Master mode ... Load certificate files : Starting Load certificate files : Finished Finish Master mode ... Performing startup provision ... ............................................................................................................................................................................................................. Notify provision complete CLI provision has been completed Provision Complete ... Finish Provision Complete ... [get stackingMac done ret_val] = 1 *************************************************************** WARNING - MONITORED ACTIONS AND ACCESSES Station's information: Floor / Row / Rack / Sub-Rack / / / DC power supply: Power Source A: Floor / Row / Rack / Electrical circuit / / / Number of LP: Position MUX: IP LAN: Note: ********************************** User Access Verification Username:
Обновление Firmware
Сразу же обновляю firmware:
Console#dir File name File type Startup Size (byte) ------------------------------------- -------------- ------- ----------- Unit1: ES3526XA-V2_DIAG_1005.bix Boot-Rom Image Y 305512 ES3526XA_ES3510_V11022.bix Operation Code Y 3076624 Factory_Default_Config.cfg Config File N 542 startup1.cfg Config File Y 5572 y Config File N 5437 --------------------------------------------------------------------------- Total free space: 3276800
Console#copy tftp file TFTP server IP address: 192.168.95.22 Choose file type: 1. config: 2. opcode: <1-2>: 2 Source file name: ES3526XA_ES3510_V11023.bix Destination file name: ES3526XA_ES3510_V11023.bix Write to FLASH Programming. Write to FLASH finish. Success.
Выбираю новый софт как загружаемый по-умолчанию
Console(config)#boot system opcode:ES3526XA_ES3510_V11023.bix Success.
Наблюдаю загрузку нового софта:
Loading Runtime Image File : ES3526XA_ES3510_V11023.bix
Настройка
CLI вцелом cisco-like, но это пожалуй самый неудобный в нстройке коммутатор из тех с которыми мне приходилось иметь дело. Возможно, дело привычки.
DHCP Relay
Настройка коммутатора
Настройка достаточно простоа и аналогична другим коммутаторам (AT-8000S, Lucent LS-62..., DES- ...)
ip dhcp relay information option ip dhcp relay information option remote-id ip-address ip dhcp relay information policy replace IP DHCP relay server 172.16.251.1
Однако, отмечу что в пакете в качестве Remote-ID содержиться не ip а какой-то мусор. На данный момент у меня нет ответа от поставщика как расшифровать remote-id.
Настойка DHCPd
tshark -V -n ... Вот пример пакета (только option 82) Bootstrap Protocol Message type: Boot Reply (2) Hardware type: Ethernet Hardware address length: 6 Hops: 1 Transaction ID: 0xa5ee3a70 Seconds elapsed: 0 Bootp flags: 0x8000 (Broadcast) 1... .... .... .... = Broadcast flag: Broadcast .000 0000 0000 0000 = Reserved flags: 0x0000 Client IP address: 0.0.0.0 (0.0.0.0) Your (client) IP address: 192.168.199.2 (192.168.199.2) Next server IP address: 0.0.0.0 (0.0.0.0) Relay agent IP address: 172.16.251.2 (172.16.251.2) Client MAC address: 00:1c:23:95:8d:8b (00:1c:23:95:8d:8b) Server host name not given Boot file name not given Magic cookie: (OK) Option: (t=53,l=1) DHCP Message Type = DHCP Offer Option: (53) DHCP Message Type Length: 1 Value: 02 Option: (t=54,l=4) Server Identifier = 172.16.251.1 Option: (54) Server Identifier Length: 4 Value: AC10FB01 Option: (t=51,l=4) IP Address Lease Time = 8 hours, 36 minutes, 40 seconds Option: (51) IP Address Lease Time Length: 4 Value: 00007918 Option: (t=1,l=4) Subnet Mask = 255.255.255.0 Option: (1) Subnet Mask Length: 4 Value: FFFFFF00 Option: (t=3,l=4) Router = 192.168.199.254 Option: (3) Router Length: 4 Value: C0A8C7FE Option: (t=6,l=8) Domain Name Server Option: (6) Domain Name Server Length: 8 Value: C1213021C12130A0 IP Address: 193.33.48.33 IP Address: 193.33.48.160 Option: (t=82,l=16) Agent Information Option Option: (82) Agent Information Option Length: 16 Value: 01060004006501010206010400000000 Agent Circuit ID: 000400650101 Agent Remote ID: 010400000000 End Option Padding
Первое впечатление, что формат Circuit ID анлогичен Dlink DES-3526 и другим коммутаторам (Если есть стандарт то хорошо бы найти докумнтацию)
Значение Circuit ID побайтно:00 04 0065 01 01
00 - Тип Circit ID (Всегда 0?) (1 байт, смещение 0)
04 - Длинна (констаната? почему такое значение?) (1 байт смещение 1)
0065 - VLAN ID (2 байта, смещение 2)
01 - Stack/Module ID (0 или 1 у stand-alone switch) 1 байт, смещение 4
01 - Port (1 байт, смещение 5)
Конфиг сервера аналогичен.
Простой пример:
class "port-1" { match if( binary-to-ascii(10, 8, "/", suffix(option agent.circuit-id, 1)) = "1" ); }
Для логов использую следующюю конструкцию:
if exists agent.circuit-id { log ( info, concat( "Lease for ", binary-to-ascii (10, 8, ".", leased-address), " is connected to interface ", binary-to-ascii (10, 8, "/", suffix ( option agent.circuit-id, 2)), " , VLAN ", binary-to-ascii (10, 16, "", substring( option agent.circuit-id, 2, 2)), " on switch ", binary-to-ascii(16, 8, ":", substring( option agent.remote-id, 2, 6)))); log ( info, concat( "Lease for ", binary-to-ascii (10, 8, ".", leased-address), "<>raw option-82 info is CID: ", binary-to-ascii (10, 8, ".", option agent.circuit-id), " AID: ", binary-to-ascii(16, 8, ".", option agent.remote-i
В логах наблюдаю успешную выдачу IP
anarxist dhcpd: DHCPDISCOVER from 00:1c:ХХ:ХХ:ХХ:ХХ (tester) via 172.16.251.2 anarxist dhcpd: DHCPOFFER on 192.168.199.2 to 00:1c:ХХ:ХХ:ХХ:ХХ (tester) via 172.16.251.2 anarxist dhcpd: Lease for 192.168.199.2 is connected to interface 1/1 , VLAN 101 on switch 0:0:0:0 anarxist dhcpd: Lease for 192.168.199.2 raw option-82 info is CID: 0.4.0.101.1.1 AID: 1.4.0.0.0.0
DHCP Snooping
При настройке DHCP Snopping мне удалось вызвать зависание коммутатора.
Пробую настроить согласно инструкции Монблана
ip dhcp snooping ip dhcp snooping vlan 101 ip dhcp snooping information option ip dhcp snooping information policy replace
Настраиваю trusted-порты:
interface ethernet 1/25 ip dhcp snooping trust exit interface ethernet 1/26 ip dhcp snooping trust exit
Смотрю статус:
sh ip dhcp snooping Global DHCP Snooping status: enable DHCP Snooping Information Option Status: disable DHCPSNP_MGR_GetInformationRidMode:3639 DHCPSNP_MGR_GetInformationRidMode:3646 DHCPSNP_MGR_GetInformationRidMode:3653 DHCPSNP_MGR_GetInformationRidMode:3655 DHCPSNP_MGR_GetInformationRidMode:3663 DHCPSNP_MGR_GetInformationRidMode:3666 DHCP Snooping Information Option Remote ID: mac address DHCP Snooping Information Policy: replace DHCP Snooping is configured on the following VLANs: 102, Verify Source Mac-Address: enable Interface Trusted ---------- ---------- Eth 1/1 No ... Eth 1/25 Yes Eth 1/26 Yes
Пробую посмотреть связки ip-мак-порт:
Console#sh ip dhcp snooping binding MacAddress IpAddress Lease(sec) Type VLAN Interface ----------------- --------------- ---------- -------------------- ---- --------- 00-1c-23-95-8d-8b 192.168.199.2 35 dhcp-snooping 101 Eth 1/1
Удобно что при получении пакета коммутатор выдает сообщение на консоль. К сожалению, это сообщение не записывается в лог и не пересылаются на удаленный syslog-server, и они не слишком информативны. Но, в других коммутаторах нет и таких =)
#DHCPSNP_ENGINE_InsertOption82AndForward:2826
IP Source Guard
IP Source Guard - функционал который позволяет блокировать все src-ip (и мак?) кроме выданных по DHCP. Весьма полезный функционал совместно с Option 82 insertion и DHCP Snooping.
На коммутаторе:
interface ethernet 1/1 ip source-guard sip-mac exit
Пробую поставить ip адрес вручную.
После истечения времени Lease-time связь с тестовым клиентом пропадает. После восстановления автоматических настроенк и получении ip адреса от DHCP-сервера связь восстанавливается.
ACL
ACL невозможно использовать совместно с ip source guard, т.к. на порту траффик обработаный source guard ACL уже не обрабатывается. Из этой ситуации есть 2 выхода.
- Применять ACL на аплинк-портах. смирившись с тем что траффик в пределах коммутатора не контролируется полностью. Это достаточно серьезный недостаток (кроме схемы влан-на-клиента, но при использовании этой схемы нет нужды в таком дорогом коммутаторе.)
- Использовать policy-map и "шейпить" нежелательный траффик до скорости 1 байт в секунду. Выглядит как "костыль", не так ли?
На втором способе остановлюсь чуть подробнее.
Для примера, рассмотрим следующюю ситуацию: Клиент может получать ip адрес из 3-х различных пулов в зависимости от состояния счета.
Пусть это будут пулы
- 10.199.0.0 /24 для "неплатильщиков"
- 10.200.0.0 /24 для "неавторизованных"
Для "неплатильщиков" нужно разрешить только хост 192.168.95.22 где запущен соответвующим образом настроенный ДНС и веб-сервер с сообщением о долге, а для "неавторизованных" разрешить хост 10.199.0.100 где, соответвенно, запущен сервис авторизации. Самбу запретить для всех.
Для этого пришлось применить следужщюю конструкцию:
access-list IP extended m4 permit 10.199.0.0 255.255.0.0 host 10.199.0.100 permit 10.200.0.0 255.255.0.0 host 192.168.95.22 deny 10.199.0.0 255.255.0.0 any deny 10.200.0.0 255.255.0.0 any deny TCP any any destination-port 135 135 deny TCP any any destination-port 137 137 deny TCP any any destination-port 138 138 deny TCP any any destination-port 139 139 deny TCP any any destination-port 445 445 deny UDP any any destination-port 135 135 deny UDP any any destination-port 137 137 deny UDP any any destination-port 138 138 deny UDP any any destination-port 139 139
! class-map m4 match-any match access-list m4 exit !
! policy-map m4 class m4 set cos 0 police 1 64 exceed-action drop exit exit !
interface ethernet 1/1 ip source-guard sip-mac switchport allowed vlan add 101 untagged switchport mode access switchport native vlan 101 switchport allowed vlan remove 1 switchport allowed vlan remove 4093 service-policy input m4 !
Port Security
На коммутаторе вполне работоспасобна ф-я port-security
interface ethernet 1/2 port security max-mac-count 10 port security action trap-and-shutdown ip source-guard sip-mac switchport allowed vlan add 101 untagged switchport mode access switchport native vlan 101 switchport allowed vlan remove 1 switchport allowed vlan remove 4093 service-policy input m4
При попытке атаковать коммутатор (утилита arppoison из пакета arptools) ф-я security отрабатывает верно, и коммутатор перестает изучать маки на атакованом порту.
Console# sh mac-address-table Interface MAC Address VLAN Type --------- ----------------- ---- ----------------- Eth 1/ 2 00-01-E5-E5-E1-97 101 Learned-PSEC Eth 1/ 2 00-02-CD-15-A8-EE 101 Learned-PSEC Eth 1/ 2 00-16-EF-72-56-36 101 Learned-PSEC Eth 1/ 2 00-18-B8-9B-C2-BE 101 Learned-PSEC Eth 1/ 2 00-2D-AF-F7-7E-CC 101 Learned-PSEC Eth 1/ 2 00-30-F9-DF-12-61 101 Learned-PSEC Eth 1/ 2 00-35-F2-76-37-D3 101 Learned-PSEC Eth 1/ 2 00-37-36-27-47-2F 101 Learned-PSEC Eth 1/ 2 00-4B-19-DF-10-4F 101 Learned-PSEC Eth 1/ 2 00-4C-D8-DF-1F-6D 101 Learned-PSEC Eth 1/26 00-30-48-35-9A-11 1 Learned Eth 1/26 00-30-48-35-9A-11 101 Learned
Т.е. атака arp poison не работает.
Выводы (+ToDo)
Плюсы:
- Рабочий DHCP-snooping с поддержкой Option 82 insertion.
- Рабочий IP Source-Guard
Минусы
- Нет способа очистки маков изученных при включении port-security
Выводы: