河南 劉建臣
二層交換機工作原理很簡單,其實是存在一定的安全隱患的。例如非法用戶可以使用單播泛洪,偽造MAC地址等手法進行攻擊。
利用Port Security 技術可有效阻止以上攻擊。通過限制交換機特定端口可以學習到的MAC 地址數量,將觸發Shutdown、Restrict、Protect等行為,讓MAC 地址泛洪攻擊失效。當交換機指定端口學習到的MAC 地址數量超標時,默認執行Shutdown 動作模式該接口處于errordisable 狀態并報警。如果指定了第二種方式,則丟棄不合規的數據包并報警。如果指定了第三種方式,則直接丟棄違規的數據包而不報警。
對于同一個MAC 地址來說,在交換機的中的同一個VLAN 中的兩個不同接口不能同時將其學習到,這可以防止偽造MAC 地址攻擊。
注意,在默認情況下所有接口的Port Security 的功能是禁用的。每個接口最大的MAC 地址容量為1 個。對于交換機的地址學習方式來說,包括自動學習(默認)、手工指派和Stick(粘帖)。對于手動指派來說,可以為指定的端口綁定某個MAC 地址,如果其他主機連接上來,則視為違規。對于網絡打印機、網絡攝像頭等特殊設備來說,因其MAC 地址不易查看,所以可采用Sticky 方式獲得,即讓指定端口學習到的第一個MAC 地址以粘帖的方式進行綁定。
例如,當登錄到交換機上后,執行“sh port-securoty interface ethernet 0/0”命令,在返回信息中的“Port Security”欄中如果“Disable”字樣,說明該端口的Port Security 功能沒有開啟。執行“config t”,“int ethernet 0/0”,“switch port-security”,來針對該端口開啟Port Security 功能。注意,如果是動態協商成Trunk 的接口是不能開啟Port Security 功能的,只能是Access 接口才可以。可以執行“switchport mode access”、“swithport access vlan x”命令,將其修改為Access 模式即可。
執行“switchport portsecurity maximum x”命令,可以將該端口最大可以學習的端口數量設置為“X”,“X”為具體的數量值。執行“switchport port-security violation protect”或 者執 行“switchport portsecurity violation restrict”命令,為其設置對應的動作模式。執行“switchport port-security mac-address x.x.x.x”命令,為其手動綁定指定的MAC地址。執行“switchport port-security mac-address sticky”命令,允許自動粘貼首個傳入的MAC 地址。至于可以綁定多少個地址,以上面設置的許可數值為準。執行“exit”,“sh run int ethernet 0/0”命令,可以查看該端口下的配置信息。在返回信息中如果會出現“Ethernet 0/0 is down,line protocol is down(error-disabled)”之類的內容,說明在該端口出現了違規問題。
當然,引起errordisable 狀態的原因有很多,在全局配置模式下執行“errdisable recovery cause?”命令,會顯示所有可能的原因,包括bpduguard,dtp-flap,link-flap,storm-control 等等,這里顯然是因為“securityviolation”引發的。對于處于error-disable 狀態的端口,恢復的方法包括自動和手動模式,對于前者來說,可以執行“errdisable recovery cause securityviolation”命令,開啟自動恢復功能,注意需要在該命令中指明違規的原因。執行“errdisable recovery interval x”命令,設置恢復的時間,單位為秒,范圍從30 到86400。執行“sh errdisable recovery”命令,顯示允許自動恢復的項目。例如將恢復時間設置為30 秒,當達到時間點后,該端口會自動恢復。但是如果黑客的攻擊持續不斷,該端口會不斷的處于關閉和恢復狀態,這無疑會白白的消耗資源。因此,使用手動恢復可以有效避免該問題。
其實現方法很簡單,執行:


即可恢復該端口活力。
當多臺交換機連接成一個環路時,會使用特定的法則算出一個接口被Block 阻塞。方法是首先選擇根橋,其上的所有端口都處于轉發狀態,之后在每個非根橋上選擇一個根端口,使其處于轉發狀態,并在每一個網段選擇一個指定端口,將其設置為轉發狀態,之后剩下的端口都處于Block 狀態。
不管處于什么情況,只要交換機組成環路,都會使用STP 技術為其Block 一個接口。
從環路的結構上分許,對于根橋來說,其上的所有端口都處于轉發狀態,如果有人非法在其上連接了一個交換機,如果其優先級最低,就將根橋的角色搶奪過來,造成原來網絡的Block 端口發生變化,該交換機上所有端口會自動處于轉發狀態。
因為根橋可以匯聚流量,所有一旦讓其得手,只要黑客在該交換機上連接一臺主機,開啟專用的嗅探抓包軟件,就可以捕獲該根橋上的所有數據。這樣,網絡中的所有流量就會徹底暴露在黑客面前。
為了避免上述攻擊方式,就需要采取Root Guard 技術,避免讓根橋隨意發生變化。其原理是當確定某臺交換機處于根橋角色時,則其他接入的交換機禁止搶奪根橋角色。
例如在交換機管理命令行中執行“interface fa 0/1”,“spanning-tree guard root”命令,就可以針對fa 0/1 接口Root Guard功能。
此外,采用BPDU Guard方法,也可以實現同樣的防護功能。
我們知道,BPDU 是交換機用來選擇根橋以及計算哪些端口會被Block 的數據包,對于有些端口(例如一些Access 端口等)來說,是沒有必要收到BPDU 包的。對于這些Access 端口來說,需要配置BPDU 功能功能。對于BPDU 的過濾,包括BPDU Guard 和BPDU Filtering。
對于前者來說,其安全級別最高,一旦被在端口下啟動了BPDU Guard 功能,只要其收到BPDU 包,會自動將其設置為errdisable 狀態,并發出警告信息。
例如,執行“interface fa 0/1”,“spanning-tree bpduguard enable”命令,可以在指定端口上啟用BPDU Guard 功能。
如果執行:

可以在全局啟動BPDU Guard 功能。如果端口的errdisable 狀態是因為BPDU Guard 安全違規引起的,則經過30 秒自動恢復。
對于后者來說,當其端口發送和接收到BPDU 包后,可以自動將其丟棄。執行正常的數據包轉發操作,對BPDU包不予理睬。
執行:


可以在指定端口開啟BPDU Filtering 功能。
對于VALN 跳躍攻擊,同樣不能掉以輕心。對于VALN跳躍攻擊來說,有效的防御方法需要從設計角度來考慮。
例如,在全局配置模式下執行:

創建VLAN 198 和VLAN 199,并將其Shutdown。執行“int range f0/15-20”命令,進入f0/15-20 端口范圍中,假設這些端口未被使用。執行“switchport access vlan 199”命令,將其劃入VLAN 199。執行“switchport trunk encapsulation dot1q”命令,將其封裝為Trunk 接口,執行“switchport mode trunk”、“switch nonegotiate”命令,設置Trunk 非協商功能,禁止其發送協商信息。執行“switchport trunk native vlan198”命令,將VLAN 198設置為Native VLAN。
這樣,VLAN 998 和VLAN 999 為手工關閉的VLAN,并將沒有使用到的接口放置到其中。
如果想使用某個未用接口(例如f 0/15),可以執行“int f 0/15”,“switchport access vlan 50”命令,將其放置到VLAN 50 中,這里的VLAN 50 為正常的可以使用的VALN。
這樣,就可以正常使用該端口了。不用的話,可以執 行“switchport access vlan 199”命令,將其移動到關閉掉的VALN 中。
這樣的話,這些未使用的端口就處于安全狀態了。將Trunk 協議設置為ON 模式,禁止其自動協商,并禁止其定期發送相關消息。將Trunk 上的Native VLAN 設置為一個不使用的VLAN,在Tunk 鏈路上配置所需要承載的具體的VLAN,并且為Native VLAN打上tag 標記。假設F0/19,f0/21 為Trunk接口,執行“int range f/19,f0/21”命令,對其進行配置。執行“switchport trunk allowed vlan 10,20,30”命令,只允許其傳遞VLAN10,20,30 的流量,這些VAN 是正常可以正常使用的。
執行“valn dot1q tag native”命令,對Native VLAN 也打上tag 標記,即將Native VLAN 排除在外并禁止使用。