揭開Cisco NBAR 的神祕面紗: 服務器
NBAR (Network-Based Application Recognition) 的意思是網絡應用識別。 NBAR是一種動態能在四層到七層發現協議的技術。它不一樣於ACL,僅僅依靠端口號進行對應用服務的判斷,更加精準的是能夠經過數據包自己的描述進行識別判斷,該數據屬於哪種服務,能夠對使用動態分配TCP/UDP端口號(如P2P下載軟件)的應用程序和HTTP流量等進行分類。 網絡
實際上NBAR的應用原理在於對網絡應用層面的監控,能夠進行代碼匹配來識別數據報的具體應用,例如FTP、WEB、BT、電驢等等。即使所應用的服務端口變化,NBAR也能夠識別出來具體的服務。NBAR首先能夠應用於網絡監控,判斷究竟在你的網內哪一種服務佔據着最主要的流量,以便於配合QOS來作流量的修整。 ide
既然這麼好的東東,咱們怎麼測試的她的能力了? 請看下文。 測試
採用NBAR就能封殺BT和電驢的流量,爲何?關鍵時路由器靠什麼東西,她又能發現當前傳輸的流量中就包含BT的流量,這得依靠一個強大特徵庫文件:PDLM(數據包描述語言模塊),這個特徵庫文件,就比如是殺毒軟件的病毒庫,殺毒軟件能識別某些文件屬於惡意程序,病毒了,關鍵是她的病毒庫-------- 網站
PDLM它是NBAR針對於網絡高層應用的主要識別原理,從Cisco IOS 12.0以後引入了NBAR的概念,因爲IOS的版本高低不一樣,較高的IOS已經內嵌支持bittorrent和eDonkey兩種協議,若是您的設備目前沒有能力發現BT和電驢的流量,主要是不支持這兩個協議。能夠在 CISCO的網站,使用CCO帳號登錄,找到各類網絡應用的PDLM,每一個PDLM都是針對於一種服務的,它記載了關於判別一種應用服務的關鍵匹配代碼。 spa
做者已經下載完了,須要上傳PDLM模塊到路由器的flash或者nvram中 orm
拓撲圖: 對象
第一步:上傳以前的準備工做 blog
norvel-network#dir /all 接口 Directory of flash:/
1 -rw- 15824768 <no date> 3600_12_3(22)(fc2).bin
33030140 bytes total (17205308 bytes free) norvel-network#show flash all Partition Size Used Free Bank-Size State Copy Mode 1 32255K 15453K 16802K 8192K Read/Write Direct
System flash directory: File Length Name/status addr fcksum ccksum 1 15824768 3600_12_3(22)(fc2).bin 0x40 0x89AC 0x89AC [15824832 bytes used, 17205308 available, 33030140 total] 32768K bytes of processor board System flash (Read/Write)
Chip Bank Code Size Name 1 1 01AD 2048KB AMD 29F016 2 1 01AD 2048KB AMD 29F016 3 1 01AD 2048KB AMD 29F016 4 1 01AD 2048KB AMD 29F016 1 2 01AD 2048KB AMD 29F016 2 2 01AD 2048KB AMD 29F016 3 2 01AD 2048KB AMD 29F016 4 2 01AD 2048KB AMD 29F016 1 3 01AD 2048KB AMD 29F016 2 3 01AD 2048KB AMD 29F016 3 3 01AD 2048KB AMD 29F016 4 3 01AD 2048KB AMD 29F016 1 4 01AD 2048KB AMD 29F016 2 4 01AD 2048KB AMD 29F016 3 4 01AD 2048KB AMD 29F016 4 4 01AD 2048KB AMD 29F016 norvel-network#copy tftp flash //採用TFTP協議,複製TFTP文件到路由器flash中 Address or name of remote host []? 192.168.10.10 //TFTP服務器的IP地址 Source filename []? bittorrent.pdlm //上傳支持BT協議的PDLM,該文件要求要事先放置在TFTP的根目錄下 Destination filename [bittorrent.pdlm]? //上傳後的目的文件名 Accessing tftp://192.168.10.10/bittorrent.pdlm... Erase flash: before copying? [confirm]n //必定要選擇NO,不格式化Flash,不然PDLM是上傳到Flash中了,Flash中的其餘的文件都被格式化了 Loading bittorrent.pdlm from 192.168.10.10 (via Ethernet0/3): ! [OK - 3100 bytes] Verifying checksum... OK (0x7C83) 3100 bytes copied in 0.332 secs (9337 bytes/sec) norvel-network#show flash //查看flash確認已經上傳成功 System flash directory: File Length Name/status 1 15824768 3600_12_3(22)(fc2).bin 2 3100 bittorrent.pdlm [15827996 bytes used, 17202144 available, 33030140 total] 32768K bytes of processor board System flash (Read/Write)
按照上面的相同方法,若是您的設備flash空間已經滿了,沒法存放PDLM,你能夠按同理 將PDLM上傳到NVRAM中,PDLM文件自己都比較小,不用擔憂佔用太多的空間 norvel-network#dir nvram: Directory of nvram:/
25 -rw- 3612 <no date> startup-config 26 ---- 5 <no date> private-config 1 -rw- 0 <no date> ifIndex-table 2 ---- 12 <no date> persistent-data
30712 bytes total (24995 bytes free)
norvel-network#copy tftp nvram: Address or name of remote host []? 192.168.10.10 Source filename []? eDonkey.pdlm Destination filename [eDonkey.pdlm]? Accessing tftp://192.168.10.10/eDonkey.pdlm... Loading eDonkey.pdlm from 192.168.10.10 (via Ethernet0/3): ! [OK - 3492 bytes]
3492 bytes copied in 9.784 secs (357 bytes/sec)
也能夠上傳到NVRAM中 norvel-network#dir nvram: Directory of nvram:/
25 -rw- 3612 <no date> startup-config 26 ---- 5 <no date> private-config 1 -rw- 0 <no date> ifIndex-table 2 ---- 12 <no date> persistent-data 3 -rw- 3492 <no date> eDonkey.pdlm
30712 bytes total (20899 bytes free)
上傳完畢切記須要保存,保存到閃存中,防止無心間重啓丟棄PDLM norvel-network#write memory
|
第二步:經過IP NBAR命令加載PDLM模塊到內存中,並使用Class-map來對流量進行分類標記,使用Policy-map對分類的流量給定丟棄的策略,並最終應用在鏈接Internet的接口下
//採用ip nbar 命令從flash中加載BT和電驢的模塊,若是IOS已經支持這兩種協議,則無需上傳PDLM,也無需使用此命令 norvel-network(config)#ip nbar pdlm flash:bittorrent.pdlm norvel-network(config)#ip nbar pdlm flash:eDonkey.pdlm //使用Class-map對流量進行分類,Class-map的名字爲BT 「match-any」匹配上其中一種流量,就執行分類 「match-all」 匹配全部流量,才分類 norvel-network(config)#class-map match-any BT //Match 對象不少,能夠ACL或者協議等 norvel-network(config-cmap)#match protocol bittorrent norvel-network(config-cmap)#match protocol edonkey //流量已經分類,使用Policy-map的目的是針對這些分類的流量給定一個什麼樣的策略。 這裏先定義policy-map 的名字爲Deny-BT 名稱能夠是任意字符 norvel-network(config)#policy-map Deny-BT //在Policy-map中關聯Class-map 的名字 norvel-network(config-pmap)#class BT //policy-map給這些知足分類流量的策略是丟棄,你能夠作作限速,可讓下載BT,可是速度限制20Kbps norvel-network(config-pmap-c)#drop //要使用NBAR必須啓用 Cisco 快速轉發 norvel-network(config)#ip cef //在接口下要調用Policy-map 的策略 norvel-network(config)#int e0/2 //開啓接口下NBAR發現協議的功能 norvel-network(config-if)#ip nbar protocol-discovery //把策略應用E0/2的出方向 norvel-network(config-if)#service-policy output Deny-BT
|
第三步:在路由器上檢查配置
Show class-map
Show Policy-map
Show policy-map interface e0/2
norvel-network#sh class-map Class Map match-any BT (id 2) Match protocol bittorrent Match protocol edonkey
Class Map match-any class-default (id 0) Match any
norvel-network#show policy-map Policy Map Deny-BT Class BT drop
norvel-network#show policy-map int e0/2 Ethernet0/2
Service-policy input: Deny-BT
Class-map: BT (match-any) 0 packets, 0 bytes 5 minute offered rate 0 bps, drop rate 0 bps Match: protocol bittorrent 0 packets, 0 bytes 5 minute rate 0 bps Match: protocol edonkey 0 packets, 0 bytes 5 minute rate 0 bps drop
Class-map: class-default (match-any) 8133 packets, 7734590 bytes 5 minute offered rate 182000 bps, drop rate 0 bps Match: any
Service-policy output: Deny-BT
Class-map: BT (match-any) 0 packets, 0 bytes 5 minute offered rate 0 bps, drop rate 0 bps Match: protocol bittorrent 0 packets, 0 bytes 5 minute rate 0 bps Match: protocol edonkey 0 packets, 0 bytes 5 minute rate 0 bps drop
Class-map: class-default (match-any) 13273 packets, 871872 bytes 5 minute offered rate 31000 bps, drop rate 0 bps Match: any
|
第四步: 安裝BT和電驢測試 NBAR的效果,軟件安裝就很少說了,下一步就能夠,這些軟件的安裝包中,都捆版了不少廣告軟件,安裝時請謹慎選擇。
第五步:找到下載好的BT種子,記好了,必定要是BT種子文件,這是產生的下載流量才能夠被PDLM所識別,若是是HTTP下載,沒法觸發Bittorrent的流量
第六步:驗證效果,若是不在E0/2下,調用Policy-map策略,開啓BT下載,能夠看到該接口發現了不少BT的流量,BT流量很是瘋狂
norvel-network#sh ip nbar protocol-discovery int e0/2
Ethernet0/2 Input Output Protocol Packet Count Packet Count Byte Count Byte Count 5 minute bit rate (bps) 5 minute bit rate (bps) ------------------------ ------------------------ ------------------------ http 33963 24384 33559299 6041847 292000 67000 bittorrent 4326 7868 2204807 3092548 46000 5500
|
第七步:接口下調用Policy-map 策略,檢查接口Drop包的數量,5分鐘內丟棄了10000
norvel-network#sh policy-map int e0/2 Ethernet0/2 Service-policy output: Deny-BT
Class-map: BT (match-all) 1290 packets, 150864 bytes 5 minute offered rate 10000 bps, drop rate 10000 bps Match: protocol bittorrent drop
Class-map: class-default (match-any) 27006 packets, 5211833 bytes 5 minute offered rate 97000 bps, drop rate 0 bps Match: any
|
第八步:爲了更好的看一下 丟棄的效果,咱們暫時把接口下的策略取消掉,來觀察BT的下載速度是否在「猛漲」
norvel-network(config)#policy-map Deny-BT norvel-network(config-pmap)#class BT norvel-network(config-pmap-c)#no drop
|
關閉丟棄的策略,BT的下載速度開始上漲了,
你能夠多觀察幾分鐘,只要你的帶寬夠大,種子資源夠活躍,這「變態下載」速度會愈來愈快。
第九步:啓用NBAR策略,封殺BT的流量,咱們觀察BT下載速度,在一分一秒的下降,幾分鐘以後的0KB/S,並且一直這樣持續。
說明NBAR封殺BT的流量,現象成功了
norvel-network(config)#policy-map Deny-BT norvel-network(config-pmap)#class BT norvel-network(config-pmap-c)#drop
|
並且下載速度哪裏一直保持的是0KB/S
下載的流量通過路由器是全被丟棄了。
norvel-network#sh policy-map int e0/2 Ethernet0/2 Service-policy input: Deny-BT Class-map: BT (match-all) 8448 packets, 3672204 bytes 5 minute offered rate 26000 bps, drop rate 27000 bps Match: protocol bittorrent drop |