Openstack安全组机制浅析(基于linux-bridge和iptables实现)(1)

举报
kehaar 发表于 2017/11/25 17:23:46 2017/11/25
【摘要】 1、安全组是什么?Openstack中,neutron提供了安全组(security-group)机制,用来提供对port(虚拟机网卡)的通信进行控制的能力。安全组的特点是有计算节点进行包过滤,只与L2实现耦合,不依赖三层网络机制(与ACL等机制的最主要区别就在这里),即使在同一个子网内部,安全组也可以提供通信控制能力。2、安全组是如何实现的?在较早版本中,由于OVS无法直接绑定iptables,

1、安全组是什么?

Openstack中,neutron提供了安全组(security-group)机制,用来提供对port(虚拟机网卡)的通信进行控制的能力。

安全组的特点是有计算节点进行包过滤,只与L2实现耦合,不依赖三层网络机制(与ACL等机制的最主要区别就在这里),即使在同一个子网内部,安全组也可以提供通信控制能力。


2、安全组是如何实现的?

在较早版本中,由于OVS无法直接绑定iptables,因此在OVS二层实现中,为了使用安全组规则,虚拟机并非直接连接到OVS,而是先经过一个linux网桥,再连接到OVS(现在已经可以使用直接由OVS实现安全组规则,本文暂不讨论这种场景)


在虚拟机运行的计算节点上查询iptables规则,可以看到如下的规则,显示的两条规则中引用的chain就是该网卡的入口和出口的安全组规则的chain:

sg0.PNG

其中以neutron-openvswi-i开头的是(对虚拟机来说的)入规则,neutron-openvswi-o开头的是(对虚拟机来说的)出规则(注意后面的match部分的inout是相对于网桥来说的,因此与从虚拟机角度看到的出入方向相反)


使用iptables -n -L [chain],查看相应的规则:

出规则:

sg1.PNG

入规则:

sg2.PNG


下面分析各链中的规则:

出规则:


sg3.PNG

此条为将所有源端口为68而目的端口为67的UDP包放行(RETURN回neutron-openvswi-sg-chain链后最后ACCPET),源端口为68而目的端口为67的UDP包为DHCP客户端的DHCP请求,此规则即是允许虚拟机向外发送DHCP请求。

============================================================================================

sg4.PNG

此条引用了另一个链,该链内容为:

sg5.PNG

即是只允许虚拟机用系统分配的IP的MAC向外发包,禁止修改IP和伪造MAC。

如果使用以下命令增加允许通过的mac-ip对的话,则会在本链增加规则:

neutron port-update [port_id] --allowed_address_pairs type=dict list=true mac_address=[mac地址],ip_address=[IP地址/掩码]

============================================================================================


sg6.PNG

此条为将所有源端口为67而目的端口为68UDP包丢弃,源端口为68而目的端口为67UDP包为DHCP服务端的DHCP相应,本规则即是禁止虚拟机对外提供DHCP服务。

============================================================================================

sg7.PNG

这两条为丢弃INVALID状态的包,而接受RELATED和ESTABLISHED状态的包,这两条是实现基于连接状态的防火墙,基于之前的包的状态判断后面的包的处理。

============================================================================================

sg8.PNG

本条为放行所有包,对应openstck安全组的默认规则(出方向全放行)

============================================================================================

sg9.PNG

此为经过上面所有规则后,未被匹配的包被转发到此链并丢弃

sg10.PNG

(未完待续)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。