山石网科Hillstone StoneOS Debug(抓包)故障调试指南

2024-01-01 00:30

本文主要是介绍山石网科Hillstone StoneOS Debug(抓包)故障调试指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. Debug抓包说明

 Debug抓包前请务必查看设备CPU情况,如当前CPU偏高(参考值:≥50%),请谨慎进行抓包操作,最好选择在当前设备CPU值偏低、业务低峰期进行Debug,查看设备CPU具体命令:SG-6000# show cpu detail (含历史CPU)。

 Debug抓包后请务必关闭设备所有已开启的Debug,防止影响设备CPU等运行情况,关闭Debug方式:

① 命令行下:SG-6000# undebug all。

② 命令行下:长按或者按2下“Esc”键,提示 “The debug function for all modules is disabled” 表示所有已开启的 debug 均已关闭。

StoneOS 数据包(DP) Debug ⇓
IP sec Debug ⇓
其他类型 Debug ⇓
  • 系统调试功能可以帮助用户对错误进行诊断和定位。安全网关的各种协议和功能基本上都具有相应的调试功能。默认情况下,所有协议和功能的系统调试功能都是关闭的。用户只可以通过设备命令行对系统调试功能进行配置。
  • Debug 操作有一定风险,尤其是设备流量大的时候开启 debug 会导致 CPU 高,请谨慎操作。 请在山石工程师的指导下操作, 不建议用户直接使用 debug。
  • 此文中 StoneOS 默认指防火墙。

2. 常见Debug抓包流程

(一)数据包(DP) Debug 抓包流程

a. Debug抓包前建议先了解下StoneOS数据包基础转发流程(非二层):

图注一:StoneOS数据包基础转发流程图(非二层)

b. StoneOS数据包基础转发流程(非二层)具体如下:

  1. 识别数据包的逻辑入接口,可能是一般无标签接口,也可能是子接口。从而确定数据包的源安全域。
  2. StoneOS 对数据包进行合法性检查。如果源安全域配置了攻击防护功能,系统会在这一步同时进行攻击防护功能检查。
  3. 会话查询。如果该数据包属于某个已建立会话,则跳过 4 到 10,直接进行第 11 步。
  4. 目的 NAT(DNAT)操作。如果能够查找到相匹配的 DNAT 规则,则为包做 DNAT 标记。因为路由查询需要 DNAT 转换的 IP 地址,所以先进行 DNAT 操作。
    *如果系统配置静态一对一BNAT规则,那么先查找匹配的BNAT规则。数据包匹配了BNAT规则之后,按照 BNAT 的设定进行处理,不再查找普通的 DNAT 规则。
  5. 路由查询。 StoneOS 的路由查询顺序从前到后依次为:策略路由(PBR) >源接口路由(SIBR) >源路由(SBR) >目的路由(DBR) >ISP 路由。
    此时,系统得到了数据包的逻辑出接口和目的安全域。
  6. 源 NAT(SNAT)操作。如果能够查找到相匹配的 SNAT 规则,则为包做 SNAT 标记。 *如果系统配置静态一对一 BNAT 规则,那么先查找匹配的 BNAT 规则。 数据包匹配了 BNAT规则之后,按照 BNAT 的设定进行处理,不再查找普通的 DNAT 规则。
  7. 下一跳 VR 查询。如果下一跳为 VR,则继续查看指定的下一跳 VR 是否超出最大 VR 数限制(当前版本系统仅允许数据包最多通过 3 个 VR),如果超过则丢弃数据包,如果未超过,返回 4;如果下一跳不是 VR,则继续进行下一步策略查询。
  8. 安全策略查询。系统根据数据包的源安全域、目的安全域、源 IP 地址和端口号、目的 IP 地址和端口号以及协议,查找策略规则。如果找不到匹配的策略规则,则丢弃数据包;如果找到匹配的策略规则,则根据规则指定的行为进行处理,分别是:
    · 允许(Permit):允许数据包通过。
    · 拒绝(Deny):拒绝数据包通过。
    · 隧道(Tunnel):将数据包转发到指定的隧道。
    · 是否来自隧道(Fromtunnel):检查数据包是否来自指定的隧道,如果是,则允许通过,如果不是,则丢弃。
    · Web 认证(WebAuth): 对符合条件的流量进行 Web 认证。
  9. 第一次应用类型识别。系统根据策略规则中配置的端口号和服务,尝试识别应用类型。
  10. 会话建立。
  11. 如果需要,进行第二次应用类型识别。根据数据包的内容和流量行为再次对应用类型进行精确识别。
  12. 应用层行为控制。根据确定的应用类型,系统将在此执行配置的 Profile 和 ALG 功能。
  13. 根据会话中记录的信息,例如 NAT 标记等,执行相应的处理操作。
  14. 将数据包转发到出接口。

c. 举例说明:

图注二:StoneOS实际Debug数据包转发流程(一)

图注三:StoneOS实际Debug数据包转发流程(二)

Top⇑

d. Debug操作步骤

【以下红色粗体部分为一般debug操作步骤(必须)】

SG-6000# show cpu detail   //查看设备当前CPU情况(如偏高,不建议debug)

SG-6000(config)# logging debug on   //打开 debug log

SG-6000(config)# logging debug to buffer   //记录 log 到 buffer

SG-6000(config)# no logging debug to console   //不记录 log 到 console

SG-6000# debug dp filter src-ip x.x.x.x src-port xx dst-ip x.x.x.x dst-port xx  proto xxx  //设置debug过滤条件 源IP 源端口 目的IP 目的端口 协议(可任选其中一项或多项作为debug过滤条件)

注:关于debug过滤条件说明,如果调试过程中需要查看双向数据包,即来回数据包转发情况,需要设置两条debug过滤条件,如常见情况第一条源目地址、端口为发送数据包方向,第二条源目地址、端口反过来写即为反向数据包(回包),当然特殊情况下请以实际环境问题为准。

例一:抓ICMP 协议ping包  SG-6000# debug dp filter src-ip 192.168.1.1 dst-ip 192.168.100.233 proto icmp   //抓包内容限制源目地址、协议
例二:只抓ip地址报文  SG-6000# debug dp filter dst-ip 192.168.100.233 )

SG-6000# show dp filter 或 show dp-filter   //查看已设置的debug过滤条件(建议设置完过滤条件后,即查看已设置过滤条件,防止因debug过滤条件误设导致抓包出错)

SG-6000# undebug dp filter id xx   //清除已设置的debug过滤条件

SG-6000# debug dp basic   //debug 开关,查看数据包基本处理流程(务必先执行第一条过滤命令,否则debug所有数据包会造成CPU高或卡死)

SG-6000# debug dp snoop   //查看StoneOS数据层转发基本信息(该功能可以看到数据包头部的信息,比如TCP 头部SYN/ACK/FIN/RST 等标志,序列号,二层MAC 地址等等

SG-6000# debug dp drop   //查看StoneOS数据层丢弃基本信息

SG-6000# debug dp error   //查看StoneOS错误的数据包

SG-6000# debug self   //查看StoneOS自身数据包转发情况

SG-6000# show debug   //查看已开启的debug功能(建议设置完debug功能后,即查看已开启的debug功能,防止因debug功能误设导致抓包出错)

SG-6000# clear logging debug   //清除debug缓存

清除debug缓存后,立马进行故障节点访问,即触发数据流,以便在防火墙抓取相应数据包转发信息(若防火墙抓不到相应数据包,如提示“Info: There is no logging message”,则表示相应流量可能没到达防火墙,或者debug过滤条件、功能开关有误,请以实际情况为准,并进行检查)

SG-6000# show logging debug   //查看debug输出信息,即StoneOS数据包转发情况

SG-6000# show logging debug | {include|begin|begin2|exclude|redirect}  Packet/Drop/RST/err等   //可通过管道符“|”来过滤目标信息,如“SG-6000#show logging debug | include Packet”可直接查看数据包来回转发情况。

注:如需要记录相应debug输出信息,请使用带有“记录日志”功能的命令行软件,具体请参考其软件使用说明。

SG-6000# undebug all   //抓包完毕,关闭debug功能(长按或者按2下“Esc”键也可)

注意:使用Debug请注意设备CPU使用情况和所抓取报文的数据量,不可以在没有过滤条件的情况下进行Debug。

e. 常见Debug故障调试信息示例(StoneOS数据包)

①  “No policy matches, default ===DENY===” 
没有能匹配上的策略,需要确认策略配置是否正常。
 “policy id xx matches: ===DENY===”
匹配上了拒绝策略,需要确认策略配置是否正常。

②  “Policy xx matches, ===OUTTUNNEL=== 
Dropped: Can't find policy/policy denied. Abort!!”
匹配上  策略,但走了错误的隧道,需要检查是否开启了 check-id。

③  “flow0's tunnel id (0) invalid. 
Dropped: Failed to create session”
需要检查 IP sec配置,常见原因为隧道接口绑定 IP sec 实例时配置的网关与路由配置的网关不一致(或一个配置了另一个未配置)。

④  “The to-self service is not registered”
不应该发到防火墙自身的报文被 drop,需要确认配置是否正常(例如 DNAT 没有成功匹配等)。

⑤  “Chash insert fail
Failed to install the following session” 
会话冲突导致会话创建失败,建议查询已有会话 flow 看是否存在冲突情况, 常见原因如需要创建会话的 flow0 和已有会话的 flow1 相同, zone 也相同时,就会冲突。

⑥  “Dropped: Arp get fail”
ARP 信息获取失败,需要进一步排查 ARP 报文的收发情况,可能需结合镜像抓包等方式排查。如果显示的是 Arp get fail, ip:0.0.0.0,说明可能是由于同一应用不同端口设备收到报文的源 MAC 不同等原因,需要重新请求 ARP,而接口又关闭了逆向路由导致,可尝试开启逆向路由测试。

⑦  “Dropped: Dst mac is not interface's mac, drop packet”
目的 MAC 非接口 MAC 而被 drop,需要先确认报文是否为相关报文。如果是,那么需要排查上联设备的 ARP 学习情况,本端视情况可开启免费 ARP 再测试。

⑧   “Dropped: Address spoof detected!!
Dropped: No reverse route, drop the packet”
字面意思为检测到地址欺骗 drop 报文,常见于查询逆向路由时查找到的回包出接口与正向报文入接口不在同一安全域,此时 debug 就会看到这样的信息。需要检查配置文件确认路由配置是否正常。一般关闭逆向路由可规避,但关闭逆向路由可能造成其他问题,需要结合用户实际需求给出最优建议。
“Get the reverse route: out interface's zone is not the zone of i_if of packet,drop the packet
Dropped: No reverse route, drop the packet”
此 debug 信息与上面类似,常见原因大体相同,需要检查配置文件。

⑨  “Hit invalid session, drop packet”
报文五元组命中了被拆除的会话被 drop,通常是由于之前有会话被拆除后还未经过 3 秒老化时间。

⑩  “Dropped: TCP 1st packet should not be RST or FIN”
TCP 首包不能为 RST 或 FIN 包,关闭相关检查可以规避。

⑪  “There is not enough resource
Dropped: SNAT error, dropped”
SNAT 资源不足,需要检查 SNAT 资源状态,对于开启了端口扩展的情况,需要确认是否有pool 资源已用完。

⑫  “Dropped: The interface of dst mac is same as the src if”
目的 MAC 对应的出接口与入接口一致,一般发生在透明模式环境中,设备认为该报文不应该被转发到设备因此丢弃,需要结合客户拓扑看是否正常。

⑬  “Received unreachable embedded icmp, invalidate sesstion”
设备接收到 ICMP 不可达报文并拆除了会话,可能导致后续业务报文被 drop,配置 icmpunreachable-session-keep 可规避。

⑭  “Dropped: TTL is too small”
TTL 过低,可能是设备收到报文的 TTL 就已经是 1,也可能是存在环路,需要结合拓扑及完整 debug 分析。

⑮  “iQoS process: QoS engine first pipe xxx(管道名) enqueue pak failed, drop it”
报文被 iQoS 阻断。

⑯  “block pak for session xxxx(session ID) new app-id xxx(应用名)”
由于应用识别功能识别出流量实际应用,应用发生变化, session rematch 时匹配到拒绝策略/默认拒绝动作导致报文被 drop。

更多其他类型的debug抓包详细操作步骤和注意事项请见:

山石网科知识库https://kb.hillstonenet.com/cn/stoneos-debug-troubleshooting-manual/

这篇关于山石网科Hillstone StoneOS Debug(抓包)故障调试指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/557654

相关文章

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

vscode中文乱码问题,注释,终端,调试乱码一劳永逸版

忘记咋回事突然出现了乱码问题,很多方法都试了,注释乱码解决了,终端又乱码,调试窗口也乱码,最后经过本人不懈努力,终于全部解决了,现在分享给大家我的方法。 乱码的原因是各个地方用的编码格式不统一,所以把他们设成统一的utf8. 1.电脑的编码格式 开始-设置-时间和语言-语言和区域 管理语言设置-更改系统区域设置-勾选Bata版:使用utf8-确定-然后按指示重启 2.vscode

如何掌握面向对象编程的四大特性、Lambda 表达式及 I/O 流:全面指南

这里写目录标题 OOP语言的四大特性lambda输入/输出流(I/O流) OOP语言的四大特性 面向对象编程(OOP)是一种编程范式,它通过使用“对象”来组织代码。OOP 的四大特性是封装、继承、多态和抽象。这些特性帮助程序员更好地管理复杂的代码,使程序更易于理解和维护。 类-》实体的抽象类型 实体(属性,行为) -》 ADT(abstract data type) 属性-》成

起点中文网防止网页调试的代码展示

起点中文网对爬虫非常敏感。如图,想在页面启用调试后会显示“已在调试程序中暂停”。 选择停用断点并继续运行后会造成cpu占用率升高电脑卡顿。 经简单分析网站使用了js代码用于防止调试并在强制继续运行后造成电脑卡顿,代码如下: function A(A, B) {if (null != B && "undefined" != typeof Symbol && B[Symbol.hasInstan