防火墙的结构和原理
防火墙技术是计算机网络中的一个概念,我们使用防火墙来保护我们的计算机的安全,帮助计算机网络在内网和外网中构建一道相对隔绝的保护屏障,是一种信息安全技术。
防火墙可由硬件或者软件实现。
软件防火墙
软件防火墙也称为个人防火墙,它是最常用的防火墙,通常作为计算机系统上的程序运行。
它是可定制的,允许用户控制其功能。
软件防火墙单独使用软件系统来完成防火墙功能,将软件部署在系统主机上,其安全性较硬
件防火墙差,同时占用系统资源,在一定程度上影响系统性能。与基于硬件的防火墙不同,软件防火墙只能保护安装它的系统。
我们的 pc 就会自带防火墙,我们可以选择打开或者关闭或者启动防火墙策略来保护我们的计算机的安全。
硬件防火墙
基于硬件的防火墙专门保护你的本地网络。它是一种可以购买的独立产品,通常用于宽带路由器。它通常比软件防火墙提供给用户更好的安全性,但是它的价格更高。
至于价格高,原因在于,软件防火墙只有包过滤的功能,硬件防火墙中可能还有除软件防火墙以外的其他功能,例如 CF(内容过滤)IDS(入侵侦测)IPS(入侵防护)以及 VPN 等等的功能。
硬件防火墙由各个不同的防火墙厂商开发生产,其中比较著名的防火墙厂商有:cisco,juniper,checkpoint 等,现在国内也涌现大量的优秀防火墙厂商如:huawei,h3c, hillstone 等。
如何达到防火墙的过滤作用?
防火墙的目的就是允许或者阻止特定的网络包到达目的地。而为了实现这一目的,人们也设计了许多的方法:例如包过滤,应用层网关,电路层网关等,现在最为普及的就是包过滤方式。
如何设置包过滤的规则?
一个网络包分为头部和数据包。防火墙会基于网络包的头部来对通信进行控制。如果是懂网络的同学会很容易理解这句话,我们看看网络包中的头部携带者哪些信息。
根据上面的图,大概可以知道防火墙可以根据 源地址,目的地址,端口,以及协议来进行允许或者阻止的操作
下图是防火墙工作的一个例子
第一条 只写了接收方 IP 地址和端口以及动作是允许,代表着这条防火墙策略允许互联网的任意 ip 和端口来访问 192.0.2.0/24
第二条 阻止 192.0.2.0/24 的 80 端口向任意 ip 发送请求 TCP 控制位的 SYN=1 和 ACK=0 代表着主动发起 TCP 连接,因为如果互联网的 ip 来访问 192.0.2.0/24 的 80 端口是需要建立 tcp 连接,192.0.2.0/24 是需要进行回包的
第三条就是允许 192.0.2.0/24 的 80 端口向任意 ip 返回请求
第四条 防火墙策略是最后匹配到的,如果上面 3 条防火墙策略都没有匹配到,那么就拒绝请求
数据包在防火墙中的传递过程
上面简单的介绍了包过滤的规则,下面来来了解下数据包的传递过程。整个数据包在防火墙的传递会经过这么几个阶段
- 数据包抵达接口
- 匹配 connection 表项
- ACL 检查
- 匹配地址转换
- 深度包检查
- IP 头转换
- 抵达外部出口
- 三层路由表查找
- 二层 mac 表查找
- 发送数据包
一个简单的例子
数据包抵达接口
- 数据包进入防火墙的物理接口
- 增加 input counters 的数值
- 检查是否异常流量,如流量过大
匹配 connection 项
- 首先查找存在的 connection 项
- 如果数据包匹配存在的 connection,则跳过 ACL check 和 Match Xlate
- 如果数据包没有匹配 connection
- TCP non-SYN 数据包将被抛弃并被系统日志记录
- TCP SYN 或者 UDP 数据包则传给 ACL check
ACL 检查
这里就是防火墙的核心功能,匹配 ACL 也就是防火墙策略
- 数据包首先匹配 ACL 条目
- 匹配到,hitcount +1(hitcount 是防火墙策略的命中数)
- Denied(拒绝)的策略将被丢弃和记录日志
匹配地址转换
- 首先数据包必须匹配转换规则
- 检查数据包的目的端口进行快速路由查找
- 转换规则可以是 NAT control 或者是 no NAT control
- NAT 配置定义何时执行转换规则
- 当转换规则匹配成功,则建立 connection
深度包检查
- Inspections 用于检查协议的一致性
- (可选)自定义 AIC 检查
- NAT 保障报文里的地址和 ip 头地址一致 对应用层数据包的补充检查
- (可选)数据包传给内容安全和控制(CSC)模块
IP 头转换
- 对 IP 报头的 IP 地址转换
- 如果 PAT 执行则转换端口
- 更新校验结果
- (可选)执行完上面的步骤,数据包传递给 IPS(AIP)模块
抵达外部出口
- 数据包转发到出接口位置(尚未从设备转发出去)
- 出接口是由转换规则确定的
- 如果转换规则没有规定出接口(例如:原始输出数据包)则通过全 局路由查找来决定数据包的出接口。
三层路由表查找
- 一旦数据包到达出接口,接着就执行接口路由查找
- 路由表只提供合适的出接口
- 注意:转换规则可以将数据包转发到出接口,即使路由表中指向的不 同的出接口
二层 mac 表查找
- 一旦匹配三层路由表和下一跳则执行二层解析
- 重写二层的 MAC 报头
- 如果二层解析失败将不被日志记录
- Show arp 无法显示三层下一跳
- 当没有收到 arp 响应使用 Debug arp 可以显示出来
发送数据包
- 数据包传递结束
- 端口上的 interface counters 将会增加
如何使用防火墙?
防火墙的品牌是非常多的,而各个防火墙厂商开发的防火墙,cli 命令差异极大,所以需要获取官方文档进行学习。
我也会继续在博客和 github 上发布各类防火墙的使用方法和命令参考。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于