端口镜像-Linux如何实现镜像端口

一 : Linux如何实现镜像端口

在所有高端型号,大多数中端型号以及部分低端型号的交换机/路由器上,都可以配置一个或者多个镜像端口,它是流量分析的利器。然而,Linux上没有现成的技术可以实现镜像端口,当然,我指的不是Linux 3.x(x是几,忘了)以上的内核,这些内核已经支持了镜像,但不够好。起码2.6.35的内核是不能支持的,那么Linux实现的软交换机属于哪个档次呢?关键是,很多高端的网络产品也是基于Linux实现的,没有镜像口怎么能行,即使在不使用Linux bridge的情况下,也希望能有一个技术实现镜像端口。

1.确定你的镜像端口,比如eth5;

xt_TEE的实现

在xtables-addons中,已经有了一个xt_TEE的实现,在其manual中,有一个一目了然的配置:
-t mangle -A PREROUTING -i eth0 -j TEE --gateway 2001:db8::1
-j TEE --dev ethX,ethY,ethZ

前传

起初,写这个模块的目标并不是为了做镜像端口,而是为了将一个数据包复制两份,仅此而已,其实本意就是一个Netfilter实现的抓包模块,和使用pcap抓包相比,它的优势在于可以去除很多不相关数据包的干扰,它只能抓取确实是发往本机的数据包,虽然这也许违背的抓包的原本的意义,但是那只是一个词汇而已!我以及很多人大多数情况下抓包并不是为了嗅探别人的数据,而是为了解决和自己相关的问题,这就需要过滤掉那些不小心到来的由于交换机MAC映射到期导致的发往所有端口的数据,而这需要写一大堆tcpdump规则。

不能做到包嗅探!

实现

本实现由4部分,其中包含一个内核模块文件,一个用户态的iptables库文件,一个结构体定义头文件,一套Makefile。代码完全按照xtables-addons的规范制作。

结构体定义头文件:xt_CLONE.h
#ifndef _LINUX_NETFILTER_XT_CLONEMARK_H #define _LINUX_NETFILTER_XT_CLONEMARK_H 1 struct xt_clonemark_tginfo { __u32 mark; }; #endif /* _LINUX_NETFILTER_XT_CLONEMARK_H */

内核模块:xt_CLONE.c
/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License; either * version 2 of the License, or any later version, as published by the * Free Software Foundation. */ #include <linux/module.h> #include <linux/skbuff.h> #include <linux/netfilter/x_tables.h> #include <net/ip6_route.h> #include "xt_CLONE.h" #include <net/ip.h> #include "compat_xtables.h" struct sk_buff_head clq; static struct tasklet_struct clone_xmit_tasklet; static void clone_xmit_work(unsigned long data) { struct sk_buff_head *pclq = (struct sk_buff_head *)data; struct net_device *old_dev = NULL; struct net_device *new_dev = NULL; do { struct sk_buff * skb = skb_dequeue_tail(pclq); old_dev = skb_dst(skb)->dev; if (ip_route_me_harder(&skb, RTN_UNSPEC)) { kfree_skb(skb); } new_dev = skb_dst(skb)->dev; if (old_dev != new_dev) { ip_local_out(skb); } else { kfree_skb(skb); } } while (!skb_queue_empty(pclq)); } static unsigned int clone_tg6(struct sk_buff **poldskb, const struct xt_action_param *par) { // TODO return XT_CONTINUE;; } static unsigned int clone_tg4(struct sk_buff **poldskb, const struct xt_action_param *par) { const struct xt_clonemark_tginfo *markinfo = par->targinfo; struct sk_buff *newskb; __u32 mark; __u32 qlen; qlen = skb_queue_len (&clq); // 控制总量! if (qlen > 1000/*sysctl参数控制*/) { return XT_CONTINUE; } mark = markinfo->mark; newskb = pskb_copy(*poldskb, GFP_ATOMIC); if (newskb == NULL) return XT_CONTINUE; // 在FORWARD链上做的目的是可以放心reroute,关键在re前缀 // skb_dst_drop(newskb); // 丢弃连接跟踪,但是要为之初始化一个notrack的伪连接跟踪 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) #include <net/netfilter/nf_conntrack.h> nf_conntrack_put(newskb->nfct); newskb->nfct = &nf_conntrack_untracked.ct_general; newskb->nfctinfo = IP_CT_NEW; nf_conntrack_get(newskb->nfct); #endif newskb->mark = mark; skb_queue_head(&clq, newskb); tasklet_schedule(&clone_xmit_tasklet); return XT_CONTINUE; } static struct xt_target clone_tg_reg[] __read_mostly = { { .name = "CLONE", .revision = 0, .family = NFPROTO_IPV6, .table = "filter", .target = clone_tg6, .targetsize = sizeof(struct xt_clonemark_tginfo), .me = THIS_MODULE, }, { .name = "CLONE", .revision = 0, .family = NFPROTO_IPV4, .table = "filter", .target = clone_tg4, .targetsize = sizeof(struct xt_clonemark_tginfo), .me = THIS_MODULE, }, }; static int __init clone_tg_init(void) { skb_queue_head_init(&clq); tasklet_init(&clone_xmit_tasklet, clone_xmit_work, (unsigned long)&clq); return xt_register_targets(clone_tg_reg, ARRAY_SIZE(clone_tg_reg)); } static void __exit clone_tg_exit(void) { tasklet_kill(&clone_xmit_tasklet); return xt_unregister_targets(clone_tg_reg, ARRAY_SIZE(clone_tg_reg)); } module_init(clone_tg_init); module_exit(clone_tg_exit); MODULE_AUTHOR("Wangran <marywangran@126.com>"); MODULE_DESCRIPTION("Xtables: CLONE packet target"); MODULE_LICENSE("GPL"); MODULE_ALIAS("ip6t_CLONE"); MODULE_ALIAS("ipt_CLONE");
iptables模块:libxt_CLONE.c
/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License; either * version 2 of the License, or any later version, as published by the * Free Software Foundation. */ #include <stdio.h> #include <getopt.h> #include <xtables.h> #include "xt_CLONE.h" #include "compat_user.h" enum { FL_MARK_USED = 1 << 0, }; static const struct option clonemark_tg_opts[] = { {.name = "mark", .has_arg = true, .val = &#39;1&#39;}, {NULL}, }; static void clonemark_tg_init(struct xt_entry_target *t) { struct xt_clonemark_tginfo *info = (void *)t->data; info->mark = ~0U; } static void clone_tg_help(void) { printf("CLONE --mark marknn"); } static int clone_tg_parse(int c, char **argv, int invert, unsigned int *flags, const void *entry, struct xt_entry_target **target) { struct xt_clonemark_tginfo *info = (void *)(*target)->data; unsigned int n; switch (c) { case &#39;1&#39;: xtables_param_act(XTF_ONLY_ONCE, "CLONE", "--mark", *flags & FL_MARK_USED); xtables_param_act(XTF_NO_INVERT, "CLONE", "--mark", invert); if (!xtables_strtoui(optarg, NULL, &n, 0, ~0U)) xtables_param_act(XTF_BAD_VALUE, "CLONE", "--mark", optarg); info->mark = n; *flags |= FL_MARK_USED; return true; } return false; } static void clone_tg_check(unsigned int flags) { //TODO } static void clonemark_tg_save(const void *entry, const struct xt_entry_target *target) { const struct xt_clonemark_tginfo *info = (const void *)target->data; printf(" --mark 0x%x ", (__u32)info->mark); } static struct xtables_target clone_tg_reg = { .version = XTABLES_VERSION, .name = "CLONE", .family = NFPROTO_UNSPEC, .size = XT_ALIGN(sizeof(struct xt_clonemark_tginfo)), .userspacesize = XT_ALIGN(sizeof(struct xt_clonemark_tginfo)), .init = clonemark_tg_init, .save = clonemark_tg_save, .help = clone_tg_help, .parse = clone_tg_parse, .final_check = clone_tg_check, .extra_opts = clonemark_tg_opts, }; static __attribute__((constructor)) void clone_tg_ldr(void) { xtables_register_target(&clone_tg_reg); }

编译:
obj-${build_CLONE} += xt_CLONE.o
obj-${build_CLONE} += libxt_CLONE.so
build_CLONE=m
make && make install即可,

说明 为何要在filter表做呢?因为filter表都在路由之后执行,这是为了调用reroute接口函数ip_route_me_harder的方便,该函数导出为一个内核接口,可以直接调用。在这么做之前,我尝试过直接调用ip_queue_xmit函数,然而发现只有在本机出发的包才会经过该路径,因此需要为skb绑定一个socket才可以,而这无疑是工作量加大了;后来,我想到了直接调用ip_rcv_finish函数,可以该函数并未导出,需要在加载模块前先去procfs里面查一下该函数的地址,然后传入模块,这种做法并不标准;再往后,自然而然就是调用ip_route_me_harder接口函数了,然而该函数需要skb已经有了一个dst_entry(这很正常,reroute中的re前缀表明skb已经被路由过一次了),因此必然要在路由之后调用,那么显然处理位置就落到了Netfilter的HOOK点和路由构成的马鞍面的中间位置了,只能在filter表来做,重新路由之后,直接调用ip_local_out从第三层发出即可。

协议栈本身来完成,即调用协议栈的函数,因为协议栈本身就是干这个的,决不要在自己的代码中实现,如果你觉得自己可以实现一个更妙的,那就直接改掉协议栈。

局限

该实现还是有一定局限的,毕竟该实现的做法太高层,它会改变数据包的MAC头,但是这对于针对应用层内容的深度解析,无所谓了。另外需要注意的是,需要在本机做三件工作,第一就是设置CLONE规则及确定mark,第二是根据mark设置策略路由,第三就是将策略路由指向的出口设备的arp禁用掉。除了本机做的工作之外,还要在接收镜像数据的机器的接收接口上开启混杂模式。

二 : 端口镜像是怎么实现的?

配置Catalyst交换端口分析器(SPAN)

介绍
交换端口分析器(SPAN)功能有时被称为端口镜像或端口监控该功能可通过网络分析器(例如交换机探测设备或者其它远程监控(RMON)探测器)选择网络流量进行分析以前SPAN是Catalyst交换机族较为基本的功能但最新推出的CatOS有许多增强功能而且有许多功能是用户现有才开始使用的本文并不是SPAN功能的又一种配置指南而是立足于介绍已实施的SPAN的最新功能本文将对SPAN的一般问题进行回答 例如
SPAN是什么?我如何对它进行配置?
有什么不同的功能(尤其是同时进行多个SPAN话路)?需要何种级别的软件来执行这些功能?
SPAN是否会影响交换机的性能?
开始配置前
规则
有关详情请参阅 Cisco技术提示规则
SPAN简要介绍
SPAN是什么?为什么需要SPAN? 在交换机上引入SPAN功能是因为交换机和集线器有着根本的差异当集线器在某端口上接收到一个数据包时它将向除接收该数据包端口之外的其它所有端口发送一份数据包的拷贝当交换机启动时它将根据所接收的不同数据包的源MAC地址开始建立第层转发表一旦建立该转发表交换机将把指定了MAC地址的业务直接转发至相关端口
例如如果您想要截获从主机A发送至主机B的以太网业务而两台主机是用集线器相连的那么只要在该集线器上安装一嗅探器所有端口均可看见主机A和主机B之间的业务

在交换机中当知道了主机B的MAC地址之后从主机A到主机B的单播业务仅被转发至主机B的端口因此嗅探器看不见

在这个配置中嗅探器将仅截获扩散至所有端口的业务例如广播业务具有CGMP或者IGMP侦听禁止的组播业务以及未知的单播业务当交换机的CAM表中没有目的地的MAC时将发生单播泛滥它无法理解向何处发送业务而将数据包大量发送至VLAN中的所有端口
将主机A发送的单播数据包人工复制到嗅探器端口需要一些附加功能来实现

在上面的图表中与嗅探器相连的端口配置为对主机A发送的每一个数据包拷贝进行接收该端口被称为SPAN端口下文各节将说明如何对该功能进行精确的调节使其作用不仅仅限于监控端口
SPAN术语
? 入口业务进入交换机的业务
? 出口业务离开交换机的业务
? 源(SPAN)端口用SPAN功能受监控的端口
? 目的地(SPAN)端口监控源端口的端口通常连有一个网络分析器
? 监控端口在Catalystxl/xl/术语中监控端口也是目的地SPAN端口
?本地SPAN? 当被监控端口全部位于同一交换机上作为目的地端口时SPAN功能为本地SPAN功能这和下文中的远程SPAN形成对比
?远程SPAN或者RSPAN? 作为目的地端口的某些源端口没有位于同一交换机上这是一项高级功能要求有专门的VLAN来传送该业务并由交换机之间的SPAN进行监控并非所有交换机均支持RSPAN所以请检查各自的版本说明或者配置指南来核实您要进行配置的交换机是否可以使用该功能
? PSPAN指基于端口的SPAN用户对交换机指定一个或者数个源端口以及一个目的地端口
?VSPAN:? 指基于VLAN的SPAN在给定的交换机中用户可以使用单个命令来选择对属于专门VLAN的所有端口进行监控
?ESPAN? ESPAN指SPAN增强版本该术语在SPAN的发展期间数次用于命名新增功能因此意义并不很明确在本文中避免使用该术语
?管理源? 已配置受监控的源端口或者VLAN的列表
?操作源? 受到有效监控的端口列表这可能和管理源有所不同例如在关闭模式下的端口可能在管理源中出现但它不受到有效监控

[page]
所用的组件
本文使用CatOS 作为Catalyst 以及族的参考在Catalyst XL/XL族中使用了Cisco IOS(r)软件版本)XU虽然本文以后会根据SPAN的变化而更新但有关SPAN功能的最新发展情况请参阅文档的版本说明
本文中所提供的信息是在从特殊实验室环境下的设备中产生的本文中所使用的所有设备均以缺省配置启动如果您是在实际网络中作业请确保您在使用所有命令之前已了解这些命令可能产生的影响
Catalyst XL/XL交换机上的SPAN
提供的功能及限制
Catalyst XL/XL中的端口监控功能没有太过扩展因此比较容易理解
您可以根据需要创建多个本地PSPAN话路例如您可以在您选作目的地SPAN端口的端口配置创建PSPAN话路只需用 端口监视 <interface> 命令列出您想监控的源端口即可在Catalyst XL/XL的术语中监控端口其实是目的地SPAN端口
? 主要限制在于与给定话路相关的所有端口(无论源端口还是目的地端口)必须属于同一VLAN
? 如果您没有在端口监控命令中指定任何接口则作为接口的所有其它属于同一VLAN的端口将受到监控
以下限制摘自 Catalyst XL/XL 的命令参考
ATM端口是唯一无法受到监控的端口然而您还是可以对ATM端口进行监控以下限制适用于具有端口监控能力的各个端口
? 快速EthernetChannel或者千兆EthernetChannel 端口群中不能有监控端口
? 因为端口安全性而无法启用监控端口
? 监控端口不可以是多VLAN端口
? 当端口受到监控时监控端口必须是同一VLAN的成员对于监控端口以及受到监控的端口不允许进行VLAN成员的改变
? 监控端口不可以是动态接入端口或者中继端口但是静态接入端口可以对中继线上的VLAN多VLAN或者动态接入端口进行监控受到监控的VLAN与静态接入端口有关联
? 如果监控器以及受监控端口为受保护端口端口监控将不起作用
有关功能冲突的补充信息请参阅下文的链接
? 管理交换机——管理配置冲突 &#; Catalyst XL/XL 系列
请注意处于监控状态的端口不执行生成树协议(STP)但端口仍然属于其镜像的端口VLAN如果端口监控属于某个环路的一部分(例如当您将其连接至集线器或者网桥而环接至网络的其它部分时)您可能会以严重的桥接环路状况收尾因为您不再受到STP的保护请参阅 为什么我的SPAN话路会产生一个桥接环路?一节看一看产生该情况的一个实例
配置实例
在本例中创建了两个并行的SPAN话路
? 端口Fa/将对由端口Fa/发送端口Fa/接收的业务进行监控它也将对往返于管理接口VLAN 的业务进行监控
? 端口Fa/将对端口Fa/以及Fa/进行监控
端口Fa/Fa/以及Fa/均在VLAN 中进行配置其它端口以及管理接口均在默认的VLAN 中进行配置
网络图

Catalyst XL/XL上的配置样本
Catalyst XL/XL上的配置样本
<snip> ! interface FastEthernet/port monitor FastEthernet/port monitor FastEthernet/port monitor VLAN! interface FastEthernet/! interface FastEthernet/switchport access vlan ! interface FastEthernet/port monitor FastEthernet/port monitor FastEthernet/switchport access vlan ! interface FastEthernet/! interface FastEthernet/switchport access vlan ! <snip> ! interface VLANip address no ip directedbroadcast no ip routecache ! <snip>
配置步骤说明
如果要将端口Fa/配置为源端口Fa/Fa/以及管理接口的目的端口请在配置模式中选择接口Fa/
? Switch(config)#int fa/

Enter the list of ports to be monitored:
? Switch(configif)#port monitor fastEthernet /
Switch(configif)#port monitor fastEthernet /

然后这两个端口接收的或者发送的数据包也会被复制到端口Fa/使用另一版本的port monitor 命令对管理接口的监控进行配置
?Switch(configif)#port monitor VLAN ?

?/B>上文中的命令并不意味着端口Fa/将监控整个VLAN VLAN 关键字仅指交换机的管理接口
? 输入以下命令说明在不同VLAN中监控某个端口是不可能的
Switch(configif)#port monitor fastEthernet? /
FastEthernet/and FastEthernet/are in different vlan
To finish the configurationconfigure another sessionthis time using Fa/as a destination SPAN port:
Switch(configif)#int? fa/?
Switch(configif)#port monitor fastEthernet /
Switch(configif)#port monitor fastEthernet /
Switch(configif)#^Z

检查配置情况的最佳方法是发出简单的 show running命令或者使用 show port monitor 命令
?Switch#show port monitor?
Monitor Port Port Being Monitored
&#;&#;&#;&#;&#;&#;&#; &#;&#;&#;&#;&#;&#;&#;
FastEthernet/VLAN
FastEthernet/FastEthernet/
FastEthernet/FastEthernet/
FastEthernet/FastEthernet/
FastEthernet/FastEthernet/
?/B>Catalyst XL以及XL不支持单一接收方向的SPAN(Rx SPAN或者入口SPAN)或者单一发送方向的SPAN(Tx SPAN或者出口SPAN)所有配置SPAN的受控端口必须既能进行业务接收(Rx)又能进行业务发送(Tx)

华为
等交换机镜像】

S/S/S/SH/S等交换机支持的都是基于端口的镜像有两种方法

方法一

配置镜像(观测)端口 [SwitchA]monitorport e/
配置被镜像端口 [SwitchA]port mirror Ethernet /to Ethernet /
方法二

可以一次性定义镜像和被镜像端口

[SwitchA]port mirror Ethernet /to Ethernet /observingport Ethernet /

交换机端口镜像配置】

假设交换机镜像端口为E//被镜像端口为E//设置端口//为端口镜像的观测端口

[SwitchA] port monitor ethernet //

设置端口//为被镜像端口对其输入输出数据都进行镜像

[SwitchA] port mirroring ethernet //both ethernet //

也可以通过两个不同的端口对输入和输出的数据分别镜像

设置E//和E//为镜像(观测)端口

[SwitchA] port monitor ethernet //

设置端口//为被镜像端口分别使用E//和E//对输入和输出数据进行镜像

[SwitchA] port mirroring gigabitethernet //ingress ethernet //
[SwitchA] port mirroring gigabitethernet //egress ethernet //

『基于流镜像的数据流程』
基于流镜像的交换机针对某些流进行镜像每个连接都有两个方向的数据流对于交换机来说这两个数据流是要分开镜像的
/E/F/

〖基于三层流的镜像〗

定义一条扩展访问控制列表

[SwitchA]acl num

定义一条规则报文源地址为/去往所有目的地址

[SwitchAacladv]rule permit ip source destination any

定义一条规则报文源地址为所有源地址目的地址为/

[SwitchAacladv]rule permit ip source any destination

将符合上述ACL规则的报文镜像到E/端口

[SwitchA]mirroredto ipgroup interface e/
〖基于二层流的镜像〗
定义一个ACL
[SwitchA]acl num
定义一个规则从E/发送至其它所有端口的数据包
[SwitchA]rule permit ingress interface Ethernet/(egress interface any)
定义一个规则从其它所有端口到E/端口的数据包
[SwitchA]rule permit (ingress interface any)? egress interface Ethernet/
将符合上述ACL的数据包镜像到E/
[SwitchA]mirroredto linkgroup interface e/

支持对入端口流量进行镜像

配置端口Ethernet //为监测端口对Ethernet //端口的入流量镜像

[SwitchA]mirror Ethernet //? ingressto Ethernet //
//R】

目前该三款产品只支持对入端口流量进行镜像虽然有outbount参数但是无法配置
镜像组名为监测端口为Ethernet//端口Ethernet//的入流量被镜像
[SwitchA]mirroringgroup inbound Ethernet//mirroredto Ethernet//

三 : cisco 远程端口镜像

一.什么是交换端口分析:

交 换式端口分析器(SPAN)分析经过某个本地端口或VLAN的流量信息.SPAN发送一份流量的拷贝给连接安全设备的交换机端口.注意,一旦启用了 SPAN,VSPAN或RSPAN,目标端口的STP*作就被禁止,可能会造成环路.另外,配置RSPAN之前要先定义一个RSPAN专用的VLAN.如 果在VTP服务器上配置了RSPANVLAN,那么VTP服务器自动将正确的信息传播给其他中间交换机;否则要确保每台中间交换机都配置的有 RSPANVLAN.

SPAN的3种模式:

1.SPAN:源端口和目标端口都处于同一交换机,并且源端口可以是一个或多个交换机端口.

2.基于VLAN的交换式端口分析器(VSPAN):SPAN的一种变体,源端口不是物理端口,而是VLAN.

3.远程交换式端口分析器(RSPAN):源端口和目标端口处于不同的交换机.

二.配置步骤:

配置SPAN和VSPAN的步骤如下:

1.定义SPAN会话的源端口,对于Catalyst3550交换机,会话数只支持两条,即1和2.还可以定义监听流量的方向,默认监听双向流量.如果需要多个源端口,重复该步骤:

Aiko(config)#monitorsession{session-number}source{interfaceinterface|vlanvlan-id}[rx|tx|both]

2.定义SPAN会话的目标端口,要确保目标端口和源端口处于同一VLAN,并且每条SPAN会话只能有一个目标端口,还可以定义封装方式:

Aiko(config)#monitorsession{session-number}destination{interfaceinterface}[encapsulation{dot1q|isl}]

3.限制要监视的VLAN.可以定义多个VLAN,以逗号或连字符相连.可选:

Aiko(config)#monitorsession{session-number}filtervlan{vlan-list}

配置RSPAN的步骤如下:

1.创建RSPAN专用的VLAN:

Aiko(config)#vlan{vlan-id}

2.定义该VLAN为RSPANVLAN:

Aiko(config-vlan)#remote-span

3.定义源交换机的源端口.对于Catalyst3550交换机,会话数只支持两条,即1和2,还可以定义监听流量的方向,默认监听双向流量:

Aiko(config)#monitorsession{session-number}source{interfaceinterface|vlanvlan-id}[rx|tx|both]

4.定义源交换机的目标端口:

Aiko(config)#monitorsession{session-number}destinationremotevlan{rspan-vlan-id}

5.定义目标交换机的源端口:

Aiko(config)#monitorsession{session-number}destinationremotevlan{rspan-vlan-id}

6.定义目标交换机的目标端口:

Aiko(config)#monitorsession{session-number}destination{interfaceinterface|vlanvlan-id}[rx|tx|both]

三.使用RSPAN监听交换机A连接服务器的端的实例:

交换机A配置如下:

!

vlan925

remote-span

monitorsession1sourceinterfaceFastEthernet1/1both

monitorsession1destinationremotevlan925

!

交换机B配置如下:

!

vlan925

remote-span

!

交换机C配置如下:

!

vlan925

remote-span

monitorsession1sourceremotevlan925

monitorsession1destinationinterfaceFastethernet2/2

!

另实例:

1、Cat2900XL/3500XL

2900XL(config)#interface fastethernet 0/24

//进入接口配置模式下

2900XL(config)#port monitor fastethernet 0/1

//配置f0/1为被监视得端口

2900XL(config)#port monitor fastethernet 0/2

//配置f0/2为被监视得端口

通过上面得配置就可以把进出f0/1和

f0/2两个端口得流量镜像到f0/24

通过

show port monitor可以参看交换机得SPAN配置情况

2、Cat2950/3550/3750

3550(config)#monitor session 1 source interface f0/1 - 3 rx

//指定SPAN session组号为1,源端口为f0/1-f0/3,对进这三个端口的流量

//rx-->指明是进端口得流量,tx-->出端口得流量 both 进出得流量

3550(config)#monitor session 1 destination interface f0/4

//指定监视端口为f0/4

3、Cat4000/6500 with CatOS

set span命令

cat4k#set span 1/2 1/3

//把1/2得流量镜像到1/3

4、Cat4500/6500 with IOS

同2--Cat2950/3550/3750

方法四:VACL

VACL=VLAN ACL=Security ACL

只能在Cat6500上使用

CatOS:

c6509 (enable) set security acl ip MyCap permit tcp any any eq 443

c6509 (enable) set security acl ip MyCap permit tcp any eq 443 any

c6509 (enable) set security acl ip MyCap permit ip any any capture

//排除所有访问443端口的流量,其他流量都是感兴趣的

c6509 (enable) commit security acl MyCap

//定义一个security ACL的name

c6509 (enable) set security acl map MyCap 100,101

//把security ACL应用到vlan 100和101上

c6509 (enable) set security acl capture-ports 3/1

//把capture的流量镜像到3/1端口上

IOS:

c6509(config)# access-list 100 permit ip any any

c6509(config)# vlan access-map MyCap 10

c6509(config-access-map)# match ip address 100

c6509(config-access-map)# action forward capture

c6509(config)# vlan filter MyCap vlan-list 200 , 201

c6509(config)# interface gi3/1

c6509(config-if)# switchport capture

=================================================

先解释一下端口镜像:端口镜像简单的说,就是把交换机一个(数个)端口(源端口)的流量完全拷贝一份,从另外一个端口(目的端口)发

出去,以便网络管理人员从目的端口通过分析源端口的流量来找出网络存在问题的原因。

cisco的端口镜像叫做SWITCHED PORT ANALYZER,简称SPAN(仅在IOS系统中,下同),因此,端口镜像仅适用于以太网交换端口。Cisco的SPAN

分成三种,SPAN、RSPAN和VSPAN,简单的说,SPAN是指源和目的端口都在同一台机器上、RSPAN指目的和源不在同一交换机上,VSPAN可以镜像

整个或数个VLAN到一个目的端口。

配置方法:

1. SPAN

(1) 创建SPAN源端口

monitor session session_number source interface interface-id [, | -] [both | rx | tx]

**session_number,SPAN会话号,我记得3550支持的最多本地SPAN是2个,即1或者2。

**interface-id [, | -]源端口接口号,即被镜像的端口,交换机会把这个端口的流量拷贝一份,可以输入多个端口,多个用“,”隔开,

连续的用“-”连接。

**[both | rx | tx],可选项,是指拷贝源端口双向的(both)、仅进入(rx)还是仅发出(tx)的流量,默认是both。

(2)创建SPAN目的端口

monitor session session_number destination interface interface-id [encapsulation {dot1q [ingress vlan vlan id] | ISL

[ingress]} | ingress vlan vlan id]

**一样的我就不说了。

**session_number要和上面的一致。

**interface-id目的端口,在源端口被拷贝的流量会从这个端口发出去,端口号不能被包含在源端口的范围内。

**[encapsulation {dot1q | isl}],可选,指被从目的端口发出去时是否使用802.1q和isl封装,当使用802.1q时,对于本地VLAN不进行封

装,其他VLAN封装,ISL则全部封装。

2.VSPAN

(1)创建VSPAN源VLAN

monitor session session_number source vlan vlan-id [, | -] rx

**一样的也不说了,基本和SPAN相同,只是接口号变成了VLAN号,而且只能镜像接收的流量。

(2)创建VSPAN目的端口

monitor session session_number destination interface interface-id [encapsulation {dot1q | isl}]

**和SPAN的一样。

3.RSPAN

RSPAN的配置较为复杂,其流程可以这样来看,交换机把要镜像的端口流量复制一份,然后发到本机的一个反射端口上(reflector-port )

,在由反射端口将其通过网络转发到目的交换机中的VLAN上(一般情况下,这个VLAN是专为镜像而设的,不要作为客户端接入所用),再在目

的交换机中配置VSPAN,将该VLAN的流量镜像到目的端口,要注意的是,一旦这种RSPAN被使用,该镜像专用VLAN的信息会被转发到所有的VLAN

主干上,造成网络带宽的浪费,因此要配置VLAN修剪(pruning),另外RSPAN也可以镜像VLAN。

(1)在源交换机上创建RSPAN源端口

**同SPAN或VSPAN

(2)在源交换机上创建VSPAN反射端口和目的VLAN

monitor session session_number destination remote vlan vlan-id reflector-port interface

**vlan-id 目的交换机上转为镜像而设的VLAN

**reflector-port interface源交换机上的镜像端口

(3)在目的交换机上创建VSPAN源VLAN

monitor session session_number source remote vlan vlan-id

**vlan-id就是上面的镜像专用VLAN

(4)在目的交换机上创建VSPAN目的端口

monitor session session_number destination interface interface-id [encapsulation {dot1q | isl}]

**同SPAN

4.其他

(1)端口镜像的过滤,端口镜像是可以做Filter的。

monitor session session_number filter vlan vlan-id [, | -]

**指定源端口进入的流量中,属于哪些VLAN的可以从目的端口发出去。

(2)删除镜像

no monitor session {session_number | all | local | remote}

**session_number指定会话号,all是所有镜像,local是本地镜像,remote是远程镜像。

(3)镜像的目的端口不能正常收发数据,因此不能再作为普通端口使用,可以连接一些网络分析和安全设备,例如装有sniifer的计算机或者Cisco IDS设备。
上一篇: 孜然炒羊肚-——孜然炒羊肚 下一篇: 我在失败中成长作文-作文成长需要失败

优秀文章