Open vSwitch--ovs snort入侵检测

来源:互联网 发布:excel矩阵 进度表 编辑:程序博客网 时间:2024/05/20 11:34

计算,存储,网络,安全,是构建任何大型数据中心都绕不过去的四个问题。云也不例外。在这个风起云涌的云时代,各厂商赛马般发布层出不穷的新技术,着实让我们目不暇接。很多人昨天刚玩过Xen,今天看到Redhat宣称KVM是其新的战略方向,又忍不住把KVM拿来折腾一番。大家习惯性地把注意力都放在了“计算”上,积累了不少“服务器虚拟化”的经验,却不知不觉冷落了其余三个方面。国外同行们热议Software Defined NetworkSDN)和OpenFlow这些因为云而瞬间火爆的技术时,我们还卯足了劲儿一头扎进服务器虚拟化中不愿出来。


Open vSwitch的目标,是做一个具有产品级质量的多层虚拟交换机。通过可编程扩展,可以实现大规模网络的自动化(配置、管理、维护)。它支持现有标准管理接口和协议(比如netFlowsFlowSPANRSPANCLILACP802.1ag等,熟悉物理网络维护的管理员可以毫不费力地通过Open vSwitch转向虚拟网络管理)。

 同类产品VMwarevDSvSphere Distributed VirtualSwitch),CiscoNexus 1000V都是收费的。更重要的是,虽然免费,其产品质量却深得信赖。在2010Open vSwitch 1.0.0发布之前,Citrix就宣布在XenServer中将其作为默认组件。


 

 

图一:Open vSwitch示意图

官网的描述精准而抽象,来点通俗的,Open vSwitch是一个由Nicira Networks主导的开源项目,通过运行在虚拟化平台上的虚拟交换机,为本台物理机上的VM提供二层网络接入, 跟云中的其它物理交换机一样工作在Layer 2层。Open vSwitch充分考虑了在不同虚拟化平台间的移植性,采用平台无关的C语言开发。


1:

Linux Kernel自带的桥接模块就可以很好的解决这一问题。原理上讲,正确配置桥接,并把VMvirtual nic连接在桥接器上就OK啦。很多虚拟化平台的早期解决方案也是如此,自动配置并以向用户透明的方式提供虚拟机接入。

Open vSwitchWHY-OVS这篇文章中,第一句话就高度赞扬了Linux bridge

We love the existing network stack in Linux.  It is robust, flexible, and feature rich.  Linux already contains an in-kernel L2 switch (the Linux bridge) which can be used by VMs for inter-VM communication.  So, it is reasonable to ask why there is a need for a new network switch.


2:


如果没有网络虚拟化技术的支持,管理员只能看到被桥接的物理网卡,其上川流不息地跑着nVM的数据包。仅凭物理交换机支持,管理员无法区分这些包属于哪个OS哪个用户,只能望云兴叹乎?简单列举常见的几种需求,Open vSwitch现有版本很好地解决了这些需求。

   需求一:网络隔离。物理网络管理员早已习惯了把不同的用户组放在不同的VLAN中,例如研发部门、销售部门、财务部门,做到二层网络隔离。Open vSwitch通过在host上虚拟出一个软件交换机,等于在物理交换机上级联了一台新的交换机,所有VM通过级联交换机接入,让管理员能够像配置物理交换机一样把同一台host上的众多VM分配到不同VLAN中去;

   需求二:QoS配置。在共享同一个物理网卡的众多VM中,我们期望给每台VM配置不同的速度和带宽,以保证核心业务VM的网络性能。通过在Open vSwitch端口上,给各个VM配置QoS,可以实现物理交换机的traffic queuingtraffic shaping功能。

---前两项是必选!

   需求三:流量监控,Netflow,sFlow。物理交换机通过xxFlow技术对数据包采样,记录关键域,发往Analyzer处理。进而实现包括网络监控、应用软件监控、用户监控、网络规划、安全分析、会计和结算、以及网络流量数据库分析和挖掘在内的各项操作。例如,NetFlow流量统计可以采集的数据非常丰富,包括:数据流时戳、源IP地址和目的IP地址、 源端口号和目的端口号、输入接口号和输出接口号、下一跳IP地址、信息流中的总字节数、信息流中的数据包数量、信息流中的第一个和最后一个数据包时戳、源AS和目的AS,及前置掩码序号等。

xxFlow因其方便、快捷、动态、高效的特点,为越来越多的网管人员所接受,成为互联网安全管理的重要手段,特别是在较大网络的管理中,更能体现出其独特优势。

没错,有了Open vSwitch,作为网管的你,可以把xxFlow的强大淋漓尽致地应用在VM上!

   需求四:数据包分析,Packet Mirror。物理交换机的一大卖点,当对某一端口的数据包感兴趣时(for trouble shooting , etc),可以配置各种spanSPAN, RSPAN, ERSPAN),把该端口的数据包复制转发到指定端口,通过抓包工具进行分析Open vSwitch官网列出了对SPAN, RSPAN, and GRE-tunneled mirrors的支持。

Nicira把对Openflow的支持引入了Open vSwitch。引入以下模块:

·         ovs-openflowd  ---  OpenFlow交换机;

·         ovs-controller  ---OpenFlow控制器;

·         ovs-ofctl  --- Open Flow 的命令行配置接口;

·         ovs-pki  --- 创建和管理公钥框架;

·         tcpdump的补丁 --- 解析OpenFlow的消息


==我们对vlan的支持还没有做到,其实在安全方面也是可以做的


Sflow:

1.下面先来关注几个问题:

(1) Sflow是什么呢? 与sflow相应的有一个Netflow。 sFlow和Netflow聽起來很相似,但在骨子裡卻不一樣。Netflow會針對所有流經的網路封包去取得其特徵,包含Source IP
address、Destination IP address、Source
port for UDP or TCP, 0 for other protocols、Destination
port for UDP or TCP, type and code for ICMP, or 0 for other protocols、IP protocol、Ingress interface (SNMP ifIndex)、IP Type of Service這些資訊。 
由於Netflow會對所有流經的封包進行處理,若網路流量極大時,Netflow所提供的資料量亦會隨之增加,若資料量太大,後端分析引擎可能會不堪負荷,進而影響資料判讀時的正確性。 
sFlow的作法和Netflow不同,sFlow以取樣的方式取出資料的摘要,使用者可以自訂其取樣大小及取樣週期,即使流經大量網路流量,但sFlow經取樣後的資料相對於Netflow而言會大量的減少,如此一來就可以兼顧資料正確性並確保後端分析引擎處理能力。 
在實務上,sFlow較常運用於高速網路的環境,也是因為其具有此特性的關係。sFlow提供的資料格式在之後實作的階段會加以展示,在此不多作說明。 
在實作時,會遭遇到許多的困難,這是因為sFlow僅在部分設備上提供,也不像Netflow,在Linux中可使用nfdump套件來產生符合其格式的流量。 

(2)  是不是open
vswitch支持了sflow就不支持了netflow?不是,在其官方的介绍里(上文的官方图片),可以看到也是支持netflow的。目前我的做法是,使用sflowtool将sflow转换为netflow。

2.配置实例:

目标: 流量导出,并可以使用snort,tcpdump对流量进行监控和分析。

配置图如下所示:

18144416_IC9r

在208服务器上安装xen和openvswitch,并启动两个虚拟机VM1,VM2。不在赘述。

(1)  
配置sflow流量导出

#!/bin/sh

COLLECTOR_IP=172.16.18.18

COLLECTOR_PORT=6343

AGENT_IP=eth1

HEADER_BYTES=128

SAMPLING_N=2

POLLING_SECS=1

ovs-vsctl –
–id=@sflow create sflow agent=${AGENT_IP}
target=\”${COLLECTOR_IP}:${COLLECTOR_PORT}\” header=${HEADER_BYTES}
sampling=${SAMPLING_N} polling=${POLLING_SECS} — set bridge ovsbr0
sflow=@sflow

这是配置sflow的一个脚本,现在解释其中的意思:

COLLECTOR_IP是指进行流量监控的机器,本次实例中是指172.16.18.18

COLLECTOR_PORT=6343 是指把流量发到COLLECTOR_IP的6343端口

AGENT_IP=eth1是指把流量从本地的eth1端口发出去

并指定每1秒poolling一次,每次的取样频率为64(即,每隔64个Packet取样一次)。

(2)  
转换sflow

现在让VM1(ip:x.x.x241) ping VM2(ip: x.x.x242)

执行上面那个脚本,在18.18机器上用snort会看到206发到18.18的包,而不会看到241和242之间通信的数据包。因为241和242通信的数据被sflow封装起来之后再发给18.18.如果想看到这个数据,需要将sflow转换为snort和tcpdump的格式,具体命令如下:

$sflowtool
–p 6343 –t | snort –r –

或者

$sflowtool
–p 6343 –t | tcpdump –X –r -

(3)  
sflowtool的使用:

-f可以转发到另一台机器上

$sflowtool  –p 6343 –t –f x.x.x.x/6343

-c可以将sflow转换为netflow

其他的使用信息,参见 man sflowtool

 



0 0