用户可以用它来创建和管理防火墙,在 subnet 的边界上对 layer 3 和 layer 4 的流量进行过滤。
 
传统网络中的防火墙一般放在网关上,用来控制子网之间的访问。 FWaaS 的原理也一样,是在 Neutron 虚拟 router 上应用防火墙规则,控制进出租户网络的数据。
 
FWaaS 有三个重要概念: Firewall、Policy 和 Rule。
Firewall
租户能够创建和管理的逻辑防火墙资源。 Firewall 必须关联某个 Policy,因此必须先创建 Policy。
Firewall Policy
Policy 是 Rule 的集合,Firewall 会按顺序应用 Policy 中的每一条 Rule。
Firewall Rule
Rule 是访问控制的规则,由源与目的子网 IP、源与目的端口、协议、allow 或 deny 动作组成。
例如,我们可以创建一条 Rule,允许外部网络通过 ssh 访问租户网络中的 instance,端口为 22。
 
 
与 FWaaS 容易混淆的概念是安全组(Security Group)。
安全组的应用对象是虚拟网卡,由 L2 Agent 实现,比如 neutron_openvswitch_agent 和 neutron_linuxbridge_agent。
 
安全组会在计算节点上通过 iptables 规则来控制进出 instance 虚拟网卡的流量。
也就是说:安全组保护的是 instance。
 
FWaaS 的应用对象是 router,可以在安全组之前控制外部过来的流量,但是对于同一个 subnet 内的流量不作限制。
也就是说:FWaaS 保护的是 subnet。
所以,可以同时部署 FWaaS 和安全组实现双重防护。

启用 FWaaS

因为 FWaaS 是在 router 中实现的,所以 FWaaS 没有单独的 agent。 已有的 L3 agent 负责提供所有 FWaaS 功能。
要启用 FWaaS,必须在 Neutron 的相关配置文件中做些设置。

配置 firewall driver

Neutron 在 /etc/neutron/fwaas_driver.ini 文件中设置 FWaaS 使用的 driver。 如下图所示:
这里 driver 为 iptables。如果以后支持更多的 driver,可以在这里替换。

配置 Neutron

在 Neutron 配置文件 /etc/neutron/neutron.conf  中启用 FWaaS plugin。
配置完毕!下节我们开始创建 Firewall。
 

 
在我们的实验环境中,有两个 instance: cirros-vm1(172.16.100.3) 和 cirros-vm2(172.16.101.3)。
cirros-vm1 和 cirros-vm2 分别位于网络 vlan100 和 vlan101。 vlan100 和 vlan101 之间由虚拟路由器 test_router 连接。 网络拓扑如下:
 
在 test_router 没有应用任何 FWaaS 的情况下,cirros-vm1 可以通过 ping 和 ssh 跨网络访问 cirros-vm2。
 
 
下面我们将进行如下实验:
1. 创建一个不包含任何 rule 的 firewall “test_firewall” 并应用到 test_router。
此时 FWaaS 生效,默认情况下会阻止任何跨子网的流量。 
2. 创建 rule 允许 ssh,并将其添加到 test_firewall。此时 cirros-vm1 应该能够 ssh cirros-vm2。
 
 
应用无 rule 的 firewall
点击菜单 Project -> Network -> Firewalls,打开 Firewall Policies 标签页面。 目前没有定义任何 Policie。
 
点击按钮,显示Policy 创建页面。
将 Policy 命名为 “test_policy”,直接点击 “Add” 按钮。
 
这样我们创建的 test_policy 不包含任何 Rule。
 
进入 “Firewalls” 标签页,点击 “Create Firewall” 按钮
将新的 Firewall 命名为 “test_firewall”,并关联 “test_policy”。
 
在 “Routers” 标签页中选择 “test_router”。 点击 “Add” 创建 firewall。
 
等待 test_firewall 的 Status 变为 “Active”,此时 test_router 已经成功应用 test_policy。
 
 
可以通过 iptables-save 查看 router namespace 的 iptables 规则
 
为了让大家了解底层到底发生了什么变化,下面用 vimdiff 显示了应用 test_firewall 前后 iptables 规则的变化。
 
下面我们来分析一下这些规则。
route 在转发数据包时会使用 chain:
-A FORWARD -j neutron-***-agen-FORWARD
neutron-***-agen-FORWARD 的规则如下:
-A neutron-***-agen-FORWARD -o qr-+ -j neutron-***-agen-iv4e85f4601  
-A neutron-***-agen-FORWARD -i qr-+ -j neutron-***-agen-ov4e85f4601  
-A neutron-***-agen-FORWARD -o qr-+ -j neutron-***-agen-fwaas-defau  
-A neutron-***-agen-FORWARD -i qr-+ -j neutron-***-agen-fwaas-defau
 
我们以第一条为例,其含义是:从 router namespace 任何一个 qr-* interface 发出
的流量都会应用 chain neutron-***-agen-iv4e85f4601,该 chain 定义如下:
-A neutron-***-agen-iv4e85f4601 -m state --state INVALID -j DROP  
-A neutron-***-agen-iv4e85f4601 -m state --state RELATED,ESTABLISHED -j ACCEPT
其规则为: 
1. 如果数据包的状态为 INVALID,则 DROP。 
2. 如果数据包的状态为 RELATED 或 ESTABLISHED,则 ACCEPT。
 
其他正常传输的数据怎么处理呢? 回到 neutron-***-agen-FORWARD chain 的下一条关于 router 外出数据的规则:
-A neutron-***-agen-FORWARD -o qr-+ -j neutron-***-agen-fwaas-defau
neutron-***-agen-fwaas-defau 内容为:
-A neutron-***-agen-fwaas-defau -j DROP
可见,数据会被丢弃。 同样的道理,router 上所有进入 qr-* interface 的数据也会被丢弃。
其结论是:在没有定义任何 firewall rule 的情况下,进出 router 的数据包都会被丢弃。
 
ping 和 ssh 测试表明目前 cirros-vm1 确实已经无法与 cirros-vm2 通信。
 
 
下面我们添加一条 firewall rule:允许 ssh。
在 Firewall Rules 标签页面点击 “Add Rule” 按钮。
 
将新 rule 命名为 “allow ssh”, Protocal 选择 “TCP”, Action 为 “ALLOW”, Destination Port/Port Range 为 “22”,
点击 “Add” ,rule 创建成功。
 
 
接下来将 rule 添加到 policy 中。
 
点击 Firewall Policies 标签页面,然后点击 “test_policy” 后面的 “Insert Rule” 按钮。
在下拉框中选择 Rule “allow ssh”,点击 “Save Changes”。
 
可以看到,“allow ssh” 已经成功添加到 “test_policy” 中。
 
 
通过 vimdiff 查看 router namespace 的 iptables-save 发生了什么变化。
iptables 添加了两条规则:
-A neutron-***-agen-iv4e85f4601 -p tcp -m tcp --dport 22 -j ACCEPT
-A neutron-***-agen-ov4e85f4601 -p tcp -m tcp --dport 22 -j ACCEPT
其含义是进出 router 的 tcp 数据包,如果目的端口为 22(ssh)ssh,则一律 ACCEPT。
 
测试一下,cirros-vm1 已经可以 ssh cirros-vm2,但 ping 还是不通,这与预期一致。
“allow ssh” 已经起作用。 同时我们也发现,firewall rule 对进出流量同时生效,不区分方向。
小节
 
 
FWaaS 用于加强 Neutron 网络的安全性,与安全组可以配合使用。 
下面将 FWaaS 和安全组做个比较。
相同点: 
1. 底层都是通过 iptables 实现。
 
不同点: 
1. FWaaS 的 iptables 规则应用在 router 上,保护整个租户网络;
安全组则应用在虚拟网卡上,保护单个 instance。
2. FWaaS 可以定义 allow 或者 deny 规则;安全组只能定义 allow 规则。
3. 目前 FWaaS 规则不能区分进出流量,对双向流量都起作用;
安全组规则可以区分 ingress 和 egress。
 
 
 

Neutron:Firewall as a Service(FWaaS)的更多相关文章

  1. Neutron: Load Balance as a Service(LBaaS)负载均衡

    load balancer 负责监听外部的连接,并将连接分发到 pool member.    LBaaS 有三个主要的概念: Pool Member,Pool 和 Virtual IP Pool M ...

  2. Windows as a Service(4)——使用Intune管理Windows10更新

    这是这个系列的最后一篇文章,我已经花了三篇的篇幅和大家分享有关于Windows as a Serivce的相关内容,链接如下: Windows as a Service(1)-- Windows 10 ...

  3. Windows as a Service(3)——使用SCCM管理Windows10更新

    Hello 小伙伴们,这是这个系列的第三篇文章,我已经和大家分享了有关于Windows 10服务分支以及利用WSUS管理更新的方式,有兴趣的小伙伴们可以参考下面的链接: Windows as a Se ...

  4. Java服务器端生成报告文档:使用SQL Server Report Service(SSRS)

    SQL Server Report Service(SSRS)提供了Asp.Net和WinForm两类客户端组件封装,因此使用C#实现SSRS报表的导出功能,仅需要使用相应的组件即可. Java操作S ...

  5. openstack核心组件——neutron网络服务 抓取ip(9)

    云计算openstack核心组件——neutron网络服务(9)   一.虚拟机获取 ip: 用 namspace 隔离 DHCP 服务   Neutron 通过 dnsmasq 提供 DHCP 服务 ...

  6. 架构设计:负载均衡层设计方案(7)——LVS + Keepalived + Nginx安装及配置

    1.概述 上篇文章<架构设计:负载均衡层设计方案(6)——Nginx + Keepalived构建高可用的负载层>(http://blog.csdn.net/yinwenjie/artic ...

  7. Linux实战教学笔记48:openvpn架构实施方案(一)跨机房异地灾备

    第一章VPN介绍 1.1 VPN概述 VPN(全称Virtual Private Network)虚拟专用网络,是依靠ISP和其他的NSP,在公共网络中建立专用的数据通信网络的技术,可以为企业之间或者 ...

  8. Apache CXF实现Web Service(5)—— GZIP使用

    Apache CXF实现Web Service(5)-- GZIP使用 参考来源: CXF WebService整合Spring Apache CXF实现Web Service(1)--不借助重量级W ...

  9. Apache CXF实现Web Service(4)——Tomcat容器和Spring实现JAX-RS(RESTful) web service

    准备 我们仍然使用 Apache CXF实现Web Service(2)——不借助重量级Web容器和Spring实现一个纯的JAX-RS(RESTful) web service 中的代码作为基础,并 ...

随机推荐

  1. 用pyinstaller打包python程序,解决打包时的错误:Cannot find existing PyQt5 plugin directories

    解决方法就是用everything搜索PyQt5,找到 /Library/plugins路径下的PyQt5文件夹,将里面的dll动态库pyqt5qmlplugin.dll复制出来 按照错误提示的路径, ...

  2. What?VS2019创建新项目居然没有.NET Core3.0的模板?Bug?

    今天是个值得欢喜的日子,因为VS2019在今天正式发布了.作为微软粉,我已经用了一段时间的VS2019 RC版本了.但是,今天有很多小伙伴在我的<ASP.NET Core 3.0 上的gRPC服 ...

  3. 【重学计算机】计组D1章:计算机系统概论

    1.冯诺依曼计算机组成 主机(cpu+内存),外设(输入设备+输出设备+外存),总线(地址总线+数据总线+控制总线) 2.计算机层次结构 应用程序-高级语言-汇编语言-操作系统-指令集架构层-微代码层 ...

  4. 在Coding上搭建Hexo个人博客

    先注册一个Coding账号,然后创建一个项目这个项目的名字应该是{username}.coding.me 安装hexo脚手架 $ npm install -g hexo-cli 建站 安装完 Hexo ...

  5. es6学习笔记-class之一概念

    前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...

  6. MySQL via EF6 的试用报告

    1.如何通过 EF6 来连接 MySQL? 2.如何通过 EF6 来实现 CRUD? 2.1.Create 添加 2.2.Retrieve 查询 2.3.Update 修改 2.4.Delete 删除 ...

  7. javascript中Date常用方法

    一.Date的构造函数 有四种形式的Date构造函数: //1.构造函数没有参数,则返回当前日期的Date对象 var now=new Date(); //2.构造函数的参数为日期的毫秒数,返回距离1 ...

  8. 前端面试知识点集锦(JavaScript篇)

    目录 1.谈谈你对Ajax的理解?(概念.特点.作用) 2.说说你对延迟对象deferred的理解? 3.什么是跨域,如何实现跨域访问? 4.为什么要使用模板引擎? 5.JavaScript是一门什么 ...

  9. 洛谷P3366 【模板】最小生成树(Boruvka算法)

    题意 题目链接 Sol 自己yy着写了一下Boruvka算法. 算法思想很简单,就是每次贪心的用两个联通块之间最小的边去合并. 复杂度\(O(n \log n)\),然鹅没有Kruskal跑的快,但是 ...

  10. BestSync多终端文件资料同步利器

    分享一款多终端文件同步的强力软件,windows下使用. 我这里的多终端意思是,多台电脑.移动存储.云端. 就我个人而言,实用性在于移动硬盘和电脑上都有的文件,比如保存项目资料,电脑上需要编辑,有时外 ...