防火墙

防火墙是避免网络信息基础设施免受复杂网络环境中安全攻击的必要设施。高效的防火墙则更需要实时跟踪来往于不同网络设备间的各类网络连接,即“有状态防火墙”。对于实际的硬件物理网络基础设施需要防火墙,对于虚拟网络设备,openstack在这样的云平台亦需要同样的防火墙进行网络保护。

在Openstack中,防火墙由“Security Group”和“FWaas”两大服务组成。其中Security Group在port级别提供对VM网络通信的访问控制。而Fwaas则运行在vrouter上在subnet的边界控制子网间的L3和L4流量。简而言之,“Security Group”保护port,“FWaas”保护subnet。

Openstack下的“Security Group”不仅保护租户VM,使其避免受到无价值数据流的影响,同时还限制租户VM,避免其主动发起ARP spoofing,DHCP spoofing等不安全网络行为。实际定位到底层,“Security Group”可以通过iptables和ovs 流表两种方式实现。本文将重点讲述基于OVS 流表实现的安全组(Security Group)。

OVS Conntrack概述

无状态的防火墙只能通过静态的网络元组来过滤,阻拦,放行数据报文。这里的静态网络元组包括IP地址,端口,网络协议。无状态防火墙并不关心当前网络连接处于何种状态。相较于无状态防火墙,有状态防火墙增加了对当前网络连接状态的识别,同步使用静态的网络元祖对数据报文进行过滤,阻拦,放行。增加的识别标志在一定程度上消耗系统资源,但更加严格的规则却更能保障网络更加安全。

网络连接状态的识别通常是由CT模块(connection tracker)实现的。在linux内核中,CT是由conntrack实现。从OVS 2.5起,开始支持conntrack,并在openflow中体现相关CT状态的识别与处理。Openstack则从M版开始,使用OVS的新特性,来实现“有状态防火墙”中的“Security Group”功能。

从OVS提供的CT功能简图2来看,相对于原有流表处理,无非增加了提交连接数据包进入CT模块,标记连接状态,用于后续流表查询连接状态,匹配数据报文进行指定处理的过程。


下图列举了OVS实现的openflow 中新增的CT相关字段。(有删减,仅列举了后续流表分析时用到的字段)

这里需要重点解释下rel,inv,zone=value(ct_zone)这三条项目。

rel,即related。这里举个典型的例子描述下related数据包。当VM A ping 某外网IP地址B,发出一个ICMP Echo Request报文,当该Request报文到达路由器时,路由器判定外网IP地址不可达,回送一个ICMP Network Unreachable报文。那么这个ICMP Network Unreachable报文与先前发出的ICMP Echo Request报文就是存在related关系。因为对于ICMP Echo Request报文而言,只有ICMP Echo Reply报文是与它存在reply(rpl)关系的。

inv,即invalid。如果存在下述几种情况:linux内核中L3/L4协议处理程序不可用或者未加载;nf_conntrack_ipv4或nf_conntrack_ipv6模块没有加载;L3/L4协议判定数据包非法;数据包本身报文长度与协议本身不匹配,那么该数据包将被置位inv。例:UDP奇数字节报文,被某型网卡驱动末位padding 0,但未增加IP头部内长度信息,也未增加UDP头部内长度信息,导致该报文在OVS CT中判定inv,最终drop导致通信与预期不符。

通过查询系统连接跟踪条目,如图4所示,可知协议类型,源IP,目的IP,源端口,目的端口这5项元组共同构成了识别一条连接跟踪的索引。在openstack环境中,会有一定概率存在不同项目下的VM,使用相同网段的子网IP,且恰好被调度到同一台宿主机。在极其偶然的情况下这两台VM恰好使用同样的协议,同样的源端口去访问同一个目的IP的同一个目的端口。如果不加任何隔离处理必将导致连接跟踪条目的重叠冲突。

zone=value(ct_zone),很好的处理了这种冲突。zone可以称之为隔离连接跟踪条目的namespace。不同zone中的连接跟踪条目即使协议类型,源IP,目的IP,源端口,目的端口完全一致,也不会存在冲突。在Security Group的OVS驱动中,每条连接在提交至CT模块时,zone均被指定为该网络连接所处network在本节点上local vlan tag。(此处network为neutron下的network模型)

安全组相关特性

当一个port不添加任何安全组信息时,只有匹配该port的ARP报文,DHCP报文,和已建立的连接才会被初始化时下发的流表规则放行。当然,关闭port的port_security_enabled属性可以屏蔽anti ARP spoofing和anti DHCP spoofing流表规则的下发。Neutron中的一些特殊类型port,例如DHCP port,gateway port等被认为是security port,自然也是关闭port_security_enabled属性。如果需要在port上允许其他自定义的IP,MAC网络包的流通,也可以通过port的allowed_address_pairs添加相应信息。被添加的IP,MAC会在下发安全组规则时作为可信任的地址信息被填入流表。

当安全组A的一条ingress规则通过remote group id指向了安全组B,那么代表着所有通过安全组B的流量才能匹配这条ingress规则。也即意味着只有绑定了绑定了安全组B的port发出的流量才能匹配这条ingress规则。

OVS安全组流表分析

以“目的IP192.168.0.0/24目标端口22协议TCP出向放行”,“任意IP目标端口80协议TCP入向放行”两条安全组规则为例,分析流量具体经过的流表,如下图所示。

OVS与iptables对比

不使用OVS情况下,Linux内核的连接跟踪模块仅限于IP协议层(L3)的Linux内核防火墙(iptables)使用。而实际VM流量从tap口流出时已经是L2层报文。因此额外添加了一层Linux bridge,配合ebtables,处理原有L2层报文后上送至iptables,从而在iptables中执行连接跟踪,所有Security Group规则也被转换成具体的iptables规则,配合连接状态,实现状态防火墙的功能。经过筛选处理后的报文再通过veth从Linux bridge流向br-int,执行外部交换与路由。

对比OVS与iptables实现的状态防火墙,多一层虚拟网络设备就多一次处理,这里必然导致多一重性能损耗。如图7所示,在Security Group 规则数量庞大的情况下,性能消耗则更加明显。

原文链接:http://www.99cloud.net/10672.html%EF%BC%8F

OpenStack OVS实现安全组(五)相关推荐

  1. OpenStack OVS GRE/VXLAN

    https://www.jianshu.com/p/0b52de73a4b3 OpenStack OVS GRE/VXLAN网络 学习或者使用OpenStack普遍有这样的现象:50%的时间花费在了网 ...

  2. OpenStack OVS GRE/VXLAN网络

    http://blog.sina.com.cn/s/blog_6de3aa8a0101pfgz.html 学习或者使用OpenStack普遍有这样的现象:50%的时间花费在了网络部分:30%的时间花费 ...

  3. OpenStack OVS防火墙驱动程序

    OVS驱动程序与当前的iptables防火墙驱动程序具有相同的API接口,将安全组和端口的状态保留在防火墙内.创建类"SGPortMap"以保持防火墙状态的一致,并负责从端口映射到 ...

  4. 安全组五元组规则介绍

    安全组四元组规则的局限 五元组是通信术语.通常是指源IP地址,源端口,目的IP地址,目的端口和传输层协议.在云计算中通常用五元组来描述一个安全组规则.阿里云的安全组规则在设计之初做了简化,只支持四元组 ...

  5. openstack详解(十五)——openstack Nova节点基本原理

    今天继续给大家介绍Linux运维相关知识,本文主要内容是openstack Nova节点基本原理. 一.Openstack Nova节点简介 Nova是openstack中最早出现的模块之一,主要是为 ...

  6. 【JZOJ4817】【NOIP2016提高A组五校联考4】square

    题目描述 输入 输出 样例输入 3 4 1 1 0 1 0 1 1 0 0 1 1 0 5 1 1 2 3 2 1 3 2 3 2 3 4 1 1 3 4 1 2 3 4 样例输出 1 1 1 2 2 ...

  7. 【NOIP2016提高A组五校联考2】running

    题目 小胡同学是个热爱运动的好孩子. 每天晚上,小胡都会去操场上跑步,学校的操场可以看成一个由n个格子排成的一个环形,格子按照顺时针顺序从0 到n- 1 标号. 小胡观察到有m 个同学在跑步,最开始每 ...

  8. 【JZOJ4811】【NOIP2016提高A组五校联考1】排队

    题目描述 输入 输出 样例输入 5 4 1 2 1 3 3 4 3 5 1 4 2 4 1 2 2 5 样例输出 3 1 1 2 数据范围 样例解释 解法 可推知原树可以转换为一个序列,即优先序列: ...

  9. 随机抽取学号的java程序_学生求大神带,在线等急把四十个人随机分成八个组每组五人,输入...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 public class Demo { public static void main(String[] args) { int group[]=getG ...

最新文章

  1. 将Mongodb部分数据导入mysql数据库
  2. Java基础day10
  3. python progressbar print_python print 进度条的例子
  4. UNIX系统基本结构
  5. 综合影响力模型InfG算法
  6. python中去除空格用什么函数_python中用什么函数去掉空格
  7. 计算机 不识u盘,电脑uefi不识别u盘怎么办
  8. Android系统架构及生态链
  9. 朋友圈可以修改可见范围了
  10. 调用百度Api实现音频转写
  11. 淘淘商城项目---8.5
  12. 打瓶颈,破性能,性能大牛教你怎么玩转性能测试
  13. Python绘图:使用Basemap绘制全球地形图
  14. 「SDOI 2008」山贼集团
  15. 综合评价与决策方法01——理想解法
  16. 物联网概论(IoT)_Chp7 物联网数据与计算/Google大数据/云计算
  17. 普元应用服务器软件AppServer V7版本正式发布
  18. Android开发规范 (一)
  19. 2019 11 14
  20. 读书笔记-《版面设计的原理》

热门文章

  1. python创建打开文件-Python文件处理:创建、打开、追加、
  2. python while循环语句-Python
  3. python可以用来做什么-Python 学会之后可以用来干嘛的?
  4. LeetCode Construct Quad Tree(dfs)
  5. LeetCode Battleships in a Board
  6. 用bat实现自启动程序
  7. java中的内部接口
  8. 题目1172:哈夫曼树
  9. 题目1166:迭代求立方根
  10. CF 976F 递增容量最大流