河南 劉建臣
二層交換機工作原理很簡單,其實是存在一定的安全隱患的。例如非法用戶可以使用單播泛洪,偽造MAC地址等手法進行攻擊。
利用Port Security 技術(shù)可有效阻止以上攻擊。通過限制交換機特定端口可以學習到的MAC 地址數(shù)量,將觸發(fā)Shutdown、Restrict、Protect等行為,讓MAC 地址泛洪攻擊失效。當交換機指定端口學習到的MAC 地址數(shù)量超標時,默認執(zhí)行Shutdown 動作模式該接口處于errordisable 狀態(tài)并報警。如果指定了第二種方式,則丟棄不合規(guī)的數(shù)據(jù)包并報警。如果指定了第三種方式,則直接丟棄違規(guī)的數(shù)據(jù)包而不報警。
對于同一個MAC 地址來說,在交換機的中的同一個VLAN 中的兩個不同接口不能同時將其學習到,這可以防止偽造MAC 地址攻擊。
注意,在默認情況下所有接口的Port Security 的功能是禁用的。每個接口最大的MAC 地址容量為1 個。對于交換機的地址學習方式來說,包括自動學習(默認)、手工指派和Stick(粘帖)。對于手動指派來說,可以為指定的端口綁定某個MAC 地址,如果其他主機連接上來,則視為違規(guī)。對于網(wǎng)絡(luò)打印機、網(wǎng)絡(luò)攝像頭等特殊設(shè)備來說,因其MAC 地址不易查看,所以可采用Sticky 方式獲得,即讓指定端口學習到的第一個MAC 地址以粘帖的方式進行綁定。
例如,當?shù)卿浀浇粨Q機上后,執(zhí)行“sh port-securoty interface ethernet 0/0”命令,在返回信息中的“Port Security”欄中如果“Disable”字樣,說明該端口的Port Security 功能沒有開啟。執(zhí)行“config t”,“int ethernet 0/0”,“switch port-security”,來針對該端口開啟Port Security 功能。注意,如果是動態(tài)協(xié)商成Trunk 的接口是不能開啟Port Security 功能的,只能是Access 接口才可以??梢詧?zhí)行“switchport mode access”、“swithport access vlan x”命令,將其修改為Access 模式即可。
執(zhí)行“switchport portsecurity maximum x”命令,可以將該端口最大可以學習的端口數(shù)量設(shè)置為“X”,“X”為具體的數(shù)量值。執(zhí)行“switchport port-security violation protect”或 者執(zhí) 行“switchport portsecurity violation restrict”命令,為其設(shè)置對應(yīng)的動作模式。執(zhí)行“switchport port-security mac-address x.x.x.x”命令,為其手動綁定指定的MAC地址。執(zhí)行“switchport port-security mac-address sticky”命令,允許自動粘貼首個傳入的MAC 地址。至于可以綁定多少個地址,以上面設(shè)置的許可數(shù)值為準。執(zhí)行“exit”,“sh run int ethernet 0/0”命令,可以查看該端口下的配置信息。在返回信息中如果會出現(xiàn)“Ethernet 0/0 is down,line protocol is down(error-disabled)”之類的內(nèi)容,說明在該端口出現(xiàn)了違規(guī)問題。
當然,引起errordisable 狀態(tài)的原因有很多,在全局配置模式下執(zhí)行“errdisable recovery cause?”命令,會顯示所有可能的原因,包括bpduguard,dtp-flap,link-flap,storm-control 等等,這里顯然是因為“securityviolation”引發(fā)的。對于處于error-disable 狀態(tài)的端口,恢復的方法包括自動和手動模式,對于前者來說,可以執(zhí)行“errdisable recovery cause securityviolation”命令,開啟自動恢復功能,注意需要在該命令中指明違規(guī)的原因。執(zhí)行“errdisable recovery interval x”命令,設(shè)置恢復的時間,單位為秒,范圍從30 到86400。執(zhí)行“sh errdisable recovery”命令,顯示允許自動恢復的項目。例如將恢復時間設(shè)置為30 秒,當達到時間點后,該端口會自動恢復。但是如果黑客的攻擊持續(xù)不斷,該端口會不斷的處于關(guān)閉和恢復狀態(tài),這無疑會白白的消耗資源。因此,使用手動恢復可以有效避免該問題。
其實現(xiàn)方法很簡單,執(zhí)行:
即可恢復該端口活力。
當多臺交換機連接成一個環(huán)路時,會使用特定的法則算出一個接口被Block 阻塞。方法是首先選擇根橋,其上的所有端口都處于轉(zhuǎn)發(fā)狀態(tài),之后在每個非根橋上選擇一個根端口,使其處于轉(zhuǎn)發(fā)狀態(tài),并在每一個網(wǎng)段選擇一個指定端口,將其設(shè)置為轉(zhuǎn)發(fā)狀態(tài),之后剩下的端口都處于Block 狀態(tài)。
不管處于什么情況,只要交換機組成環(huán)路,都會使用STP 技術(shù)為其Block 一個接口。
從環(huán)路的結(jié)構(gòu)上分許,對于根橋來說,其上的所有端口都處于轉(zhuǎn)發(fā)狀態(tài),如果有人非法在其上連接了一個交換機,如果其優(yōu)先級最低,就將根橋的角色搶奪過來,造成原來網(wǎng)絡(luò)的Block 端口發(fā)生變化,該交換機上所有端口會自動處于轉(zhuǎn)發(fā)狀態(tài)。
因為根橋可以匯聚流量,所有一旦讓其得手,只要黑客在該交換機上連接一臺主機,開啟專用的嗅探抓包軟件,就可以捕獲該根橋上的所有數(shù)據(jù)。這樣,網(wǎng)絡(luò)中的所有流量就會徹底暴露在黑客面前。
為了避免上述攻擊方式,就需要采取Root Guard 技術(shù),避免讓根橋隨意發(fā)生變化。其原理是當確定某臺交換機處于根橋角色時,則其他接入的交換機禁止搶奪根橋角色。
例如在交換機管理命令行中執(zhí)行“interface fa 0/1”,“spanning-tree guard root”命令,就可以針對fa 0/1 接口Root Guard功能。
此外,采用BPDU Guard方法,也可以實現(xiàn)同樣的防護功能。
我們知道,BPDU 是交換機用來選擇根橋以及計算哪些端口會被Block 的數(shù)據(jù)包,對于有些端口(例如一些Access 端口等)來說,是沒有必要收到BPDU 包的。對于這些Access 端口來說,需要配置BPDU 功能功能。對于BPDU 的過濾,包括BPDU Guard 和BPDU Filtering。
對于前者來說,其安全級別最高,一旦被在端口下啟動了BPDU Guard 功能,只要其收到BPDU 包,會自動將其設(shè)置為errdisable 狀態(tài),并發(fā)出警告信息。
例如,執(zhí)行“interface fa 0/1”,“spanning-tree bpduguard enable”命令,可以在指定端口上啟用BPDU Guard 功能。
如果執(zhí)行:
可以在全局啟動BPDU Guard 功能。如果端口的errdisable 狀態(tài)是因為BPDU Guard 安全違規(guī)引起的,則經(jīng)過30 秒自動恢復。
對于后者來說,當其端口發(fā)送和接收到BPDU 包后,可以自動將其丟棄。執(zhí)行正常的數(shù)據(jù)包轉(zhuǎn)發(fā)操作,對BPDU包不予理睬。
執(zhí)行:
可以在指定端口開啟BPDU Filtering 功能。
對于VALN 跳躍攻擊,同樣不能掉以輕心。對于VALN跳躍攻擊來說,有效的防御方法需要從設(shè)計角度來考慮。
例如,在全局配置模式下執(zhí)行:
創(chuàng)建VLAN 198 和VLAN 199,并將其Shutdown。執(zhí)行“int range f0/15-20”命令,進入f0/15-20 端口范圍中,假設(shè)這些端口未被使用。執(zhí)行“switchport access vlan 199”命令,將其劃入VLAN 199。執(zhí)行“switchport trunk encapsulation dot1q”命令,將其封裝為Trunk 接口,執(zhí)行“switchport mode trunk”、“switch nonegotiate”命令,設(shè)置Trunk 非協(xié)商功能,禁止其發(fā)送協(xié)商信息。執(zhí)行“switchport trunk native vlan198”命令,將VLAN 198設(shè)置為Native VLAN。
這樣,VLAN 998 和VLAN 999 為手工關(guān)閉的VLAN,并將沒有使用到的接口放置到其中。
如果想使用某個未用接口(例如f 0/15),可以執(zhí)行“int f 0/15”,“switchport access vlan 50”命令,將其放置到VLAN 50 中,這里的VLAN 50 為正常的可以使用的VALN。
這樣,就可以正常使用該端口了。不用的話,可以執(zhí) 行“switchport access vlan 199”命令,將其移動到關(guān)閉掉的VALN 中。
這樣的話,這些未使用的端口就處于安全狀態(tài)了。將Trunk 協(xié)議設(shè)置為ON 模式,禁止其自動協(xié)商,并禁止其定期發(fā)送相關(guān)消息。將Trunk 上的Native VLAN 設(shè)置為一個不使用的VLAN,在Tunk 鏈路上配置所需要承載的具體的VLAN,并且為Native VLAN打上tag 標記。假設(shè)F0/19,f0/21 為Trunk接口,執(zhí)行“int range f/19,f0/21”命令,對其進行配置。執(zhí)行“switchport trunk allowed vlan 10,20,30”命令,只允許其傳遞VLAN10,20,30 的流量,這些VAN 是正??梢哉J褂玫?。
執(zhí)行“valn dot1q tag native”命令,對Native VLAN 也打上tag 標記,即將Native VLAN 排除在外并禁止使用。