OpenStack防火墙功能实现介绍

  • 防火墙功能介绍
  • FWaaS v1
    • 创建防火墙
    • 更新防火墙
    • 删除防火墙
    • 其他操作
  • 总结

防火墙功能介绍

OpenStack防火墙的核心是防火墙策略和防火墙规则,策略是一组防火墙规则集合,规则是由一组匹配条件(如端口范围、协议、IP地址),以及对匹配流量采取的操作(allow、deny);
策略可以设置成public,跨project使用;
防火墙的功能实现有很多方式,取决于driver的选用;例如:iptables driver使用iptables rule来实现,OVS driver使用流表,Cisco防火墙driver使用NSX设备;

OpenStack现有FWaaS v1和FWaaS v2,本文介绍v1

FWaaS v1

OpenStack Rocky版本
FWaaS v1提供针对路由的保护,当防火墙关联到一个路由上,那么所有的内部port都是受该防火墙保护的;

防火墙driver

[firewall_drivers]
iptables = neutron_fwaas.services.firewall.service_drivers.agents.drivers.linux.iptables_fwaas:IptablesFwaasDriver

创建防火墙

neutron_fwaas.services.firewall.service_drivers.agents.drivers.linux.iptables_fwaas
class IptablesFwaasDriver():# apply_list: router_info_list _get_router_info_list_for_tenant# firewall: fw_with_rules _make_firewall_dict_with_rulesdef create_firewall(self, agent_mode, apply_list, firewall):if firewall['admin_state_up']:# setup操作如下:# 1. 生成名称i,o(ingress, egress) + v4(ip版本) + fwid 取前11位;尝试删除对应链# 2. 尝试删除名为fwaas-default-policy的链# 3. 创建名为fwaas-default-policy的链,并加入drop all的规则# 4. 增加规则:增加第一步中删除的链,在每个链中(1)drop所有无效包(2)allow已建立链接的包(3)根据firewall_rule里的规则加入# 5. 将第4步中生成的链链接到Forward,将第3步生成的链链接到Forwardself._setup_firewall(agent_mode, apply_list, firewall)# 生效            self._remove_conntrack_new_firewall(agent_mode,apply_list, firewall)# 设置pre_firewall为当前firewallself.pre_firewall = dict(firewall)else:# 如果firewall的admin_state_up为False,即只添加default DROP ALL的规则self.apply_default_policy(agent_mode, apply_list, firewall)

更新防火墙

更新防火墙从agent的看起

neutron_fwaas.services.firewall.service_drivers.agents.l3reference.firewall_l3_agent
class FWaaSL3AgentExtension():def update_firewall():# L320 先调用driver的删除self.fwaas_driver.delete_firewall(self.conf.agent_mode,router_info_list,firewall)# L348 再调用driver的updateself.fwaas_driver.update_firewall(self.conf.agent_mode,router_info_list,firewall)
 def delete_firewall(self, agent_mode, apply_list, firewall):fwid = firewall['id']try:for router_info in apply_list:ipt_if_prefix_list = self._get_ipt_mgrs_with_if_prefix(agent_mode, router_info)for ipt_if_prefix in ipt_if_prefix_list:ipt_mgr = ipt_if_prefix['ipt']# 删除创建过程中3,4步骤的生成的链self._remove_chains(fwid, ipt_mgr)self._remove_default_chains(ipt_mgr)# apply the changes immediately (no defer in firewall path)ipt_mgr.defer_apply_off()self.pre_firewall = Nonedef update_firewall(self, agent_mode, apply_list, firewall):try:if firewall['admin_state_up']:# 详见创建防火墙的创建过程self._setup_firewall(agent_mode, apply_list, firewall)if self.pre_firewall:# 如果已有防火墙,作比较,获取需要增加和删除的规则                    self._remove_conntrack_updated_firewall(agent_mode,apply_list, self.pre_firewall, firewall)else:self._remove_conntrack_new_firewall(agent_mode,apply_list, firewall)else:self.apply_default_policy(agent_mode, apply_list, firewall)# 更新当前防火墙self.pre_firewall = dict(firewall)......

删除防火墙

在更新防火墙中已提及

其他操作

在针对防火墙的操作中,还有insert_rule和remove_rule等操作;

neutron_fwaas.services.firewall.fwaas_plugin
class FirewallPlugin():def insert_rule(self, context, id, rule_info):# 判断防火墙是否可以更新self._ensure_update_firewall_policy(context, id)fwp = super(FirewallPlugin,self).insert_rule(context, id, rule_info)# 调用agent做update_firewallself._rpc_update_firewall_policy(context, id)resource = 'firewall_policy.update.insert_rule'self._notify_firewall_updates(context, resource, rule_info)return fwpdef remove_rule(self, context, id, rule_info):self._ensure_update_firewall_policy(context, id)fwp = super(FirewallPlugin,self).remove_rule(context, id, rule_info)# 调用agent做update_firewallself._rpc_update_firewall_policy(context, id)resource = 'firewall_policy.update.remove_rule'self._notify_firewall_updates(context, resource, rule_info)return fwp

总结

防火墙工作原理是在关联router后,针对该router对应的namespace做iptables的规则添加。而且在FWaaS v1中是默认default都DROP,然后加ALLOW的规则。

后记
后续会接着介绍一下FWaaS v2的功能。

OpenStack防火墙功能实现介绍相关推荐

  1. CL210红帽OpenStack平台架构--介绍overcloud

    CL210红帽OpenStack平台架构–介绍overcloud

  2. Openstack七大组件介绍

    Openstack七大组件介绍 OpenStack是一套laas解决方案 OpenStack是一个开源的云计算管理平台 以Apache许可证为授权 Horizon组件 --Horizon为OpenSt ...

  3. OpenStack服务组件介绍

    OpenStack的版本  OpenStack的版本命名很有个性,每个主版本系列以字母表顺序(A~Z)来命名,以年份及当年内的排序做版本号. 比如第一个版本叫做Austin(2010.1),编号表明其 ...

  4. OpenStack Heat服务介绍 (三)

    Heat是OpenStack中的Orchestration services,也就是应用程序的配置管理. Heat用声明式的方法来管理公有云或者私有云中的应用程序.它和其他OpenStack的服务类似 ...

  5. OpenStack Heat服务介绍

     http://zhenhua2000.blog.51cto.com/3167594/1324883 这篇博文开始介绍一下OpenStack中的Orchestration Service:Heat ...

  6. OpenStack CDNaaS - Poppy介绍

    一.CDN简介 在介绍Openstack poppy组件前先介绍一下CDN. CDN的全称是Content Delivery Network,即内容分发网络.其目的是通过在现有的Internet中增加 ...

  7. OpenStack 业务链networking-sfc介绍 (2) - 底层原理

    原文链接:https://blog.csdn.net/bc_vnetwork/article/details/65630475 1.  SFC底层实现原理 port chain和ovs driver/ ...

  8. [openstack]Kolla项目介绍

    声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! kolla项目 kolla项 ...

  9. 《OpenStack实战》——第1章 介绍OpenStack 1.1OpenStack是什么

    本节书摘来自异步社区<OpenStack实战>一书中的第1章,第1.1节,作者: [美]V. K. Cody Bumgardner(V. K. 科迪•布姆加德纳)著,更多章节内容可以访问云 ...

最新文章

  1. linux shell 删除两个文件相同部分
  2. [笔记]NumPy基础操作
  3. 图书商城:购物车模块
  4. lazada店铺成长案例分享!把握小众类目商机,店铺月销过万单!
  5. nginx日志中文变成类型\xE9\xA6\x96\xE9\xA1\xB5-\xE6\x8E\xA8\xE8\x8D\x90的东西
  6. discuz设置用户每天回帖数_discuz回贴通知插件实现-显示用户状态设置
  7. MyBatis插入数据返回插入对象的主键
  8. grep 判断不是正则的_Shell—正则表达式(grep命令、sed工具)
  9. Spring不使用XML的注解开发
  10. 1:A+B Problem
  11. 手记 《半年工作经验今日头条和美团面试题面经分享》
  12. 代码比对方法/代码比对工具
  13. Python env
  14. 一个微信群机器人PHP,vbot微信机器人操作联系人的API(3)微信群API
  15. 【51nod 1538】一道难题(常系数齐次线性递推)
  16. LearnOpenGL学习笔记——法线贴图
  17. 电脑桌面云便签软件怎么为便签内容添加图片或照片?
  18. android的shape(四周边框为灰色)
  19. 设计师如何吸引用户注意力?
  20. 2021-09-11职场规则

热门文章

  1. python学习——IO编程——文件读写
  2. 基于SSM+SpringBoot+MySQL+VUE的汽车销售管理系统
  3. python爬虫之requests库的用法(超全面的爬取网页案例)
  4. 专家表示:这3种鱼最好少吃,营养少且毒素多,常吃疾病容易找你
  5. c语言制作简单的计算器
  6. Android热更新研究与实现
  7. linux常用命令的英语释义
  8. android 判断设备是手机还是平板,android – 以编程方式确定设备是手机还是平板电脑...
  9. pytest_05_fixture之conftest.py
  10. 地铁bas服务器系统,浅谈城市轨道交通BAS系统的发展