概述

在《软件定义安全》中介绍了,所有的安全产品本质上就是对安全业务的软件开发,既然是软件开发就会遵守软件开发的逻辑和过程。我们抛开复杂的产品宣传,来直接分析下每种安全产品最核心的逻辑是什么,这样有助于对安全产品有更深入的理解。在《软件定义安全》中也提到了,很多产品和方案是混合在一起的,就是传统上的一个产品在新的一些产品中变成了一个模块,这个时候对产品的理解就增加了复杂度,这里先介绍一下单独的一个产品功能,理解了一系列单独的产品逻辑后,后面的组合产品的功能就容易理解了。

一、防火墙的作用

防火墙,直接含义是阻挡火的蔓延,此词起源于建筑领域,用来隔离火灾,阻止火势从一个区域蔓延到另一个区域。安全中的防火墙也是形象化地体现了这一特点,通常用于两个网络之间的隔离。当然,这种隔离是网络访问,阻止非法的访问,保证合法的访问。这里的“火”是指网络中的各种攻击,而“合法”是指正常的通信报文。

防火墙有隔离、防守的属性,灵活应用于网络边界、子网隔离等位置,具体如企业网络出口、大型网络内部子网隔离、数据中心边界等等。操作系统内外访问通常也有防火墙,主流的操作系统都自带强大的防火墙,只是由于管理问题,目前为止没有受到太大的重视。随着东西向的重视,诞生了很多微隔离技术,其实主机防火墙是天生的非常好的微隔离方案,最起码可以做到主机层级的微隔离。

二、防火墙技术

传统意义上的防火墙技术分为三大类:“包过滤”(Packet Filtering)、“应用代理”(Application Proxy)和“状态监视”(Stateful Inspection)。无论一个防火墙的实现过程多么复杂,归根结底都是在这三种技术的基础上进行功能扩展的。

2.1 包过滤技术

包过滤是最早使用的一种防火墙技术,它的第一代模型是“静态包过滤”(Static Packet Filtering),对需要转发的数据包,先获取报头信息,然后和设定的规则进行比较,根据比较的结果对数据包进行转发或丢弃。包过滤防火墙对于需要转发的报文,会先获取报文头信息,包括报文的源IP地址、目的IP地址、IP层所承载的上层协议的协议号、源端口号和目的端口号等,然后和预先设定的过滤规则进行匹配,并根据匹配结果对报文采取转发或丢弃处理。包过滤防火墙的转发机制是逐包匹配包过滤规则并检查,所以转发效率低下。所以后面演变成了状态防火墙等技术,但核心的最基本的原理还是策略检查,判断阻止还是放行。

2.2 应用代理技术

由于包过滤技术只检查包头,内容不检查,所以无法提供完善的数据保护措施。在这种背景下“应用代理”(Application Proxy)技术的防火墙诞生了。代理服务器(Proxy Server)的功能是代理网络请求去取得网络信息。形象地说,它是网络信息的中转站,是请求客户端和服务商之间的中间代理机构,负责转发网络信息,对转发进行控制和登记。

“应用协议分析”技术工作在OSI模型的应用层上,在这一层里能接触到的所有数据都是最终完整的数据,因而它可以实现更高级的数据检测内容。由于代理防火墙采取是代理机制进行工作,内外部网络之间的通信都需先经过代理服务器审核,通过后再由代理服务器连接。

但任何事物都有两面性,代理型防火墙的优势也是他的劣势,由于它是基于代理技术的,通过防火墙的每个连接都必须建立在为之创建的代理程序进程上,而代理进程自身是要消耗一定时间的,所以效率上会大打折扣。所以代理防火墙是以牺牲速度为代价换取了比包过滤防火墙更高的安全特性,在网络吞吐量不是很大的情况下,影响还不大。但在网络流量比较大的情况下,就无法满足网络交换需求,所以,代理防火墙的普及范围还远远不及包过滤型防火墙。还有一个因素是,随着安全意识的提高,网络流量中加密的流量越来越多,这个时候代理服务器的优势也发挥不出来。

2.3 状态检测技术

它最早是CheckPoint技术公司在基于“包过滤”原理的“动态包过滤”技术发展而来的技术。这种防火墙技术通过一种“状态检测"机制来处理的,“状态检测”机制以流量为单位来对报文进行检测和转发,即对一条流量的第一个报文进行包过滤规则检查,并将判断结果作为该条流量的“状态”记录下来。对于该流量的后续报文都直接根据这个“状态”来判断是转发还是丢弃,而不会再次检查报文的数据内容。这个“状态”就是我们平常所述的会话表项。这种机制迅速提升了防火墙产品的检测速率和转发效率,已经成为目前主流的包过滤机制。所以状态监测防火墙最重要的是策略表和会话表。

三、核心代码逻辑

3.1 前提说明

在介绍核心代码逻辑前面,先介绍一下前提条件。

网卡获取流量:所有设备都是通过网卡进行通讯,网卡包括无线网卡,有线网卡,有线网卡一般分电口和光口的形式。所有经过网卡的流量都可以透过某种技术获取,比如dpdk等。获取到网络流量后就可以进行下一步的分析。

网络包结构:网络包是分层结构,以tcp为例,最外层的是ip头部,然后是tcp头部,然后是数据层。如下所示:

五元组:IP报文中的五个元素,又称为“五元组”,即源IP地址和目的IP地址,源端口号和目的端口号,协议类型。通过判断IP数据报文报文的五元组,就可以判断一条数据流相同的IP数据报文。

状态表:状态表在五元组的基础上有增加了协议名,连接状态,超时时间等信息。

最简单的策略:准许客户端ip1:192.168.1.10可以访问服务器ip2:192.168.1.100的ssh端口。

3.2 过滤核心代码

1、从策略表中获取策略;

2、从网卡接收网络流量,把五元组解析出来;

3、根据策略进行判断,比如上面的策略;判断逻辑:

4、当源ip不是192.168.1.10,访问拒绝,包丢弃;

5、当源ip是192.168.1.10,判断目标ip是否是192.168.1.100,不是这个目前ip,访问拒绝,包丢弃;

6、当源ip是192.168.1.10,目标ip是192.168.1.100,判断端口是不是22,不是这个端口,访问拒绝,包丢弃;

7、当源ip是192.168.1.10,目标ip是192.168.1.100,端口是22,访问准许。

这些就是包过滤防火墙的核心代码逻辑,当然策略会分策略组,网段等,当一个大型的网络配置防火墙的时候策略本身也是很复杂的逻辑。

3.3 状态监测核心代码

状态检测接口接收到 TCP 数据包后:

1:首先对 TCP 包进行完整性检查和流量检查:通过检查来判断数据包长度是否相等、物理地址是否正确等等;

2:其次判断是否是 SYN 连接;

3:若为SYN首包,由于TCP连接通过三次握手建立(SYN➔SYN/ACK➔ACK),所以在确认SYN为三次握手的首包,并匹配规则表后,会建立一个临时的"连接未完成表",它是为还未进行的两次握手(SYN/ACK,ACK)建立的临时表,从而避免了后续的握手包还需要经过规则表匹配,提高效率。

这部分就是在包过滤基础上增加的状态监测逻辑,通过这些逻辑可以极大的提升效率。

3.4 下一代防火墙

2009年,著名咨询机构Gartner发布了“下一代防火墙”内容。由于采用的是基于服务的架构与Web2.0使用的普及,更多的通讯量都只是通过少数几个端口及采用有限的几个协议进行,这也就意味着基于端口/协议类安全策略的关联性与效果都越来越低。

下一代防火墙需具有下列最低属性

1)标准的第一代防火墙功能:具有数据包过滤、网络地址转换(NAT)、协议状态检查以及VPN功能等。

2)集成式而非托管式网络入侵防御:支持基于漏洞的签名与基于威胁的签名。IPS与防火墙 间的协作所获得的性能要远高于部件的叠加,如:提供推荐防火墙规则,以阻止持续某一载入IPS及有害流量的地址。这就证明,在下一代防火墙中,互相关联作用的是防火墙而非由操作人员在控制台制定与执行各种解决方案。高质量的集成式IPS引擎与签名也是下一代防火墙的主要特性。所谓集成可将诸多特性集合在一起,如:根据针对注入恶意软件网站的IPS检测向防火墙提供推荐阻止的地址。

3)业务识别与全栈可视性:采用非端口与协议vs仅端口、协议与服务的方式,识别应用程序并在应用层执行网络安全策略。范例中包括允许使用Skype但禁用Skype内部共享或一直阻止GoToMyPC。

4)超级智能的防火墙:可收集防火墙外的各类信息,用于改进阻止决策,或作为优化阻止规则的基础。范例中还包括利用目录集成来强化根据用户身份实施的阻止或根据地址编制黑名单与白名单。

从中可以看出,下一代防火墙是增加了传统上的其他产品的功能作为模块,并把几个功能有机的进行整合并加上一些统一分析功能。

四、市场

2021-2026年中国网络安全行业发展前景预测与投资战略规划分析报告中介绍了防火墙/VPN市场2019年市场规模达到158亿元。2019年,我国网络安全业务实现收入594.14亿元。这么算一下防火墙占安全市场的26.6%,说明防火墙/VPN市场可以说是中国IT安全市场的中流砥柱。多年来,防火墙/VPN市场保持稳步较快的发展态势。2015-2019年,中国防火墙/VPN整体市场规模年复合增长率约为21%

五、选择

5.1 网络吞吐量

防火墙一般部署在出口或者网络边界,故对于防火墙的吞吐量就有比较高的要求。因为防火墙是通过对进入与出去的数据进行过滤来识别是否符合安全策略的,所以在流量比较高时,要求防火墙能以最快的速度及时对所有数据包进行检测。否则就可能造成比较长的延时,甚至发生死机。所以网络吞吐量指标非常重要,它体现了防火墙的可用性能,选购防火墙的时候第一个要看的指标就是防火墙的吞吐量。当然,这个吞吐量也不是越大越好。因为吞吐量越大的话,防火墙的价格也就越高。吞吐量一个基本的原则就是至少要跟企业现有的互联网接入带宽相当。

5.2 稳定性

防火墙都是串接在网络上的,正常要保证7×24小时不能停机的,所以稳定性是非常重要的指标。

5.3 防火墙的管理难易度

防火墙的管理难易度也是防火墙能否达到目的的主要考虑因素之一。若防火墙的管理过于困难,则可能会造成设定上的错误,反而不能达到其功能。

5.4 防火墙自身的安全性

大多数人在选择防火墙时都将注意力放在防火墙如何控制连接以及防火墙支持多少种服务,但往往忽略一点,防火墙也是网络上的主机之一,也可能存在安全问题,防火墙如果不能确保自身安全,则防火墙的控制功能再强,也终究不能完全保护内部网络。

大部分防火墙都安装在一般的操作系统上,如UNIX、Linux系统等。在防火墙主机上执行的除了防火墙软件外,所有的程序、系统核心,也大多来自于操作系统本身的原有程序。当防火墙上所执行的软件出现安全漏洞时,防火墙本身也将受到威胁。此时,任何的防火墙控制机制都可能失效,因为当一个黑客取得了防火墙上的控制权以后,黑客几乎可为所欲为地修改防火墙上的存取规则(Access Rule),进而侵入更多的系统。因此,防火墙自身仍应有相当高的安全保护。

5.5 服务

遇到问题能否及时的支持和响应也是比较重要的一个因素。

总结

本文介绍了防火墙的基本的核心逻辑,要做好一个防火墙除了这些内容还远远不够,但通过这些介绍可以对防火墙有个简单的原理上的了解,对产品的选择和使用有一定的帮助,后续会逐步介绍下其他安全产品的核心逻辑。


相关分享:

安全的本质

安全建设的原则

安全建设的任务

安全建设的成本

软件定义安全

安全产品的核心逻辑-防火墙相关推荐

  1. 安全产品的核心逻辑-IPS/IDS

    概述 在<软件定义安全>中介绍了,所有的安全产品本质上就是对安全业务的软件开发,在<安全产品的核心逻辑-防火墙>中介绍了防火墙的核心点和核心逻辑.本文介绍ips/ids的核心内 ...

  2. 安全产品的核心逻辑-杀毒软件

    概述 在<软件定义安全>中介绍了所有的安全产品本质上就是对安全业务的软件开发,在<安全产品的核心逻辑-防火墙>中介绍了防火墙的核心点和核心逻辑.在<安全产品的核心逻辑-I ...

  3. 自定义ClassLoader实现java应用核心逻辑模块热部署

    http://waterdh.iteye.com/blog/520399 本文主要是根据classloader的特性,结合实际产品环境中遇到的问题,来探讨下JAVA应用中局部模块热部署的可行性. 我们 ...

  4. Kong APIGW — Admin API 核心逻辑对象

    目录 文章目录 目录 Kong Admin API 的核心逻辑对象 Service(服务) Route(路由) Upstream(上游) Target(目标) Consumer(消费者) Plugin ...

  5. bigdecimal不等于0怎么写_创业计划书不知道怎么写?掌握核心逻辑是关键

    最近由于互联网+大学生创新创业大赛项目辅导的缘故,参与了很多项目赛前资料的准备,其中一项就是需要提交Word版的创业计划书.然而,无一例外,参赛项目团队以及指导教师对于创业计划书怎么准备并不是特别清楚 ...

  6. RxSwift学习--核心逻辑再探

    前言 通过上一篇内容RxSwift学习--核心逻辑初探,对RxSwift有了些初步的认知,下面通过源码来看一下RxSwift到底有多骚 RxSwift核心逻辑再探 先把上篇中的例子代码搬过来: //第 ...

  7. promise的三种状态_一.Promise中核心逻辑的实现

    首先看一下Promise代码: let promise =new Promise((resolve,reject)=>{resolve('成功');//reject('失败'); }) prom ...

  8. 华为云·云享专家公开课:45分钟掌握Python项目部署与调度核心逻辑直播

    爬虫项目在编写完成后往往需要部署到服务器上,会经历哪些阶段?如何运行Python 的 EGG 包?华为云专家在线公开课将于 5.22日19:00为你揭秘,45分钟让你轻松掌握Python项目部署与调度 ...

  9. Python实现股票双龙战法核心逻辑

    股票双龙战法是一种股票交易策略,基于日线K线图形态分析和技术指标分析,利用股票价格的上涨和下跌趋势,寻找具有较高潜在收益的股票交易机会.以下是Python实现股票双龙战法核心逻辑的示例代码: impo ...

最新文章

  1. Mysql 操作技巧
  2. 语言auc_Phoenix建模语言(PML)中AUC的计算方法
  3. MongoDB replSet
  4. java 抽象类 模板_Java抽象类的构造模板模式用法示例
  5. 原生js实现轮播图实例教程
  6. java与c++的区别-转
  7. raspberry pi_在Raspberry Pi上使用TensorFlow进行对象检测
  8. 2021牛客暑期多校训练营1 G-Game of Swapping Numbers(最优解转化+贪心)
  9. 利用信号量实现线程同步
  10. [大学回忆录-思想]找工作:也谈谈我的专业技能
  11. Node.js开发框架Express4.x
  12. 向日葵远程控制使用方法
  13. 完美数及寻找完美数的算法(Perfect number‘s algorithm)
  14. 如何修改手游版本服务器,原神怎么只下一次客户端 b服官服渠道服手机自由切换方法...
  15. 学习记录贴4:CMAQ两个脚本同时运行时冲突
  16. xkcd 单线程下载图片
  17. 关于echarts无数据时显示问题
  18. java 视频转码 视频压缩
  19. pol点获取及火星坐标系转换
  20. 2022全国节能宣传周 | 志翔科技大数据:支撑电企降碳、生活节能

热门文章

  1. 修改数据库 [MySQL][数据库]
  2. STM32国产替代者灵动微
  3. 二分法应用NUSOJ 3053集N“福”
  4. Oracle 设置nls,Oracle NLS_LANG设置
  5. 程序员讨论《黑客帝国》(二)平衡和进化
  6. Methodot低代码电影票房管理系统实战案例(二):前端低代码搭建系统后台
  7. S3三阶对称群的矩阵表示
  8. iPhone内存爆炸,你需要掌握这4招!
  9. 国民视觉健康高峰论坛李绍伟建言:青少年视力保护应筑好三道墙
  10. PAT1002 写出这个数 (20分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。