首页 > 技术文章 > 从头搭建Openstack运行环境(四)--虚机安全组

run4life 2016-03-01 22:33 原文

通过前面三篇《从头搭建Openstack运行环境》的介绍,我们已经搭建出了一套基本的Openstack运行环境,此环境包含以下部分:

 

5.多租户虚机测试场景分析与搭建

5.1多租户场景包含元素:

1)网络节点和计算节点

2)GRE隧道网络和vlan网络

3)三个租户环境和虚机

    租户1 tenant1    虚机2台    

    租户2 tenant2    虚机1台

    租户3 tenant3    虚机1台

 

从以上场景可以设计出以下的功能测试场景:

1)虚机添加安全组

2)虚机添加floating

3)两个租户网络添加路由

4)两个租户网络添加路由后配置防火墙规则

5)两个租户下的虚机通过floating ip实现路由

6)租户下多个虚机创建loadbalance的VIP

7)对租户下loadbalance的VIP分配floating ip

下面会对此7个配置场景进行说明

 

5.虚机安全组

说到虚机安全组规则和实现原理有很多资料可以学习,其中最重要的就是iptables规则的配置,可以自己进行学习。下面重点讲一下具体配置

虚机安全组在Openstack里有两种实现方式:

1)通过nova配置实现安全组

2)通过neutron配置实现安全组

我们分别进行一下配置介绍。

 

5.1 nova的安全组配置

5.1.1配置准备

1)虚机安全组规则通过linux bridge桥设备来实现iptables规则,首先在计算节点内核打开bridge的iptable规则

#open bridge iptables function
sysctl -w net.bridge.bridge-nf-call-arptables=1
sysctl -w net.bridge.bridge-nf-call-ip6tables=1
sysctl -w net.bridge.bridge-nf-call-iptables=1

 

2)清空计算节点iptables规则

iptables -F
iptables -X
iptables -Z

5.1.2配置nova安全组基础规则中,选取前面创建的tenant3的虚机vm04(10.0.2.84)为例

nova安全组只匹配进入虚机的流量,出虚机流量不检查。并且安全组规则是以虚机为单位,此处可以看到是以虚机ip地址为iptables的配置依据。

安全组的iptables规则涉及iptables的三个链INPUT、OUTPUT和FORWARD

iptables -t filter -N nova-compute-FORWARD
iptables -t filter -N nova-compute-INPUT
iptables -t filter -N nova-compute-OUTPUT
iptables -t filter -N nova-compute-inst-04
iptables -t filter -N nova-compute-local
iptables -t filter -N nova-compute-provider
iptables -t filter -N nova-compute-sg-fallback
iptables -t filter -N nova-filter-top
iptables -t filter -A INPUT -j nova-compute-INPUT
iptables -t filter -A FORWARD -j nova-filter-top
iptables -t filter -A FORWARD -j nova-compute-FORWARD
iptables -t filter -A OUTPUT -j nova-filter-top
iptables -t filter -A OUTPUT -j nova-compute-OUTPUT
iptables -t filter -A nova-compute-FORWARD -s 0.0.0.0/32 -d 255.255.255.255/32 -p udp -m udp --sport 68 --dport 67 -j ACCEPT
iptables -t filter -A nova-compute-INPUT -s 0.0.0.0/32 -d 255.255.255.255/32 -p udp -m udp --sport 68 --dport 67 -j ACCEPT
iptables -t filter -A nova-compute-inst-04 -m state --state INVALID -j DROP
iptables -t filter -A nova-compute-inst-04 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A nova-compute-inst-04 -j nova-compute-provider
iptables -t filter -A nova-compute-inst-04 -s 10.0.2.3/32 -p udp -m udp --sport 67 --dport 68 -j ACCEPT
iptables -t filter -A nova-compute-inst-04 -j nova-compute-sg-fallback
iptables -t filter -A nova-compute-local -d 10.0.2.84/32 -j nova-compute-inst-04
iptables -t filter -A nova-compute-sg-fallback -j DROP
iptables -t filter -A nova-filter-top -j nova-compute-local

 

通过以上配置此时,虚机的网络访问能力 = 基本网络能力(DHCP访问、允许已建立的连接)。也就是说虚机此时是无法被网络访问,比如 ping,ssh 都无法连接。

 

5.1.3添加nova安全组规则(实现访问虚机ping和ssh)

iptables -t filter -I nova-compute-inst-04 5 -p tcp -m tcp --dport 22 -j ACCEPT
iptables -t filter -I nova-compute-inst-04 5 -p icmp -j ACCEPT
iptables -t filter -A nova-compute-inst-04 5 -s 10.0.2.0/24 -j ACCEPT

5.2 neutron的安全组配置

5.2.1配置准备

1)虚机安全组规则通过linux bridge桥设备来实现iptables规则,首先在计算节点内核打开bridge的iptable规则

#open bridge iptables function
sysctl -w net.bridge.bridge-nf-call-arptables=1
sysctl -w net.bridge.bridge-nf-call-ip6tables=1
sysctl -w net.bridge.bridge-nf-call-iptables=1

2)清空计算节点iptables规则

iptables -F
iptables -X
iptables -Z

5.2.2配置neutron安全组基础规则中,选取前面创建的tenant3的虚机vm04(10.0.2.84)为例

neutron安全组匹配进入和发出虚机的两个方向流量,并且安全组规则是以port为依据来进行配置,此处可以看到是以虚机的tap设备为iptables的创建基础。

安全组的iptables规则涉及iptables的三个链INPUT、OUTPUT和FORWARD

iptables -t filter -N neutron-filter-top
iptables -t filter -N neutron-openvswi-FORWARD
iptables -t filter -N neutron-openvswi-INPUT
iptables -t filter -N neutron-openvswi-OUTPUT
iptables -t filter -N neutron-openvswi-i04
iptables -t filter -N neutron-openvswi-local
iptables -t filter -N neutron-openvswi-o04
iptables -t filter -N neutron-openvswi-s04
iptables -t filter -N neutron-openvswi-sg-chain
iptables -t filter -N neutron-openvswi-sg-fallback
iptables -t filter -A INPUT -j neutron-openvswi-INPUT
iptables -t filter -A FORWARD -j neutron-filter-top
iptables -t filter -A FORWARD -j neutron-openvswi-FORWARD
iptables -t filter -A OUTPUT -j neutron-filter-top
iptables -t filter -A OUTPUT -j neutron-openvswi-OUTPUT
iptables -t filter -A neutron-filter-top -j neutron-openvswi-local
iptables -t filter -A neutron-openvswi-FORWARD -m physdev --physdev-out tap04 --physdev-is-bridged -j neutron-openvswi-sg-chain
iptables -t filter -A neutron-openvswi-FORWARD -m physdev --physdev-in tap04 --physdev-is-bridged -j neutron-openvswi-sg-chain
iptables -t filter -A neutron-openvswi-INPUT -m physdev --physdev-in tap04 --physdev-is-bridged -j neutron-openvswi-o04
iptables -t filter -A neutron-openvswi-i04 -m state --state INVALID -j DROP
iptables -t filter -A neutron-openvswi-i04 -m state --state RELATED,ESTABLISHED -j RETURN
iptables -t filter -A neutron-openvswi-i04 -s 10.0.2.3/32 -p udp -m udp --sport 67 --dport 68 -j RETURN
iptables -t filter -A neutron-openvswi-i04 -j neutron-openvswi-sg-fallback
iptables -t filter -A neutron-openvswi-o04 -p udp -m udp --sport 68 --dport 67 -j RETURN
iptables -t filter -A neutron-openvswi-o04 -j neutron-openvswi-s04
iptables -t filter -A neutron-openvswi-o04 -p udp -m udp --sport 67 --dport 68 -j DROP
iptables -t filter -A neutron-openvswi-o04 -m state --state INVALID -j DROP
iptables -t filter -A neutron-openvswi-o04 -m state --state RELATED,ESTABLISHED -j RETURN
iptables -t filter -A neutron-openvswi-o04 -j neutron-openvswi-sg-fallback
iptables -t filter -A neutron-openvswi-s04 -s 10.0.2.84/32 -m mac --mac-source 52:54:00:12:34:63 -j RETURN
iptables -t filter -A neutron-openvswi-s04 -j DROP
iptables -t filter -A neutron-openvswi-sg-chain -m physdev --physdev-out tap04 --physdev-is-bridged -j neutron-openvswi-i04
iptables -t filter -A neutron-openvswi-sg-chain -m physdev --physdev-in tap04 --physdev-is-bridged -j neutron-openvswi-o04
iptables -t filter -A neutron-openvswi-sg-chain -j ACCEPT
iptables -t filter -A neutron-openvswi-sg-fallback -j DROP

 

虚机的网络访问能力 = 基本网络能力(DHCP访问、允许已建立的连接、防 IP 欺骗)。也就是说虚机此时是无法网络访问和被网络访问,比如 ping,ssh 都无法连接。

 

5.2.3添加neutron安全组规则(实现访问虚机ping、ssh和http)

iptables -t filter -I neutron-openvswi-o04 6 -p icmp -j RETURN
iptables -t filter -I neutron-openvswi-i04 4 -p icmp -j RETURN
iptables -t filter -I neutron-openvswi-o04 6 -p tcp -m tcp --dport 22 -j RETURN
iptables -t filter -I neutron-openvswi-i04 4 -p tcp -m tcp --dport 22 -j RETURN
iptables -t filter -I neutron-openvswi-i04 4 -p tcp -m tcp --dport 80 -j RETURN
iptables -t filter -I neutron-openvswi-o04 6 -p tcp -m tcp --dport 80 -j RETURN

5.3总结

通过以上介绍了nova和neutron的安全组功能配置规则,对于iptables的理解还是需要比较深入的,如果想完全理解iptables配置的思路请阅读参考资料里SammyLiu的系列文章中安全组的章节,谢谢。

 

 


参考资料:

SammyLiu的《Neutron 理解》系列 http://www.cnblogs.com/sammyliu/p/4622563.html

深入理解Neutron -- OpenStack 网络实现 https://www.gitbook.com/book/yeasy/openstack_understand_neutron/details

 

作者简介:赵俊峰,现为北京新云东方系统科技有限责任公司 云计算部Openstack开发工程师。主要从事Power和x86混合环境下Openstack相关计算、网络、存储相关服务软件开发和系统架构设计工作。

推荐阅读