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 E

本文介绍了Openstack中安全组的工作原理,强调了安全组如何基于Iptables实现,并探讨了conntrack在连接追踪中的作用。在不使用conntrack-tool时,删除安全组规则可能导致通信未中断的问题,而在引入conntrack-tool后,这些问题得到了解决,实现了更好的租户隔离和连接管理。
最低0.47元/天 解锁文章
2595

被折叠的 条评论
为什么被折叠?



