Openstack安全组与conntrack简介

Openstack中的安全组实现相互信任的虚拟机之间的通信,绑定同一个安全组的虚拟机使用相同的安全策略。安全组作用范围是在虚拟机上,更具体来说是作用在虚拟机的端口而不是网络上。Openstack中安全组基于Iptables实现,由于当前OpenvSwitch(ovs)不能使用iptables rule,所以虚拟机先连接linux bridge,再连接到ovs网桥。参考链接[1]。

使用Iptables时,报文的状态可以归类为四种:NEW ESTABLISEDRELATED INVAILD. Netfilter就是通过conntrack实现连接追踪的。Conntrack是linux的一个内核模块,使用 conntrack entry记录连接的状态信息,具体可参考[2]。

1.   sg without conntrack-tool

图1

Neutron最初实现安全组功能时并没有考虑对conntrack的处理,从而导致一些问题。如图1虚拟机vm1(1.1.1.8)  vm2(1.1.1.9)属于同一子网,位于同一个计算节点,都绑定default安全组,执行vm1 ping vm2后能够ping通。此时删除default安全组中ingress规则保留egress规则,发现vm1 ping vm2仍未中断[3]。

究其原因,ICMP报文到达vm2连接的linux bridge时进入Iptables处理阶段。iptables中vm2对应的i链(参考[4])有一条规则为-mstate --state RELATED,ESTABLISHED -m comment -j RETURN(默认规则) ,表示状态为RELATED ESTABLISHED的连接可以流入vm2。

由于删除ingress规则后,neutron没有对conntrack执行任何操作,外界也没有执行停止vm1 ping vm2的操作,对应的conntrack entry一直存在并且不会过期。所以即使default安全组中已删除ingress规则通信仍未中断。

$ sudo conntrack -L -p icmp

icmp    1 29 src=1.1.1.8 dst=1.1.1.9 type=8 code=0 id=11521 src=1.1.1.9dst=1.1.1.8 type=0 code=0 id=11521 mark=0 use=1

conntrack v1.4.1 (conntrack-tools): 1 flowentries have been shown.

此时如果重新执行vm1 ping vm2,发现这次不能ping通。这次报文仍会进入Iptables的处理,因为default安全组已删除了ingress规则,所以ICMP报文能够流入vm2的条件仍然是要能够满足state为RELATED,ESTABLISHED。

但这次的ICMP报文被认为是NEW状态。查看conntrack发现虽然旧的entry(ID 11521)仍存在,但是重新ping的过程被看作新的连接,对应新的entry (ID 12033),UNREPLIED表明此次连接还未建立。

$ sudo conntrack -L -p icmp

icmp    1 26 src=1.1.1.8 dst=1.1.1.9 type=8 code=0 id=11521 src=1.1.1.9dst=1.1.1.8 type=0 code=0 id=11521 mark=0 use=1

icmp    1 29 src=1.1.1.8 dst=1.1.1.9 type=8 code=0 id=12033 [UNREPLIED]src=1.1.1.9 dst=1.1.1.8 type=0 code=0 id=12033 mark=0 use=1

conntrack v1.4.1 (conntrack-tools): 2 flowentries have been shown.

另外,没有对conntrack处理还造成了租户隔离的问题:如租户1创建了虚拟机vm1(1.1.1.8) vm2(1.1.1.9),如图1;租户2创建相同IP的虚拟机vm3(1.1.1.8) vm4(1.1.1.9)且vm1/2/3/4都在同一计算节点,则vm1/2通信产生的conntrack entry会对vm3/4之间的通信产生影响,参考[5]。

2.   sg with conntrack-tool

相关bug在2014年就提出,直到2015年8月这些问题才得以解决。StableLiberty版本中使用conntrack tool 实现对conntrackentry的管理。

仍然使用图1所示环境,default安全组ingress与egress规则都存在时执行vm1 ping vm2并查看conntrack:

$ sudo conntrack -L -p icmp

icmp    1 29 src=1.1.1.8 dst=1.1.1.9 type=8 code=0 id=10753 src=1.1.1.9dst=1.1.1.8 type=0 code=0 id=10753 mark=0 zone=2use=1

conntrack v1.4.1 (conntrack-tools): 1 flowentries have been shown.

此时删除ingress规则,发现通信会立即中断,这是由于上述conntrack entry被立即删除了。

另外,上述conntrack entry增加了一个zone属性,此属性是为避免[5]中出现的租户隔离问题而设计的。在每个计算节点上,虚拟机所属的网络与local vlan有一一对应关系,zone的值设置为local vlan,实现了conntrack entry的本地租户隔离。

参考链接:

[1]https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux_OpenStack_Platform/4/html/Configuration_Reference_Guide/section_networking-scenarios.html

[2]http://www.iptables.info/en/connection-state.html

[3]https://bugs.launchpad.net/neutron/+bug/1335375

[4]http://blog.csdn.net/yeasy/article/details/21612151?utm_source=tuicool&utm_medium=referral

[5]https://bugs.launchpad.net/neutron/+bug/1359523

时间: 2024-11-14 15:03:12

Openstack安全组与conntrack简介的相关文章

openstack发展历程及其架构简介

1.0 Openstack介绍 OpenStack既是一个社区,也是一个项目和一个开源软件,它提供了一个部署云的操作平台或工具集.其宗旨在于,帮助组织运行为虚拟计算或存储服务的云,为公有云.私有云,也为大云.小云提供可扩展的.灵活的云计算. 2.0 Openstack版本历程 2.1 2010.10 Austin 作为OpenStack第一个正式版本,Austin主要包含两子项目,Swift是对象存储模块,Nova是计算模块;带有一个简单的控制台,允许用户通过web管理计算和存储;带有一个部分实

openstack安全组

openstack环境安全组总是不生效,安全组主要是依靠计算节点的iptables的forward链来生效的,每加一条规则就会根据网卡作为匹配条件,来生成一条iptables的规则.如果没有任何规则,默认是丢弃所有的包.由上面的问题大概猜测到时因为,没有开启包转发功能,所有修改 /etc/sysctl.conf文件 net.ipv4.ip_forward=1 net.ipv4.conf.default.rp_filter=1 net.bridge.bridge-nf-call-ip6tables

005.SQLServer AlwaysOn可用性组高可用简介

一 AlwaysOn 可用性组 1.1 AlwaysOn 可用性组概述 AlwaysOn 可用性组功能是一个提供替代数据库镜像的企业级方案的高可用性和灾难恢复解决方案.SQL Server 2012 中引入了 AlwaysOn 可用性组功能,此功能可最大程度地提高一组用户数据库对企业的可用性. "可用性组"针对一组离散的用户数据库(称为"可用性数据库",它们共同实现故障转移)支持故障转移环境. 一个可用性组支持一组读写主数据库以及一至四组对应的辅助数据库.可使辅助数

51、组播Multicast简介

MySQL组复制(1):组复制技术简介

1.MySQL高可用的背景 数据库的主从复制是一个很实用的功能,但如何保证它的高可用却是一件难事.实现MySQL主从复制高可用的工具,常见的有: (1).MMM:淘汰了,在一致性和高并发稳定性等方面有些问题. (2).MHA:有些人还在用,但也有些问题,也是趋于淘汰的MySQL主从高可用方案. (3).Galera:引领时代的主从复制高可用技术. (4).MariaDB Galera Cluster:MariaDB对Galera的实现. (5).PXC:Percona XtraDB Cluste

Docker简介及基本应用

Docker 前言 1.虚拟化 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器.网络.内存及存储等,予以抽象.转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源.这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制.一般所指的虚拟化资源包括计算能力和资料存储. 在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬

用户和组管理基础

用户和组管理基础 简介 在linux系统中,用户管理是基于用户名和密码的方式进行资源的分配 用户类别: 用户标识:UserID,UID 16bits二进制数字:0-65535 管理员:ID号为0:------只要是为0的就是管理员用户 普通用户:1-65535     系统用户:1-499(CentOS 6),1-999(CentOS 7)     登录用户:500-60000(CentOS6),1000-60000(CentOS7) 名称解析:名称转换     Username <--> U

Create a virtualbox Based CentOS 6 OpenStack Cloud Image

前言: openstack 环境已经部署好了,接下来就是运行实例,运行实例就需要镜像了.镜像的来源分为官方镜像,三方镜像,以及自定义镜像. 官方的镜像不能自动扩容根目录大小 三方镜像嘛--这个看需求吧 自定义镜像,也就是自己动手来做一个镜像.我比较喜欢这种方式,在制作过程中可以学到新东西.由于本人使用的ubuntu 系统已经安装了virtualbox 此例就使用virtualbox 为例. 磁盘格式: openstack 镜像服务支持的虚拟机镜像磁盘格式有 aki 亚马逊 kernel 镜像  

neutron openvswitch agent实现安全组的方法

关于openstack安全组,采用一问一答的形式记录如下 1. 是加载在计算节点的还是网络节点的? 是加载在计算节点的 2. 是使用iptable规则实现的吗? M版的neutron实现了openvswitch 基于流表的防火墙 之前常见的是用iptables实现的,一般会创建neutron-openvswi-XXX链 3. iptables实现的防火墙方法中,添加的规则都是accept,其余的包都是drop的吗? 是的添加的规则一般都在最后默认drop规则的前面return掉.安全组利用ipt