既然在網絡設備中運行各種網絡協議,就必然需要為其設置各種參數,這其實都是由管理層面控制的。控制層面通過這些參數來執行一些命令,來控制網絡中的結構信息。數據層面將相應的用戶數據從對應的接口使用合適的方式轉發出去。
綜上所述,對于路由器來說,控制層面運行路由或組播進程,并為數據層面構建了路由或轉發表,控制層面是基于進程級別運行的,在一些慢速的路徑上需要共享CPU資源,即在控制層面運行一些協議時,需要占用一定的CPU資源。默認情況下,控制層面會共享主CPU隊列。對于路由器中的CPU來說,管理進程、路由進程、慢速數據路徑等都會消耗資源。
管理進程會通過Telnet、SSH等方式來對路由器進行各種管理操作。路由進程屬于控制層面,因為涉及路由計算操作,也會占用一定CPU資源。也就是說,控制層面需要和管理進程和慢速數據路徑共享CPU資源。
在控制層面是存在一些安全威脅的,包括慢速路徑的DoS攻擊和路由協議欺騙等。前者主要是通過發送大量的垃圾數據來加劇路由器CPU的資源消耗。對于一些思科路由器來說,存在CEF快速轉發機制,可以將數據快速轉發出去,而無需經過CPU處理。但是對于不支持CEF的路由器來說,所有的數據必須經過CPU處理,攻擊者可以發送大量的垃圾數據包,來極大的消耗CPU的占用率以實現攻擊的目的。
對于這種攻擊手段,可以使用多種方法進行防御。例如使用ACL控制列表,在對應的接口上攔截所有的攻擊數據包。也可以通過COPP(Control Plane Policing)和 CPPR(Control Plane Protrction)技術,來保護路由器避免此類攻擊。
對于后者來說,是很常見的攻擊手法。例如兩臺路由器彼此可以正常的交換路由信息。但是對于以太網來說,是多路訪問的環境,允許接入其他的網絡設備。這樣攻擊者可以將自己的路由器連接進來,并將自己偽裝成合法地址,向目標路由器發送虛假的路由更新消息,以非法獲取傳輸的數據。
對于此類攻擊,有多種方法加以應對。例如路由器本身具有安全認證和過濾功能,就可以有效解決問題,當然使用數據層面的ACL控制列表以及COPP和CPPR等技術,也可以對其進行防御。因為在路由器上會面對各種安全威脅,所以在配置路由協議時,最好進行合理的規劃。例如在進行路由協議的拓撲規劃和配置時,要能識別一些合法的對等體,即不同的設備之間通過安全認證的方式來建立鄰居關系等。對網絡協議所需的資源進行評估,并通過各種方法取消對于不需要的資源。
在設計網絡拓撲時,要保留合法的路由信息,對于不合法的路由信息,可以通過路由過濾等手段將其清除。對于不信任的對等體和網絡邊緣,要考慮部署相應的對策。在部署一個網絡時,建議至少實施一個層次的控制層面的安全保護。即在數據傳遞的過程中,數據每經過一個設備,都會進行封裝或解封裝操作。在進行封裝時(如傳輸層封裝、網絡層封裝等),要考慮在每一層上為其添加安全保護。例如,在網絡層配置控制層面的保護等。如果條件許可,推薦進行冗余層次的保護,這樣可以實現深度防御。路由協議是一個可傳遞的受信任的分布式系統,應在所有的設備上都提供相同層面的保護。
使用基于架構的ACL控制列表的方法可以對控制層面進行保護,不過這是比較“古老”的方法。一般來說,都是思科的ISO環境下去部署控制層面下的安全策略(即 COPP)。根據以上分析可以知道,控制層面主要負責管理網絡設備之間運行的路由或交換協議信息的。針對這些特定的信息,很有可能會被一些攻擊者利用,對網絡安全造成危害。
例如對于一臺路由器的某個接口下運行了OSPF協議,在其下連接的不是一個合法的用戶而是一個攻擊者,攻擊者就可能會偽裝一些OSPF的信息,并和該路由器交換OSPF信息,這就會對該路由器上正常的OSFP數據造成擾亂和破壞,進而對該設備進行攻擊,如果不及時進行處置,就對網絡安全造成不可忽視的威脅。
利用COPP控制層面監管技術,可以對進行有效防御。COPP可以在網絡設備上開啟一個虛擬的控制層面的接口,當有一些流量進入該控制接口時,COPP可以識別這些流量的類型,對于非法的流量可以進行限制措施,來保護控制層面的安全。也就是說,在該虛擬接口上,COPP可以通過過濾和限速等手段,將不正常的流量直接過濾,或對其進行限速。COPP提供基本的資源保護功能,可以允許或拒絕關于控制層面的訪問,這明顯優于控制列表功能,因為ACL只能對數據包執行最基本的通過或丟棄的簡單處理。
COPP可以針對控制層面的流量進行限制處理,其比本地接口或基于構建的控制列表更易于管理,COPP需要在一個虛擬的控制層面接口配置服務策略,COPP的配置并不復雜,首先需要創建Traffic Classes對流量進行分類,來描述關于控制層面的有效流量。之后創建一個流量策略,對控制層面流量進行允許、拒絕或限速處理,最后將該策略應用到對應的虛擬控制層面接口上。
注意,控制層面接口輸入全局接口,分為主接口和子接口。對于COPP來說一般應用到主接口上,因為COPP是基于全局接口運作,所以可以按照預設的策略,對整個路由器上的所有跟控制層面有關的流量進行處理,而CPPR一般應用在子接口上。
這里使用簡單的例子來說明如何配置和管理COPP。在網絡中存在R1和R2兩臺路由器,在其上分別啟用Loopback0的環回口,地址分別為172.16.1.10/24和172.16.2.10/24,兩 臺路由器分別通過地址為10.1.1.1/24和10.1.1.2/24的fa0/0端口連接到同一臺交換機上的兩個接口上,并將其配置為同一個VLAN,這樣兩者就可以正常通訊。在該網絡中部署OSPF協議,在R1和R2互聯網段設置為OSPF區域0,在R1的環回口設置為OSPF區域1,在R2的環回口設置為OSPF區域2。
在R1的控制臺上執行“route ospf 100”、“routeid 172.16.1.10”、“network 172.16.1.10 0.0.0.0 aera 1”、“network 10.1.1.1 0.0.0.0 0”、“end” 等 命令,在R2的控制臺上執行“route ospf 100”、“routeid 172.16.2.10”、“network 172.16.2.10 0.0.0.0 aera 2”、“network 10.1.1.2 0.0.0.0 area 0”、“end”等命令,完成以上配置操作。為了讓其收斂的更快速,可在R2上執行“conf t”、“inter f/0”、“ip ospf priority 0”命令,將該接口的優先級設置為0,讓其不參與OSPF的DR和BDR的選舉。執行“show ip ospf neighbor”命令,顯示其鄰居關系已經建立。執行“show ip route ospf”命令,顯示相關的路由信息。
當然,路由器之所以可以學到OSPF路由,其實就是路由器的控制層面來實現的。準備好了實驗環境后,就可以對COPP進行配置了。例如在R2上執行“ip accesslist extened copp-ospf”命令,創建名為“copp-ospf”的擴展訪問控制列表,執行“permit ospf 12.1.1.0 0.0.0.255 any”命令,允許指定的地址向任何地方發送數據。執行“exit”、“classmap copp-ospf-class”命令,建一個名為“copp-ospfclass”的 Class-map。執行“match access-group name copp-ospf”、“exit” 命 令,使其匹配名為“copp-ospf”的訪問列表。執行“policymap copp-policy” 命 令,創 建 名 為“copp-policy”的Policy-map。在其配置模式下執行“class coppospf-class”命令,調用上述Class-map。接下來就可以為其定義各種行為,例如設置帶寬、丟棄等。執行“police rate 100 pps conform-action transmit exceed-action drop”命令,表示當數據包進入該路由器的控制層面時,當速率不超過每秒100個時對其放行,當超過時將其丟棄。
執 行“exit”、“class class-default”命 令,定義默認的Class,其針對的是除了上述設置的所有跟控制層面相關的內容。執行“police rate 10 pps conform-action transmit exceed-action drop”命令,表示針對這些內容進行限速,當其速度不超過10個每秒時放行否則丟棄。執行exit”,“control-plane”命令,進入COPP主接口配置界面。執行“service-policy input copp-policy”、“end”命令,針對進入的流量設置上述策略。之后執行“show policy-map control-policy all”命令,可以查看數據包匹配信息。執行“debug control-plane all” 命令,查看被過濾掉的數據包信息。對應的,執行“conf t”,“no class copp-ospfclass”命令,可以取消上述控制策略。當然,對于RIP、EIGRP等其他網絡協議,也可以創建同樣的策略,對控制層面的流量進行處理。
使用Telnet命令,可以對目標路由器進行管理操作。例如,在R1上開啟一個VTY控制臺,為其設置密碼并允許登錄,就可以執行Telnet連接。在有些情況下,可能不希望隨意使用Telnet進行連接,這就可以使用控制層面安全策略進行管控。這樣,當對R1進行Telnet連接時,將連接的數據包丟棄。在進行Telnet連接時,每輸入一個字符,就會向R1發送一個數據包。基于此原理,只要在R1的控制層面進行限速處理,就會讓Telnet連接無法進行。在R1全局配置模式下執行“line vty 0 4”、“pas xxx”、“login”命令,開啟VTY控制臺,設置密碼為“xxx”。
執 行“ip access-list extended telnet”命令,創建名為“telnet”的擴展訪問控制列表。執行“permit tcp host 10.1.1.1.2 any eq 23”命令,允許從指定的IP訪問R1的Telnet端口。 執 行“exit”、“classmap telnet-class”命 令,創 建 名 為“telnet-class”的Class-map。 執 行“match access-group name telnet”命令,使之匹配名為“telnet”的訪問控制列表。 執 行“exit”、“policymap telnet-policy”命令,創建名為“telnet-policy”的Policy-map。執行“police rate 1 pps conformaction transmit exceedaction drop”命令,對于速率超過每秒一個的數據包執行丟棄處理。執行“exit”、“exit”、“control-plane”、“service-policy input telnet-policy”命令,針對進入的流量設置預定的策略。
這樣,當試圖使用Telnet訪問R1的話,其速度就變得很緩慢,如果將上述命令執行“police rate 1 pps conform-action drop”,那么就將徹底禁用Telnet連接。