Neutron网络之防火墙

qkylin

贡献于2014-02-18

字数:0 关键词: 路由器/防火墙

Neutron网络之防火墙 负载均衡,防火墙和VPN都是目前Neutron项目在开发的网络服务。虽然网络服务链还没有 实现,但是每个服务基本上可以独立工作。一旦网络服务链成功实现,这些网络服务将可以 被任意创建,作为链条中的一个节点。然后整个链条被引入到虚拟机或网络的流量路径上。 我们前面谈过负载均衡服务,这个博文里我将谈论防火墙。在H版中,防火墙功能完成了第 一次开发迭代,实现了API和基于IPTables的一个参考实现。跟前面的博文一样,我将用 Horizon来辅助展示目前Neutron中防火墙的功能和使用技巧。我们还会提及防火墙和安全组 的联系和区别。 数据模型 防火墙服务底层数据模型由三个类组成:FirewallPolicy, FirewallRule和Firewall。 FirewallRule是我们所说的防火墙规则,定义了包过滤所需的信息和匹配后的动作。 FirewallPolicy由若干个FirewallRule组成,它被作为模板来创建Firewall。Firewall是系统最终 要实现的防火墙。Neutron作为多租户的网络服务模型,防火墙的这几个类都有租户ID属 性。这样租户A的防火墙信息和租户B的防火墙信息就隔开了。FirewallPolicy有个audited属 性,在参考实现中还没有实现。参考实现目前只支持一个租户只有一个Firewall。 Neutron防火墙参考实现 目前Neutron参考实现的防火墙服务采用的是集中式的检查点机制,是一个有状态的包过滤 防火墙。它在Neutron的Router上利用Linux的IPTables规则来实现Firewall的每个规则。具体 的就是在每个Router的interface设备qr­{xxx}装上入向和出向两个IPTables规则链,在每个链 上都有相应的IPTables规则来实现防火墙的规则。如下表所示: ­A neutron­l3­agent­FORWARD ­o qr­+ ­j neutron­l3­agent­iv44a464882 ­A neutron­l3­agent­FORWARD ­i qr­+ ­j neutron­l3­agent­ov44a464882 ­A neutron­l3­agent­FORWARD ­o qr­+ ­j neutron­l3­agent­fwaas­defau ­A neutron­l3­agent­FORWARD ­i qr­+ ­j neutron­l3­agent­fwaas­defau ­A neutron­l3­agent­fwaas­defau ­j DROP ­A neutron­l3­agent­iv44a464882 ­m state ­­state INVALID ­j DROP ­A neutron­l3­agent­iv44a464882 ­m state ­­state RELATED,ESTABLISHED ­j ACCEPT ­A neutron­l3­agent­iv44a464882 ­s 192.168.10.0/24 ­d 10.0.1.0/24 ­p tcp ­m tcp ­­dport 80 ­j ACCEPT ­A neutron­l3­agent­ov44a464882 ­m state ­­state INVALID ­j DROP ­A neutron­l3­agent­ov44a464882 ­m state ­­state RELATED,ESTABLISHED ­j ACCEPT ­A neutron­l3­agent­ov44a464882 ­s 192.168.10.0/24 ­d 10.0.1.0/24 ­p tcp ­m tcp ­­dport 80 ­j ACCEPT 其中neutron­l3­agent­iv44a464882 和neutron­l3­agent­ov44a464882 就是上面所说的两个 IPTables规则链。“­s 192.168.10.0/24 ­d 10.0.1.0/24 ­p tcp ­m tcp ­­dport 80 ­j ACCEPT ”就 是用来实现我们防火墙规则的一条IPtables规则。可以看出,它在 neutron­l3­agent­iv44a464882 和neutron­l3­agent­ov44a464882上都有。另外 neutron­l3­agent­fwaas­defau链有一条DROP规则,表明参考实现中防火墙的缺省策略为拒 绝访问。 防火墙与安全组 安全组很像防火墙参考实现,它们都是使用IPTables规则来做包过滤。他们之间的区别在于 : 1. 安全组由L2 Agent来实现,也就是说L2 Agent,比如neutron­openvswitch­agent和 neutron­linuxbridge­agent,会将安全组规则转换成IPTables规则,而且一般发生在所有计算 节点上。防火墙由L3 Agent来实现,它的规则会在租户的Router所在的L3 Agent节点上转化 成IPTables规则。 2. 防火墙保护只能作用于跨网段的网络流量,而安全组则可以作用于任何进出虚拟机的流 量。 3.防火墙作为高级网络服务,将被用于服务链中,而安全组则不能。 在Neutron中同时部署防火墙和安全组可以达到双重防护。外部恶意访问可以被防火墙过滤 掉,避免了计算节点的安全组去处理恶意访问所造成的资源损失。即使防火墙被突破,安全 组作为下一到防线还可以保护虚拟机。最重要的是,安全组可以过滤掉来自内部的恶意访 问。 网络规划 我们仍然用Horizon来做个基本的网络规划。如下图所示,虚拟机test2和test3在网络private2 上,test1在网络private1上。路由器router1连接这两个网络的子网。缺省的安全组允许一个 租户下的所有虚拟机互相访问。 参照前面的Neutron网络入门博文我们能轻易地创建出这个网络拓扑。为了测试防火墙,我 们用虚拟机test3作为目标机,test1和test2作为测试机。我们将创建一个防火墙来隔断test1 和test3之间网络。在部署防火墙之前,我们验证一下虚拟机test1能够ping虚拟机test3: 创建防火墙 Horizon激活防火墙功能之后会有Firewalls面板,点击这个面板项右边得到三个标签页: Firewalls,Firewall Policies 和Firewall Rules。从前面的数据模型可以看出,创建防火墙, 我们必须先创建Firewall Rules,然后是Firewall Policies,再后才能创建Firewall。 创建规则 我们先创建两个规则,一个允许Ping 虚拟机test3,一个不允许Ping虚拟机test3。 点击”Add Rule”弹出”Add Rule”对话框,如下图所示: 填入上图的信息,点击“add”按钮,我们就创建了允许外界ping虚拟机test3的规则 ping_rule_allow。类似地我们创建另外一个规则,命名为ping_rule_deny,其Action为deny 。 创建Policy 有了规则之后,我们接着创建Policy。点击Firewall Policies 标签头,然后点击”Add Policy” 弹出”Add Policy”窗口: 这又是一个多标签界面。如上图所示,我们填入Policy的名字ping_policy,然后点击”Rules” 标签头为policy添加规则: 点击“Available Rules”中相应规则后面的”+”按钮,就可以向Policy添加规则。如下图所示: 然后点击”Add”按钮完成创建Policy的工作。 创建防火墙 点击“Firewalls”标签头,然后点击”Create Firewall”按钮,弹出”Add Firewall”窗口: 我们填入名字”ping”,选择我们上面创建的“ping_policy”然后点击“Add”按钮。 验证防火墙 我们的防火墙有两个规则,ping_rule_allow和ping_rule_deny,而且ping_rule_allow在前。虚 拟机test1和test2都应能ping通test3。 现在我们禁用规则ping_rule_allow,这样我们的防火墙就会只有ping_rule_deny规则活跃。 点击下图ping_rule_allow规则行的”Edit”操作按钮: 弹出“Edit Rule”对话框: 如上图,反选”Enabled”检查框,然后点击”Save Changes”按钮。 禁用ping_rule_allow规则后,我们可以看到test1再也Ping不通test3了,但是test2还可以。 总结 Neutron的防火墙服务是一个高级网络服务,目标是作为网络服务链中的一个服务节点而存 在。它和安全组构成了双重防护。防火墙的参考实现作用在Neutron的路由器上,所以只对 跨子网的流量起作用。对于来自同网段的恶意攻击,我们还需要安全组来防护。 防火墙Policy的规则是有顺序的,而且每个规则可以被单独禁用和激活。这个特性给防火墙 规则的部署和调试都提供了很强的灵活性。

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档