一、什么是NBAR?
 
      NBAR的全称是Network−Based Application Recognition,译为基于网络的应用识别。它可以对使用动态分配TCP/UDP端口号的应用程序和HTTP流量等进行分类.在使用NBAR的时候 要先启用CEF特性.
 
二、NBAR的缺陷
 
首先,NBAR不能在以下几种逻辑接口上使用:
1、快速以太网信道.
2、使用了隧道或加密技术的接口.
3、SVI.
4、拨号接口.
5、多链路PPP(MLP).


揭开 Cisco NBAR 的 神秘面纱:
NBAR (Network-Based Application Recognition) 的意思是网络应用识别。 NBAR 是一种动态能在四层到七层发现协议的技术。它不同于 ACL ,仅仅依靠端口号 进行对应用服务的判断,更加精准的是可以通过数据包本身的描述进行识别判断,该数据属于哪一种服务,可以对使用动态分配 TCP/UDP 端口号 (如 P2P 下载软件)的应用程序和 HTTP 流量等进行分类。
实际上 NBAR 的应用原理在于对网络应用层面的监控,可以进行代码匹配来识别数据报的具体应用,例如 FTP WEB BT 、电驴等等。即便所 应用的服务端口变化, NBAR 也可以识别出来具体的服务。 NBAR 首先可以应用于网络监控,判断究竟在你的网内哪种服务占据着最主要的流量,以便于配合 QOS 来做流量的修整。
既然这么好的东东,我们怎么测试的她的能力了? 请看下文。
采用 NBAR 就能封杀 BT 和电驴的流量,为什 么 ? 关键时路由器靠什么东西,她又能发现当前传输的流量中就包含 BT 的流量,这得依靠一 个强大特征库文件: PDLM (数据包描述语言模块),这个特征库文件,就好比是杀毒软件的病毒库,杀毒软件能识别某些文件属于恶 意程序,病毒了,关键是她的病毒库 --------
PDLM 它是 NBAR 针对于网络高层应用的主要识别原理,从 Cisco IOS 12.0 之后引入了 NBAR 的概念,由于 IOS 的版本高低不同, 较高的 IOS 已经内嵌支持 bittorrent eDonkey 两种协议,如果您的设备目前没有能力发现 BT 和电驴的流量,主要是不支持这两个协议。 可以在 CISCO 的网站,使用 CCO 账号登陆,找到各种网络应用的 PDLM ,每个 PDLM 都是针对于一种服务的,它记载了关于判别一种应用服务的关键匹配代码。
 
作者已经下载完了,需要上传 PDLM 模块到路由器的 flash 或者 nvram
 
拓扑图:
clip_p_w_picpath002
 
第一步:上传之前的准备工作
 
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