Pozn.: Když jsem již dříve studoval tyto bezpečnostní funkce, tak jsem nabyl dvou mylných dojmů. Zaprvé, že pro využití Dynamic ARP Inspection musíme mít zapnutý DHCP Snooping. Ten musí být zapnutý pouze pro IP Source Guard. DAI funguje i bez něj, samozřejmě pouze pro statické (a zadané) adresy. Zadruhé, že pro vytváření statických záznamů (přiřazení IP adresy a MAC adresy) je vždy jiná metoda (pro DHCP Snooping, IP Source Guard a DAI). To také není třeba, můžeme vytvořit statické záznamy do DHCP Snoopingu a ty se použijí i pro IP Source Guard nebo Dynamic ARP Inspection.
Traffic Storm Control
Stručná zmínka o metodě, která má zabránit zahlcení sítě nadměrným broadcast, multicast nebo neznámým unicast provozem (traffic storm), které by vedlo k degradaci síťového výkonu. Na portu můžeme nastavit určitou hranici, pokud je překročena, tak je daný druh provozu zahazován, případně se rovnou vypne port.
Odkaz do jedné z oficiálních dokumentací Catalyst 2960 - Configuring Port-Based Traffic Control - Storm Control.
Nastavujeme buď na interface nebo Portchannel (v tom případě se nastavuje opravdu na port-channel a ne na jednotlivé porty). Nastavit můžeme procenta z celkového pásma interface (na některých přepínačích můžeme nastavovat i jinak).
SWITCH(config-if)#storm-control broadcast level 10 SWITCH(config-if)#storm-control multicast level 10 SWITCH(config-if)#storm-control unicast level 10
Zobrazení údajů o nastavení Storm Control.
SWITCH#show storm-control Interface Filter State Upper Lower Current --------- ------------- ----------- ----------- ---------- Gi1/0/1 Forwarding 10.00% 10.00% 0.00%
Patrně novější verze IOSu přináší lepší zobrazení informací.
SWITCH#show storm-control Key: U - Unicast, B - Broadcast, M - Multicast Interface Filter State Upper Lower Current Action Type --------- ------------- ----------- ----------- ---------- --------- ---- Gi1/0/1 Forwarding 10.00% 10.00% 0.00% None U Gi1/0/1 Forwarding 10.00% 10.00% 0.00% None B Gi1/0/1 Forwarding 10.00% 10.00% 0.00% None M
Logování
Tuto situaci jsem si nenasimuloval, jak by měla vypadat zalogovaná zpráva, jsem našel v dokumentaci.
%STORM_CONTROL-3-FILTERED: A Broadcast storm detected on Gi1/0/1. A packet filter action has been applied on the interface.
Port Security
Port Security je rozšířená metoda pro zabezpečení portu a ochraně proti MAC Address Spoofing (podvržení MAC adresy) a MAC Address Flooding (zahlcení MAC adresami). Funguje tak, že kontroluje MAC adresu v příchozích rámcích a pokud se tam nachází jiná než povolená, tak může daný rámec zahodit nebo vypnout port. Pokud tedy útočník zkusí vyměnit připojené zařízení za svoje (a nezmění MAC adresu), tak se zabrání jeho komunikaci. Tuto ochranu jde samozřejmě obejít, ale je jednoduchá na použití a poskytne určitou obranu.
Více jsem popisoval v Cisco IOS 3 - nastavení interface/portu - access, trunk, port security. Odkaz do jedné z oficiálních dokumentací Catalyst 2960 - Configuring Port-Based Traffic Control - Port Security.
Konfigurace se provádí per port (samozřejmě můžeme využít range). Nastavujeme, kolik MAC adres může komunikovat (defaultně 1, maximum záleží na maximu dostupných adres, které systém zvládá), buď se používají adresy dynamicky, ale lepší je zadat ručně nebo nechat naučit při prvním připojení (sticky).
SWITCH(config-if)#switchport port-security mac-address sticky
Můžeme určit reakci na nepovolenou adresu, buď vypnutí portu (shutdown, defaultní chování), zahazování nechtěného provozu (protect) nebo zahazování a odeslání SNMP trapu a syslog zprávy (restrict).
SWITCH(config-if)#switchport port-security violation shutdown
Zapnutí Port Security provedeme na portu.
SWITCH(config-if)#switchport port-security
Pokud se port přepne do error-disabled stavu (reakce na shutdown), tak jej zpět zapneme pomocí příkazů shutdown
a no shutdown
. Případně můžeme využít automatické zapnutí po určité době příkazem errdisable recovery cause psecure-violation
.
Jednoduše si můžeme vypsat, na kterých portech je Port Security nastaveno, kolik povoluje adres a jaká je reakce na porušení.
SWITCH#show port-security Secure Port MaxSecureAddr CurrentAddr SecurityViolation Security Action (Count) (Count) (Count) --------------------------------------------------------------------------- Gi1/0/1 1 0 0 Shutdown
Logování
Když nastavíme nějaké bezpečnostní opatření, tak je cílem, aby zabránilo nechtěné komunikaci. Patrně nás ale také bude zajímat, že k takové situaci došlo. Proto je dobré si posílat logy na Syslog server (jde o jednu z možností) a určité zprávy zpracovávat. Potřebujeme tedy vědět, co se v jaké situaci loguje, a případně logování zapnout.
U Port Security, pokud máme nastaveno violation
na protect, tak se neloguje nic. Pokud máme restrict nebo shutdown, tak se zaloguje detekce nepovolené MAC adresy.
Oct 23 11:33:23: %PORT_SECURITY-2-PSECURE_VIOLATION: Security violation occurred, caused by MAC address 801a.0275.442a on port GigabitEthernet1/0/1.
V případě, že máme nastavenu reakci shutdown, tak následuje vypnutí portu a o tom se vytvoří dva záznamy.
Oct 23 11:33:22: %LINK-3-UPDOWN: Interface GigabitEthernet1/0/1, changed state to down Oct 23 11:33:23: %PM-4-ERR_DISABLE: psecure-violation error detected on Gi1/0/1, putting Gi1/0/1 in err-disable state
Pokud si pak vypíšeme stav portu, vidíme, že je v Error disabled stavu.
SWITCH#show interfaces Gi1/0/1 status Port Name Status Vlan Duplex Speed Type Gi1/0/1 1.10A err-disabled 100 auto auto 10/100/1000BaseT
DHCP Snooping
Aby nám někdo v síti neprovozoval nechtěný DHCP server, tak můžeme využít ochranou funkci DHCP Snooping. Po zapnutí, pro určité VLANy, bere všechny porty jako nedůvěryhodné a my nastavíme některé jako důvěryhodné (tam, kde je připojen DHCP server nebo trunk port k dalším switchům, kde mohou přicházet přidělení adres). Přidělení adres (obecně zprávy DHCPOFFER, DHCPACK, DHCPNAK a DHCPLEASEQUERY a některé další situace) z DHCP pak může přijít pouze z důvěryhodných portů jinak je zahozeno na switchi.
Více jsem popisoval v Cisco IOS 13 - DHCP služby na switchi. Odkaz do jedné z oficiálních dokumentací Catalyst 2960 - Configuring DHCP Features and IP Source Guard.
Pozn.: Pro některé situace je potřeba využívat DHCP option-82. To zde nyní neřešíme.
DHCP Snooping globálně zapneme a určíme pro jaké VLANy se má uplatnit.
SWITCH(config)#ip dhcp snooping SWITCH(config)#ip dhcp snooping vlan 1-4094
Některé porty nastavíme jako důvěryhodné.
SWITCH(config-if)#ip dhcp snooping trust
Můžeme si zobrazit informace o konfiguraci.
SWITCH#show ip dhcp snooping Switch DHCP snooping is enabled DHCP snooping is configured on following VLANs: 1-4094 DHCP snooping is operational on following VLANs: 1,100 DHCP snooping is configured on the following L3 Interfaces:
Nebo statistiky DHCP Snoopingu.
SWITCH#show ip dhcp snooping statistics
Logování
Pokud zapneme DHCP Snooping, tak zahazuje (drop) nedůvěryhodné zprávy. Také o tom loguje informaci, která může vypadat následovně (logy jsou ze dvou různých situací).
Jan 22 07:42:03: %DHCP_SNOOPING-5-DHCP_SNOOPING_MATCH_MAC_FAIL: DHCP_SNOOPING drop message because the chaddr doesn't match source mac, message type: DHCPDISCOVER, chaddr: e006.e7ca.99fb, MAC sa: 3c97.0571.0af8 Jan 22 07:55:01: %DHCP_SNOOPING-5-DHCP_SNOOPING_UNTRUSTED_PORT: DHCP_SNOOPING drop message on untrusted port, message type: DHCPACK, MAC sa: 001c.a43b.041
DHCP Snooping Binding Database
Mimo této užitečné ochrany, může DHCP Snooping, díky tomu, že zpracovává všechny DHCP zprávy, vytvářet DHCP Snooping Binding Database. Ta obsahuje přiřazení MAC adres, IP adres, VLAN a interface, spolu s dobou pronájmu. DB může obsahovat maximálně 8192 záznamů. Tuto databázi pak využívají další bezpečnostní funkce. A pokud se využívá DHCP, tak je jejich použití velmi jednoduché. V článku se na tyto funkce podíváme spíše v případě, kdy používáme statické adresy, takže je konfigurace složitější.
Záznamy (bindings) se uchovávají v paměti, čili se ztratí při restartu switche. Můžeme použít agenta, který zajišťuje jejich uložení do souboru, a při restartu se záznamy načtou. Zapnutí DHCP Snooping Binding Database Agent provedeme tak, že určíme, kde se má databáze vytvářet/používat. Může to být lokálně na switchi (flash) nebo někde na síti.
SWITCH(config)#ip dhcp snooping database flash:/dhcpbind.txt SWITCH(config)#ip dhcp snooping database scp://10.0.0.50/dhcpbind.txt
Záznamy vznikají dynamicky analýzou DHCP zpráv, ale můžeme je vytvářet i ručně (a pokud používáme statické adresy, tak je to nutné). Mezi údaji zadáváme čas exspirace, kdy maximální hodnota 4294967295
znamená neomezeně (infinite).
SWITCH#ip dhcp snooping binding 1234.abcd.1234 vlan 100 192.168.100.10 interface Gi1/0/1 expiry 4294967295
Pozn.: Narazil jsem na problém, že pro jednu MAC adresu může existovat pouze jeden záznam. Pokud chceme přidat druhý záznam s jinou IP adresou (server má na jednom interfacu více IP adres) nebo stejnou kombinaci MAC a IP na jiný port (virtuál, který může cestovat v clusteru), tak nám to přepíše původní záznam pro danou MAC adresu.
Můžeme si vypsat záznamy v databázi (jsou zde dynamické i staticky zadané).
SWITCH#show ip dhcp snooping binding MacAddress IpAddress Lease(sec) Type VLAN Interface ------------------ --------------- ---------- ------------- ---- -------------------- 12:34:ab:cd:12:34 192.168.100.10 infinite dhcp-snooping 100 GigabitEthernet1/0/1 Total number of binding: 1
Nebo údaje a statistiky.
SWITCH#show ip dhcp snooping database Agent URL : flash:/dhcpbind.txt Write delay Timer : 300 seconds Abort Timer : 300 seconds Agent Running : No Delay Timer Expiry : Not Running Abort Timer Expiry : Not Running Last Succeded Time : 09:30:11 CEST Fri Sep 30 2016 Last Failed Time : None Last Failed Reason : No failure recorded. Total Attempts : 8 Startup Failures : 0 Successful Transfers : 8 Failed Transfers : 0 Successful Reads : 1 Failed Reads : 0 Successful Writes : 7 Failed Writes : 0 Media Failures : 0
IP Source Guard
Jednou z bezpečnostních funkcí, která využívá DHCP Snooping Binding Database je IP Source Guard. Tato funkce opravdu vyžaduje, aby byl zapnutý DHCP Snooping pro VLAN na daném interface, jinak se neuplatní, i když budeme mít staticky definované záznamy (výpis zobrazí inactive-no-snooping-vlan). Na L2 portu (není podporován PortChannel), kde tuto funkci nastavíme, se automaticky aplikuje ACL, které filtruje provoz a povolí pouze pakety, kde je zdrojová IP adresa (nebo i MAC adresa) z Binding DB pro tento port. Zabráníme tak útočníkovi použít jinou IP adresu.
Odkaz do jedné z oficiálních dokumentací Catalyst 2960 - Configuring DHCP Features and IP Source Guard.
Konfigurace se provádí per port (obdobně jako Port Security). Pokud využíváme DHCP, tak se tato funkce používá jednoduše. Pouze ji zapneme a tím se nastaví kontrola zdrojových IP adres.
SWITCH(config-if)#ip verify source
Můžeme ji také nastavit, aby se zároveň kontrolovaly zdrojové MAC adresy. Úplně mi pak není jasný rozdíl oproti Port Security, které stejně musí být na daný port nastavené, jinak jsou povoleny všechny MAC adresy (výpis ukazuje permit-all). Ale hodnota MAC adresy se nebere z Port Security, ale ze záznamu v databázi.
SWITCH(config-if)#ip verify source port-security
Pokud používáme statické adresy, tak musíme záznamy zadat manuálně. IP Source Guard bere hodnoty z DHCP Snooping Binding Database, je jedno jestli jde o dynamickou hodnotu nebo ručně zadanou (takže statické záznamy můžeme vložit do této DB). K dispozici máme ještě speciální příkaz, který přidá statický záznam IP Source Bindings.
SWITCH(config)#ip source binding 1234.abcd.1235 vlan 100 192.168.100.20 interface Gi1/0/2
Z dokumentace (kde je uvedeno, že statický záznam se zadává příkazem výše) mi to nikdy nebylo příliš jasné, a až praktické testy mi pomohly s pochopením, jaký je mezi ip dhcp snooping binding
a ip source binding
. IP Source Guard používá záznamy z IP Source Bindings, jejich základem je DHCP Snooping Binding Database (kde jsou dynamické a statické záznamy vždy identifikované jako dhcp-snooping). A můžeme přidat další statické záznamy příkazem výše, ty se nevloží do DHCP Snooping Binding Database (a identifikují se jako static).
Zajímavý rozdíl je, že DHCP Snooping Binding zadáváme v EXEC módu a hodnoty se uloží do paměti/souboru, kdežto IP Source Binding zadáváme v Config módu a uloží se do running config. Je vidět i vazba mezi těmito metodami, protože stejný záznam nemůžeme vytvořit oběma způsoby najednou (asi proto, že se hodnoty z DHCP Snooping Binding přenáší do IP Source Binding).
Stejně, jako si můžeme vypsat obsah DHCP Snooping Binding DB příkazem show ip dhcp snooping binding
, máme příkaz pro vypsání IP Source Binding.
SWITCH#show ip source binding MacAddress IpAddress Lease(sec) Type VLAN Interface ------------------ --------------- ---------- ------------- ---- -------------------- 12:34:ab:cd:12:34 192.168.100.10 infinite dhcp-snooping 100 GigabitEthernet1/0/1 12:34:ab:cd:12:35 192.168.100.20 infinite static 100 GigabitEthernet1/0/2 Total number of bindings: 2
Další možnost je zobrazit seznam portů, kde je IP Source Guard nastaven, a hlavní údaje. Ukážeme si několik příkladů. Nejprve máme IPSG nastaven na jednom portu, ale pro danou VLAN není zapnut DHCP Snooping.
SWITCH#show ip verify source Interface Filter-type Filter-mode IP-address Mac-address Vlan --------- ----------- ----------- --------------- ----------------- ---- Gi1/0/1 ip-mac inactive-no-snooping-vlan
DHCP Snooping nastavíme, ale neexistuje žádný záznam v Bindings a není zapnuto Port Security (klient nemůže komunikovat).
SWITCH#show ip verify source Interface Filter-type Filter-mode IP-address Mac-address Vlan --------- ----------- ----------- --------------- ----------------- ---- Gi1/0/1 ip-mac active deny-all permit-all 100
Ve chvíli, kdy na portu zapneme Port Security, dojde ke změně ve filtraci MAC adres.
SWITCH#show ip verify source Interface Filter-type Filter-mode IP-address Mac-address Vlan --------- ----------- ----------- --------------- ----------------- ---- Gi1/0/1 ip-mac active deny-all deny-all 100
Poslední ukázka je ve chvíli, kdy vytvoříme statický záznam (je jedno, zda do DHCP Snooping nebo IP Source).
SWITCH#show ip verify source Interface Filter-type Filter-mode IP-address Mac-address Vlan --------- ----------- ----------- --------------- ----------------- ---- Gi1/0/1 ip-mac active 192.168.100.10 12:34:ab:cd:12:34 100
Logování
Pro IP Source Guard se bohužel (standardně) žádné logování neprovádí.
IP Source Guard for Static Hosts
Pokud používáme staticky definované adresy (a ne DHCP), tak má Cisco rozšíření IP Source Guard for Static Hosts. Má fungovat tak, že se dynamicky učí adresy, které povolí, až do nastaveného maxima (dokud nemá naučeno, tak vše blokuje). V praxi se mi tato metoda neosvědčila (možná jsem ji špatně pochopil), není zde nic jako funkce Sticky u Port Security, takže se adresy učí pořád dokola. Když klient krátkou dobu nekomunikuje, tak se jeho záznam smaže, když komunikovat začne, tak jsou první pakety zahozeny, tudíž dochází k výpadkům. Takže to vidím pro praxi jako nepoužitelné, přesto je zde zmínka o konfiguraci. Cisco uvádí, že se tato metoda nemá používat na trunk portech.
Nejprve se musí globálně povolit tracking.
SWITCH(config)#ip device tracking
Pak již nastavíme na určité porty. Provádí se obdobně jako normální IPSG a můžeme kontrolovat pouze IP adresy, nebo i MAC adresy.
SWITCH(config-if)#ip verify source tracking SWITCH(config-if)#ip verify source tracking port-security
Povinně musíme také nastavit povolený počet adres na port (default je 0 a vše blokuje). Dokumentace uvádí jako maximum 10, ale minimálně v konfiguraci jde zadat vyšší hodnota.
SWITCH(config-if)#ip device tracking maximum 1
Opět si můžeme vypsat údaje nebo naučené adresy.
SWITCH#show ip verify source Interface Filter-type Filter-mode IP-address Mac-address Vlan --------- ----------- ----------- --------------- ----------------- ---- Gi1/0/1 ip-mac trk active 192.168.100.10 12:34:ab:cd:12:34 100 SWITCH#show ip device tracking all Global IP Device Tracking for clients = Enabled Global IP Device Tracking Probe Count = 3 Global IP Device Tracking Probe Interval = 30 Global IP Device Tracking Probe Delay Interval = 0 ----------------------------------------------------------------------------------------------- IP Address MAC Address Vlan Interface Probe-Timeout State Source ----------------------------------------------------------------------------------------------- 192.168.100.10 1234.abcd.1234 100 GigabitEthernet1/0/1 30 ACTIVE ARP Total number interfaces enabled: 1 Enabled interfaces: Gi1/0/1
Dynamic ARP Inspection (DAI)
Pro kontrolu ARP (Address Resolution Protocol) a ochranu proti ARP Poisoning, ARP Spoofing (přiřazení špatné MAC adresy k IP adrese) se využívá technika Dynamic ARP Inspection. Jedná se o další metodu, která používá DHCP Snooping Binding Database. DAI monitoruje ARP provoz a kontroluje, zda jsou ARP rámce validní oproti odpovídajícím záznamům v Binding DB. Ty nevalidní zahazuje. Pro použití DAI nemusí být zapnutý DHCP Snooping a praxe mi ukázala, že hodnoty bere jak z DHCP Snooping Binding, tak z IP Source Binding.
Ochrana tedy pomůže, když se někdo snaží podvrhnout svoji MAC adresu k cizí IP adrese (třeba pro útok Man-in-the-middle). Opět můžeme některé porty nastavit jako důvěryhodné (trusted), kde se kontrola neprovádí, všechny ostatní porty jsou brány jako nedůvěryhodné (untrusted). DAI zároveň provádí ochranu proti DoS útoku, kdy omezuje počet ARP rámců za vteřinu na interface (Rate Limiting), defaultně na 15.
O DAI jsem již psal v článku Běžné útoky na switche, Cisco Dynamic ARP Inspection a více popsal teorii. Odkaz do jedné z oficiálních dokumentací Catalyst 2960 - Configuring Dynamic ARP Inspection.
DAI se zapíná globálně per VLAN (a per switch) a je podporována na Access portech, Trunk portech a Portchannel.
SWITCH(config)#ip arp inspection vlan 100,200
Porty, kde nechceme DAI provádět, nastavíme jako trusted. Například uplinky k jiným switchům, protože jinak bychom museli znát všechny bindings ze sousedních switchů (nebudeme zde rozebírat, kdy tak může vzniknout bezpečnostní mezera).
SWITCH(config-if)#ip arp inspection trust
To je vše, co je pro základní konfiguraci potřeba. Pokud používáme DHCP, tak se berou hodnoty z DHCP Binding DB. Pokud máme i statické adresy, tak je můžeme ručně zadat do stejné DB, ale použijí se i statické záznamy v IP Source Binding DB.
Pro DAI máme ještě jednu novou metodu, jak definovat statické záznamy (nemusíme pak vůbec používat DHCP Snooping). Můžeme vytvořit ARP ACL, kde se uvedou požadované kombinace IP adres a MAC adres (nemusíme zde řešit o jaký jde port). A toto ACL pak aplikujeme pro DAI. Při vyhodnocování se nejprve zpracovává ARP ACL a teprve pak se případně může použít Binding DB. Příklad vytvoření ARP ACL.
SWITCH(config)#arp access-list ARPtest SWITCH(config-arp-acl)#permit ip host 192.168.100.10 mac host 1234.abcd.1234
Aplikace ARP ACL v rámci DAI pro určitou VLAN.
SWITCH(config)#ip arp inspection filter ARPtest vlan 100
Aplikaci ACL můžeme zadat na konci s klíčovým slovem static
, pak se nepoužijí DHCP bindings, ale pouze záznamy z ACL (vyhodnocení končí zpracováním ACL).
SWITCH(config)#ip arp inspection filter ARPtest vlan 100 static
Volitelně můžeme zapnout ještě dodatečné kontroly příchozích ARP paketů, kde se kontroluje zdrojová MAC (src-mac), cílová MAC (dst-mac) nebo zdrojová a cílová IP (ip). Porovnává se adresa v Ethernet/IP hlavičce a ARP těle.
SWITCH(config)#ip arp inspection validate src-mac
Pokud používáme DAI na trunk portu, tak bychom měli dobře zvážit vlastnost Rate Limiting, která standardně omezuje ARP zprávy na 15 za vteřinu. Případně můžeme tuto ochranu vypnout.
SWITCH(config-if)#ip arp inspection limit none
Hlavní přehled o nastavení a statistikách DAI si zobrazíme.
SWITCH#show ip arp inspection Source Mac Validation : Disabled Destination Mac Validation : Disabled IP Address Validation : Disabled Vlan Configuration Operation ACL Match Static ACL ---- ------------- --------- --------- ---------- 100 Enabled Active Vlan ACL Logging DHCP Logging Probe Logging ---- ----------- ------------ ------------- 100 Deny Deny Off Vlan Forwarded Dropped DHCP Drops ACL Drops ---- --------- ------- ---------- --------- 100 227 33 33 0 Vlan DHCP Permits ACL Permits Probe Permits Source MAC Failures ---- ------------- ----------- ------------- ------------------- 100 227 0 0 0 Vlan Dest MAC Failures IP Validation Failures Invalid Protocol Data ---- ----------------- ---------------------- --------------------- 100 0 0 0
Další možnosti pro kontrolu nastavení DAI a zobrazení statistik.
SWITCH#show ip arp inspection interfaces
Interface Trust State Rate (pps) Burst Interval --------------- ----------- ---------- -------------- Gi1/0/1 Trusted None N/A Gi1/0/2 Untrusted 15 1 SWITCH#show ip arp inspection vlan 100 Source Mac Validation : Disabled Destination Mac Validation : Disabled IP Address Validation : Disabled Vlan Configuration Operation ACL Match Static ACL ---- ------------- --------- --------- ---------- 100 Enabled Active Vlan ACL Logging DHCP Logging Probe Logging ---- ----------- ------------ ------------- 100 Deny Deny Permit SWITCH#show ip arp inspection statistics vlan 100 Vlan Forwarded Dropped DHCP Drops ACL Drops ---- --------- ------- ---------- --------- 100 7671 359 310 49 Vlan DHCP Permits ACL Permits Probe Permits Source MAC Failures ---- ------------ ----------- ------------- ------------------- 100 3399 4257 15 0 Vlan Dest MAC Failures IP Validation Failures Invalid Protocol Data ---- ----------------- ---------------------- --------------------- 100 0 0 0
Logování
U DAI je logování propracováno mnohem více a řadu věcí můžeme nastavit. Když switch zahodí (drop) paket, tak si uloží záznam do logovacího bufferu a pak, podle konfigurovaných hodnot (můžeme nastavovat velikost bufferu a počet zpráv za vteřinu), provede záznam do systémového logu (jedná se o ochranu proti zahlcení) a zprávu odstraní z bufferu. Běžný záznam může vypadat následně.
Oct 25 09:04:00: %SW_DAI-4-DHCP_SNOOPING_DENY: 1 Invalid ARPs (Req) on Gi1/0/1, vlan 100.([1234.abcd.1234/192.168.100.10/ 0000.0000.0000/10.0.0.50/09:03:59 CEST Tue Oct 25 2016])
Pokud používáme ARP ACL, tak hláška vypadá trochu jinak.
Oct 25 12:42:03: %SW_DAI-4-ACL_DENY: 1 Invalid ARPs (Req) on Gi1/0/1, vlan 100.([ 1234.abcd.1234/192.168.100.10/0000.0000. 0000/10.0.0.50/12:42:02 CEST Tue Oct 25 2016])
Pro logovací buffer můžeme nastavit jeho velikost, tedy kolik zpráv může pojmout (default 32).
SWITCH(config)#ip arp inspection log-buffer entries 100
A také nastavit kolik zpráv (0 znamená, že se systémová zpráva nevytváří) za jakou dobu (při 0 se rovnou ukládá do systémového logu) vygeneruje systémovou zprávu (default 5 zpráv za 1 vteřinu).
SWITCH(config)#ip arp inspection log-buffer logs 10 interval 5
Obsah logovacího bufferu (včetně jeho nastavení) si můžeme vypsat (i když se standardně velice rychle vyprazdňuje).
SWITCH#show ip arp inspection log Total Log Buffer Size : 32 Syslog rate : 5 entries per 1 seconds. Interface Vlan Sender MAC Sender IP Num Pkts Reason Time ---------- ---- -------------- --------------- --------- ------------ ---- Gi1/0/1 100 1234.abcd.1234 0.0.0.0 1 Probe Permit 15:19:54 CET Wed Nov 2 2016
Defaultně se logují všechny odmítnuté/zahozené (denied/dropped) pakety, ale můžeme nastavit další logování pro každou VLANu, kde je DAI nastaveno. Logování ARP Probe paketů, kde je zdrojová IP adresa nulová.
SWITCH(config)#ip arp inspection vlan 100 logging arp-probe
Logování všech paketů, které odpovídají DHCP bindings (all
) nebo povolených dle DHCP bindings (permit
).
SWITCH(config)#ip arp inspection vlan 100 logging dhcp-bindings all
Pokud používáme ARP ACL, tak můžeme zapnout logování dle nastavení v tomto ACL (podle klíčového slova log
v pravidlech).
SWITCH(config)#ip arp inspection vlan 100 logging acl-match matchlog
Pokud zapneme některé z rozšířených logování, tak se ve výpisu show ip arp inspection
zobrazí stav u položek ACL Logging, DHCP Logging nebo Probe Logging.
Komplexní příklad nastavení
Když se již rozhodneme bezpečnostní mechanismy používat, tak je můžeme zapnout všechny. Takže ukázka globálních nastavení.
SWITCH(config)#ip dhcp snooping vlan 1-4094 SWITCH(config)#ip dhcp snooping database flash:/dhcpbind.txt SWITCH(config)#ip dhcp snooping SWITCH#ip dhcp snooping binding 1234.abcd.1234 vlan 100 192.168.100.10 interface Gi1/0/1 expiry 4294967295 SWITCH(config)#ip arp inspection vlan 100
Konfigurace acccess portu, kde je připojen klient.
SWITCH(config)#interface GigabitEthernet1/0/1 SWITCH(config-if)#description Klient SWITCH(config-if)#switchport access vlan 100 SWITCH(config-if)#switchport mode access SWITCH(config-if)#switchport port-security mac-address sticky SWITCH(config-if)#switchport port-security SWITCH(config-if)#storm-control broadcast level 10 SWITCH(config-if)#storm-control multicast level 10 SWITCH(config-if)#spanning-tree portfast SWITCH(config-if)#ip verify source port-security
Konfigurace trunk portu, který je jako uplink do centrálního switche.
SWITCH(config)#interface GigabitEthernet1/0/45 SWITCH(config-if)#description Uplink SWITCH(config-if)#switchport trunk allowed vlan 100,200 SWITCH(config-if)#switchport trunk encapsulation dot1q SWITCH(config-if)#switchport mode trunk SWITCH(config-if)#switchport nonegotiate SWITCH(config-if)#storm-control broadcast level 10 SWITCH(config-if)#storm-control multicast level 10 SWITCH(config-if)#ip dhcp snooping trust SWITCH(config-if)#ip arp inspection trust
Opět vynikající článek. Díky za něj.
Měl bych dotaz: fungovalo vám v praxi IPSG nastaveno příkazem "ip verify source port-security" společně s Port security (switchport port-security, bez sticky, restrict)? Já jsem vždy skončil s tím, že "show ip verify source" ukázalo na daném portu denny-all pro IP i MAC, takže klient samozřejmě nemohl komunikovat. Při delším googlení jsem narazil, na vysvětlení [1,2], že Port security a IPSG používají jinou metodu učení zdrojové MAC a dále, že je potřeba si "pohrát" s nastavením DHCP Option 82 v globálním nastavení switche. Žádný hodnotný závěr jsem z toho ale nevyvodil.
Dodávám, že DAI i DHCP Snooping bylo zapnuto a nepoužíváme statické IP.
[1] http://blog.brokennetwork.ca/2011/09/dhcp-based-security-part-2-ip-source.html
[2] https://bdwyertech.net/2016/03/02/switch-security-dhcp-snooping-ip-source-guard-and-dynamic-arp-inspection-2/
odpověď na [1]Ondřej Doležal: Já jsem celé toto zabezpečení používal pouze pro statické adresy (bez DHCP), takže jsem nemusel řešit DHCP Option 82. A IPSG jsem použil pouze s Port Security Sticky. Takže takové zkušenosti nemám.