云计算防火墙对象 (组) 的实践(设计+开发)

本文涉及的产品
云防火墙,500元 1000GB
简介: 云计算防火墙对象 (组) 的实践(设计+开发)

1、为什么要引入防火墙对象(组)的概念?


在目前的云计算中,虚拟化防火墙已经成为了主流,其不但可以节省资源,还可以按序创建。SaaF(Soft As A Firewall)已经成为未来的防火墙形态,但是针对繁杂的ACL,传统的五元组就显得有些笨拙了,此时更加灵活的对象组应运而生,专门用来解决这些繁杂的问题。


1.1、对象(组)的优势


  1. 减少配置访问策略的条目
  2. 如果需要添加或删除某一个对象的策略时,只需要在对象组中操作就可以了
  3. 使我们的访问策略更有可读性
  4. 对象组使得策略用途简单明了
  5. 可以在对象中定义NAT


2、对象(组)和规则的关系


网络异常,图片无法展示
|

以上,对象组分为服务对象组和IP对象组,服务对象组中包含服务对象,IP对象组中包含IP对象。其中服务对象为协议和端口的组合,IP对象为单个IP、CIDR和连续的IP段。规则中包含3个对象,分别为源IP对象,目的IP对象和服务对象,这样一来对象组和传统的五元组就实现了功能对齐,而且可以实现更加详细的规则策略。


使用对象组的防火墙层次:对象-->对象组-->规则-->策略-->防火墙


3、对象(组)数据表设计


3.1、详细设计

3.1.1、对象的详细定义


对象组分为IPv4地址对象组、IPv6地址对象组、服务对象组。这些对象组可以被对象策略、ACL引用,作为报文匹配的条件。


IPv4地址对象组内可以配置IPv4地址对象,地址对象与IPv4地址或用户绑定,用于匹配报文中的IPv4地址或报文所属的用户。


IPv6地址对象组内可以配置IPv6地址对象,地址对象与IPv6地址或用户绑定,用于匹配报文中的IPv6地址或报文所属的用户。


服务对象组内可以配置服务对象,服务对象与协议类型以及协议的特性绑定(协议特性如TCP或UDP的源端口/目的端口、ICMP协议的消息类型/消息码等),用于匹配报文中的可承载的上层协议,其中端口与协议端口号绑定,用于匹配报文中的协议端口号。


3.2、对象表结构


MariaDB [neutron]> desc firewall_object;
+-------------------+---------------+------+-----+---------+-------+
| Field             | Type          | Null | Key | Default | Extra |
+-------------------+---------------+------+-----+---------+-------+
| id                | varchar(36)   | NO   | PRI | NULL    |       |
| name              | varchar(255)  | YES  |     | NULL    |       |
| project_id        | varchar(255)  | YES  | MUL | NULL    |       |
| description       | varchar(1024) | YES  |     | NULL    |       |
| object_group_type | varchar(36)   | YES  |     | NULL    |       |
| protocol          | varchar(40)   | YES  |     | NULL    |       |
| ip_version        | int(11)       | YES  |     | NULL    |       |
| source_port       | varchar(255)  | YES  |     | NULL    |       |
| destination_port  | varchar(255)  | YES  |     | NULL    |       |
| ip_address        | varchar(255)  | YES  |     | NULL    |       |
| object_group_id   | varchar(36)   | YES  |     | NULL    |       |
+-------------------+---------------+------+-----+---------+-------+
11 rows in set (0.00 sec)
复制代码


以上,防火墙相关表都属于neutron库,根据object_group_type类型来确定对象的类型,比如服务对象组中的对象只有protocol、source_port、destination_port这几个关键属性,IP对象组的对象有ip_version、ip_address两个关键属性,project_id、name、id、description属于公共属性。


3.3、对象组表结构


MariaDB [neutron]> desc firewall_object_group;
+-------------------+---------------+------+-----+---------+-------+
| Field             | Type          | Null | Key | Default | Extra |
+-------------------+---------------+------+-----+---------+-------+
| id                | varchar(36)   | NO   | PRI | NULL    |       |
| name              | varchar(255)  | YES  |     | NULL    |       |
| description       | varchar(1024) | YES  |     | NULL    |       |
| project_id        | varchar(255)  | YES  | MUL | NULL    |       |
| ip_version        | int(11)       | YES  |     | NULL    |       |
| object_group_type | varchar(36)   | YES  |     | NULL    |       |
| rule_id           | varchar(36)   | YES  |     | NULL    |       |
+-------------------+---------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
复制代码


以上,对象组是对象的集合,其中object_group_type表明了对象组的类型,rule_id表明了此对象组关联的规则,当对象组关联了规则时无法被删除,ip_version表明了IP对象组的ip版本,建议使用IPv4,IPv6这种样式。


3.4、接口定义

3.4.1、创建对象组


  • method:POST
  • uri:/v2.0/firewall/object_group
  • Code:202、404
  • body:


{
  "object_groups": {
    "name": "x",
    "description": "xx",
    "project_id": "xxx",
    "ip_version": "IPv4",
    "object_group_type": "IPv4",
    "rule_id": "dsds"
  }
}
复制代码


字段解释:


  • name:对象组名称(必填)
  • description:对象组描述(选填)
  • project_id:对象组所属项目ID(必填)
  • ip_version:IP独享的IP版本(当对象组类型为IP是必填)
  • object_group_type:对象组的类型(枚举:IPv4、IPv6、Service)
  • rule_id:对象组关联规则的ID(选填,可以在创建对象的时候关联规则,也可后续关联)


响应示例:


{
  "object_groups": {
    "id": "dsdsdsdfrrgdg-gfdgdfgdgfd"
    "name": "x",
    "description": "xx",
    "project_id": "xxx",
    "ip_version": "IPv4",
    "object_group_type": "IPv4",
    "rule_id": "dsds",
    "created_at": "2021-4-2 22:20:37"
  }
}
复制代码


以上,初始定义的对象组表结构中没有定义创建时间created_at,在响应体中我想到了这个,所以添加了,你可以选在在设计表结构的时间增加他。这样我们就可以得到这个资源的创建时间,在以后的审计中会很有用。


3.4.2、修改对象组


  • method:PUT
  • uri:/v2.0/firewall/object_group
  • Code:200、409
  • body:


{
  "object_groups": {
    "name": "x",
    "description": "xx"
  }
}
复制代码


鉴于对象组的特殊性,涉及到数据切换,所以暂时设计只支持名称name和描述description的修改。


字段解释:


  • name:对象组名称(必填)
  • description:对象组描述(选填)


响应示例:


{
  "object_groups": {
    "id": "dsdsdsdfrrgdg-gfdgdfgdgfd"
    "name": "x",
    "description": "xx",
    "project_id": "xxx",
    "ip_version": "IPv4",
    "object_group_type": "IPv4",
    "rule_id": "dsds",
    "created_at": "2021-4-2 22:20:37",
    "update_at": "2021-4-2 22:25:57"
  }
}
复制代码


以上,我在修改对象组的接口中又想到了更新时间这个字段,可以记录我们最近一次修改对象组的时间,你可以在表结构中增加这个字段。


3.4.3、查询对象组


  • method:GET
  • uri:/v2.0/firewall/object_group
  • Code:200、404
  • 响应示例:同创建


3.4.4、删除对象组


  • method:DELETE
  • uri:/v2.0/firewall/object_group/{object_group_id}
  • Code: 201、409
  • 响应示例:


{
  "res": 0
}
复制代码


3.4.5、CRUD对象


关于对象的CRUD和对象组类似,只是在对象组的基础上,增加了所属对象组ID,IP,协议,源目的端口这几个属性,而且你依然可以为其增加创建时间和修改时间两个时间属性。


4、原型


4.1、对象组的原型


网络异常,图片无法展示
|


4.2、对象的原型


网络异常,图片无法展示
|


4.3、补充解释


关于以上原型,只是大概的介绍,还有很多的不足,比如分页和查询,以及单条记录的快捷操作。请大家见谅,其中在规则的创建中我们可以选择数据来源为五元组或者对象组,如果为对象组,则我们需要为规则指定源地址对象组,目的地址对象组和服务对象组。


5、对象组和防火墙的联动


我们创建规则可以关联对象组,同时将规则关联到策略,之后策略关联防火墙的时候,Neutron会将策略通过防火墙的插件下发到虚墙,实际使用的源地址,目的地址,协议和端口会使用对象定义的数据。而且当我们需要修改源地址等对象的时候,只需要修改对象的数据,Neutron依然可以通过防火墙的插件将变更更新到虚墙。这样可以实现更加灵活的策略变更。


6、使用场景


  • 复杂的访问策略场景
  • 高频的权限更改
  • 追加的IP
  • 端口的频繁变更


7、附


7.1、防火墙的规则是什么?


防火墙的规则描述了允许或拒绝五元组或者对象组的组合。比如:允许源地址为全零的段使用ICMP协议去访问目的地址为192.168.1.1的IP,端口范围为0-255。其中的源(目的)地址可以为五元组中的IP段,也可以是IP对象组。协议和端口可以是五元组组中的协议和端口范围,也可以是对象组中的服务对象。


7.2、防火墙的策略是什么?


防火墙的策略实际上市规则的集合,用来描述一组复杂的规则,从而实现类似iptables的多条ACL。比如可以允许服务器的80端口通过TCP对外提供服务,也可以允许指定IP对服务器使用ICMP协议进行访问。

相关文章
|
29天前
|
运维 监控 Serverless
揭秘云计算中的Serverless架构:优势、挑战与实践
揭秘云计算中的Serverless架构:优势、挑战与实践
|
21天前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
55 1
|
2月前
|
Kubernetes Cloud Native 持续交付
云计算的转型之路:云原生技术的崛起与实践####
【10月更文挑战第16天】 本文深入探讨了云原生技术在现代IT架构变革中的核心作用,不同于传统概述,本摘要将聚焦于云原生如何促进企业实现敏捷开发、弹性伸缩及高效运维,通过具体案例分析展现其在实际业务场景中的创新应用,揭示这一技术趋势对企业数字化转型的深远影响。 ####
55 2
|
1月前
|
云安全 存储 监控
云计算安全:AWS与Azure的安全策略与实践比较
【10月更文挑战第26天】本文详细比较了AWS和Azure在安全性方面的策略和实践,涵盖身份与访问管理、数据加密与保护以及安全监控与响应。通过代码示例展示了两家云服务提供商在实际应用中的具体操作,帮助企业在选择云服务时做出明智决策。
45 0
|
1月前
|
人工智能 边缘计算 云计算
2024.11|云计算行业的商业模式创新方法及实践
截至2024年,全球云计算行业迈入全新阶段,从IaaS到大规模AI模型平台,技术与商业模式不断创新。本文分析全球最新技术进展,探讨云计算商业模式创新策略与实践,解析云服务厂商如何通过技术革新实现价值最大化,推动企业数字化与智能化转型。重点讨论AI与云计算的深度融合、边缘计算与去中心化发展、平台化与生态系统建设,以及数据安全与绿色云计算等关键议题。
91 30
|
28天前
|
运维 监控 持续交付
云计算环境下的运维自动化实践
本文探讨了在云计算环境下实施运维自动化的必要性、挑战及解决方案,重点介绍了如何利用现代技术工具实现高效的云资源管理和监控。通过具体案例分析,展示了自动化运维在提升系统稳定性、降低人力成本方面的优势。
|
24天前
|
云安全 监控 安全
云计算环境下的网络安全策略与实践
在数字化时代,云计算已成为企业和个人存储、处理数据的重要方式。然而,随着云服务的普及,网络安全问题也日益凸显。本文将探讨如何在云计算环境中实施有效的网络安全措施,包括加密技术、访问控制、安全监控和应急响应计划等方面。我们将通过具体案例分析,展示如何在实际场景中应用这些策略,以保护云中的数据不受威胁。
|
1月前
|
弹性计算 监控 大数据
云计算中的弹性伸缩:原理与实践
云计算中的弹性伸缩:原理与实践
|
1月前
|
存储 算法 调度
云计算环境下的性能优化实践
云计算环境下的性能优化实践
|
1月前
|
云安全 存储 监控
云计算安全:AWS与Azure的安全策略与实践比较
【10月更文挑战第27天】本文对比分析了AWS和Azure在云计算安全领域的策略与实践,涵盖技术、定价、混合云工具等方面。通过代码示例展示了如何在两个平台上实施安全措施,如监控告警、数据加密和身份管理。总结了两者的优缺点,帮助读者根据具体需求选择合适的云服务提供商。
45 4