作者:小菜一蝶2502902341 | 来源:互联网 | 2014-05-27 20:14
OpenStack的网络组件已经从Quantum更名为Neutron了。之前Quantum就有一个安全组的实现,它运行在每一个计算节点上,能够做到:1)过滤进入到计算节点上虚机的流量2)过滤从虚机出来的流量(nova-network并不能实现这一点)3)过滤虚机之间的流量安全组
OpenStack的网络组件已经从Quantum更名为Neutron了。之前Quantum就有一个安全组的实现,它运行在每一个计算节点上,能够做到:
1)过滤进入到计算节点上虚机的流量
2)过滤从虚机出来的流量(nova-network并不能实现这一点)
3)过滤虚机之间的流量
安全组的一般用法及实现框图如下:
$nova secgroup-create mygroup description
$nova secgroup-add-rule mygroup tcp 22 22
192.168.1.0/24
$nova boot --flavor 1 --image
f16f1d2d-71d6-41b7-98a5-319f142d61f5--security_groups mygroup
i1
上述一个安全组由一系列的iptable
rule组成,rule都是针对soure/dest ip及tcp port的,它不能像下一代的防火墙一样来表达应用特性像audited
rules,也不能提供边缘防火墙的特性。所以在Neutron提供L4/L7层框架之际,也将推出了FWaaS服务(https://docs.google.com/document/d/1PJaKvsX2MzMRlLGfR0fBkrMraHYF0flvl0sqyZ704tA/edit?pli=1)。
在FWaaS中,tenant可以创建多个Firewall
instances,而每一个virtual firewall instance和多个Firewall
Policies关联,每个firewall policies由多个Firewall
rules按序组成。不能直接应用一个rule,它必须先加入到一个policy中,因为它需要先审计。如下图:
多层防火墙的应用场景如下图:
Neutron L3 agent运行在gateway
host上,它通过linux的namespace特性实例化多个neutron
router,一个tenant能用多个router。见下图,router中的qr-XXX虚拟接口用于和tenant网络相连,qg-XXX虚拟接口用于跟外部网络相连,防火墙服务应该是过滤出入tenant网络的所有流量,所以firewallpolicy应该是应用在qr-XXX虚拟接口上(iptables出口rule中添加”-oqr-+”
a即可,入口规则添加”-iqr-+”即可),如果对所以tenant网络都适用的话可以运用在qg-XXX接口上(但havana的这一版本不会实现这一点,并且也不会实现Zones的概念,一组像上面的qr-XXX接口可以组成一个Zone,也不会检查address
sppofing)。所以防火墙规则不仅应该像之前的安全组那个运用到计算节点上,也应该运用在相应的tenant'srouter的主机相应的namespace下(这即是所谓的边缘防火墙规则).
参考实现将会有4个chains,出和入各一个,ipv4和ipv6各一个。:
所以相应地在FWaaSAgent中会有几个方法:
create_firewall(apply_list,
fireall),fireall是指一组上面的防火墙规则,apply_list指一些networknamespace
update_firewall(apply_list, fireall)
delete_firewall(apply_list, fireall)
关于将上面的firewallinstance在哪里应用到VM应涉及到L4/L7服务框架了。以前Neutron只有一级插件结构(像OVS插件,像LinuxBridge插件),但现在引入了L4/L7层服务框架之后变成了两层,即实现了在一个核心插件(像OVS插件)下再能添加若干个服务(像LBaaS,像FWaaS)。可参见:https://docs.google.com/document/d/1iLzieNKxM7xip_lRidmalAhF_6-Yf1b_cePF4yeAnkQ/edit?pli=1,