zoukankan      html  css  js  c++  java
  • 从头搭建Openstack运行环境(四)虚机安全组

    通过前面三篇《从头搭建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相关计算、网络、存储相关服务软件开发和系统架构设计工作。

  • 相关阅读:
    day23 笔记
    iframe子页面与父页面通信
    js格式化时间
    自定义滚动条样式
    表格隔行换色
    css除第一个子元素的其他子元素的4种方法,超实用!
    子div在父div里居中
    红橙黄绿蓝靛紫-RGB-十六进制
    阿里巴巴矢量图标库 字体图标的下载与使用
    calc属性不生效
  • 原文地址:https://www.cnblogs.com/run4life/p/5232781.html
Copyright © 2011-2022 走看看