ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

安全隔离与信息单向系统测试指南:单向性、协议剥离与吞吐验证

安全隔离与信息单向系统测试指南:单向性、协议剥离与吞吐验证 简介这份PDF文档是深信服FGAP v3.0安全隔离与信息单向系统的测试实施指导面向系统管理员、开发与测试人员帮助其完成光闸设备的安装部署、策略配置与功能验证。内容围绕安全隔离区与信息单向系统两大组件展开涵盖需求背景、实现方式、硬件部署拓扑、产品接口说明、配置与管理以及文件传输和数据库同步的内置版与客户端版测试流程目录结构完整便于按模块查阅。资源包共1个PDF文件大小约3.38MB单文件即覆盖从安装到测试的完整实施链路。目前已有138人学习适合需要落地单向导入方案或开展合规测试的技术人员参考可据此快速理解设备接口、策略配置要点与测试验证思路减少自行摸索成本。1. 从一份测试实施指导说起安全隔离与信息单向系统到底在测什么第一次拿到《SANGFOR_FGAP_v3.0深信服安全隔离与信息单向系统测试实施指导》这类文档的人八成会先愣一下名字里每个词都认识连起来却不知道从哪下手。安全隔离、信息单向、光闸这几个词在等保测评、电力调度、工业生产网的项目里出现频率极高但真正要落地测试时很多人卡在第一步——不知道这套系统在链路里的位置也就不知道测试该测什么。简单说FGAP 这类设备解决的是一个很硬的需求两个网络之间只允许数据从低密级流向高密级反向一个字节都不许过同时还要保证 TCP/IP 协议本身被彻底剥离让攻击载荷没有可乘之机。它靠的是物理上的单向光通道发送端只发光、接收端只收光中间没有回传路径这就是「光闸」这个名字的由来。这份测试实施指导要干的就是把「单向」这件事从口号变成可验证的结论。适合读这篇的人很明确正在做隔离装置选型的安全工程师、要写测试方案的实施人员、被等保整改追着跑的运维以及第一次接触 FGAP 不知道从哪敲第一条命令的新手。2. 拆开 FGAP 的测试面单向性、协议剥离与吞吐这三件事怎么验测试实施指导的核心不是把设备点亮而是证明三件事数据只能单向走、协议被真正剥离、性能扛得住业务。这三件事对应三套完全不同的验证方法混在一起测就会互相干扰。下面先把测试面拆清楚再落到具体操作。2.1 单向性验证为什么反向 ping 通不通才是关键判据单向性是整套系统的立身之本也是最容易被测错的地方。很多人上来就测「正向能不能传文件」传成功了就认为通过这其实只验证了一半。真正的判据是反向链路必须完全不可达而且不是「被防火墙拦了」那种可达但被拒绝是物理层面就没有回程路径。常见做法是分三层验证。第一层是网络层从高密级侧向低密级侧发起 ping 和 traceroute正确结果是超时或直接无路由绝不能出现「Destination Host Unreachable」这种带 ICMP 回包的响应因为那说明还有协议栈在应答。第二层是传输层用 telnet 或 nc 去连反向的任意端口结果必须是连接超时而非拒绝。第三层是应用层尝试反向发起一个 HTTP 请求或数据库连接确认没有任何应用层握手。# 在高密级侧接收端执行验证反向不可达 # -c 3 表示发3个包-W 2 表示每个包等2秒 ping -c 3 -W 2 192.168.100.10 # 反向端口探测-z 只扫描不发数据-w 2 超时2秒 nc -zv -w 2 192.168.100.10 22 nc -zv -w 2 192.168.100.10 443 # 路由追踪看反向是否有任何一跳响应 traceroute -n -w 2 192.168.100.10上面三条命令的判读逻辑要记牢ping 必须是 100% packet lossnc 必须是 timed out 而不是 refusedtraceroute 必须是全是星号。如果 nc 返回 refused说明反向有主机在应答 TCP RST这通常意味着隔离没做到位或者测试机接错了网口。参数上-W和-w控制超时生产环境建议设 2 到 3 秒太短会误判太长测试效率低。提示测试前务必确认测试机的网线插在正确的网口上。FGAP 设备通常有明确的内外网标识插错口会让所有单向性测试结论失效这是血泪经验里出现频率最高的一条。2.2 协议剥离测试用畸形包和私有协议探边界协议剥离是光闸类设备区别于普通网闸的地方。普通网闸做的是协议代理TCP 连接在设备内部被拆成两段而 FGAP 这类单向系统追求的是把 TCP/IP 整个拿掉只让应用层数据以私有格式通过光通道。测试时要验证的就是「标准协议栈确实过不去」。具体做法是构造一批畸形包和标准协议握手包从低密级侧发往高密级侧观察是否被丢弃。比如发一个带 SYN 标志的裸 TCP 包、一个分片 IP 包、一个超大 ICMP 包正常情况下这些都不应该出现在接收端。可以用 scapy 构造from scapy.all import * # 构造一个裸TCP SYN包目标端口80 ip IP(dst192.168.200.10) tcp TCP(dport80, flagsS, seq1000) send(ip/tcp, verbose0) # 构造一个分片IP包 frag1 IP(dst192.168.200.10, flagsMF, frag0)/ICMP()/(A*1400) frag2 IP(dst192.168.200.10, frag175)/ICMP()/(B*200) send(frag1, verbose0) send(frag2, verbose0) # 构造超大ICMP包 send(IP(dst192.168.200.10)/ICMP()/(X*2000), verbose0)这段脚本的关键在 flags 和 frag 参数。flagsS是只发 SYN 不发 ACK模拟半开连接flagsMF是 More Fragments配合 frag 偏移构造分片超大 ICMP 用来测 MTU 处理和缓冲区边界。发送后在接收端用 tcpdump 抓包正确结果是抓不到任何对应的包。如果抓到了说明协议剥离不彻底需要检查设备的协议白名单配置。参数说明seq 随便设一个非零值即可目的是让包看起来像正常连接分片大小 1400 和 200 是为了让总长超过标准 MTU 1500触发分片重组逻辑。测试时建议在接收端开tcpdump -i any -nn -w capture.pcap全程抓包事后用 Wireshark 分析比实时看更可靠。2.3 吞吐与延迟单向通道的性能基线怎么测性能测试最容易被忽略因为大家觉得「能通就行」。但单向光通道的带宽和延迟直接决定业务能不能跑尤其是数据库同步、视频流这类场景。测试方法是用 iperf3 或专用文件传输工具在低密级侧发、高密级侧收测三个指标最大吞吐、平均延迟、丢包率。# 接收端高密级侧启动服务 iperf3 -s -p 5201 # 发送端低密级侧发起测试-t 60 测60秒-P 4 开4个并发流 iperf3 -c 192.168.200.10 -p 5201 -t 60 -P 4 # 测延迟用 -u 走UDP-b 限制带宽避免拥塞 iperf3 -c 192.168.200.10 -p 5201 -u -b 100M -t 30判读时注意单向系统的吞吐通常远低于标称网口速率因为光通道的编码和纠错会吃掉一部分带宽这是正常现象。如果实测吞吐只有标称的 10% 以下要检查是不是走了软件转发而非硬件直通。延迟方面单向通道的延迟一般比普通网络高因为数据要经过编码、发光、收光、解码多个环节几十毫秒到上百毫秒都算正常范围具体看设备型号和配置。注意性能测试要在单向性验证通过之后做。如果反向还能通说明设备可能工作在非隔离模式这时候测出来的吞吐没有参考价值。3. 把测试指导落成可执行方案环境搭建、用例设计与执行顺序文档看得再明白落到现场还是得有一套自己的执行方案。这一章讲怎么把测试指导里的要求翻译成可操作的步骤包括环境怎么搭、用例怎么设计、执行顺序怎么排。3.1 测试环境搭建三台机器加一台设备的最小拓扑最小可测环境需要三样东西低密级侧测试机、高密级侧测试机、FGAP 设备本身。如果要做协议剥离测试还需要一台抓包机接在接收端做镜像或者直接在接收端抓包。拓扑上低密级测试机接设备的发送口高密级测试机接接收口两台测试机不能有任何其他网络路径连通否则单向性测试会被旁路干扰。配置要点两台测试机的 IP 要规划在同一逻辑网段但物理隔离比如低密级用 192.168.100.0/24高密级用 192.168.200.0/24。测试前先确认两台机器互相 ping 不通这是环境正确的前提。然后配置 FGAP 设备的单向转发规则通常是在管理界面里指定源网段、目的网段和允许通过的应用类型。# 环境自检脚本在两台测试机上分别执行 # 确认本机IP ip addr show | grep inet # 确认到对端不可达预期超时 ping -c 2 -W 1 192.168.200.10 # 在低密级侧执行 ping -c 2 -W 1 192.168.100.10 # 在高密级侧执行 # 确认默认路由没有指向对端 ip route show这个自检脚本的作用是排除环境干扰。如果低密级侧能 ping 通高密级侧说明存在旁路必须先断掉再测。ip route show要确认没有一条路由把对端网段指向了非 FGAP 的网关。3.2 用例设计从功能到边界再到异常的递进用例设计遵循「先功能、再边界、后异常」的顺序。功能用例验证基本单向传输比如从低密级侧发一个文件到高密级侧确认能收到且内容一致。边界用例测极限值比如最大文件、最长连接时间、最高并发数。异常用例测设备在非正常输入下的表现比如发畸形包、突然断链、超大数据量冲击。用例类型测试项预期结果判读要点功能单文件单向传输接收端文件完整MD5 一致功能数据库同步增量数据到达无反向回执边界最大文件传输不中断不丢包看设备日志有无告警边界高并发连接吞吐稳定观察 CPU 和内存异常畸形包注入全部丢弃接收端无抓包异常链路中断恢复自动重连恢复后数据不丢用例执行时建议用脚本自动化尤其是重复性的单向传输测试。可以用 Python 写一个简单的发送-校验脚本import hashlib import os import paramiko # 假设通过SFTP传输 def md5_file(path): h hashlib.md5() with open(path, rb) as f: for chunk in iter(lambda: f.read(8192), b): h.update(chunk) return h.hexdigest() # 发送前计算源文件MD5 src /data/test_1gb.bin src_md5 md5_file(src) print(f源文件MD5: {src_md5}) # 传输后在高密级侧计算目标文件MD5人工比对 # 或者通过单向通道回传MD5如果允许这段脚本的关键是 MD5 校验确保传输内容没有在编码解码过程中被篡改。chunk大小 8192 是读写效率的平衡点太小会频繁 IO太大占内存。注意单向系统通常不允许反向回传校验值所以 MD5 比对要在接收端手动做或者通过管理口单独获取。3.3 执行顺序为什么先测单向性再测性能执行顺序有讲究。第一步永远是单向性验证这是基础不通过后面都不用测。第二步是协议剥离测试确认标准协议栈确实过不去。第三步才是功能传输测试验证业务数据能正常走。第四步是性能测试在功能正常的前提下测吞吐和延迟。最后是异常和恢复测试模拟各种故障场景。这个顺序不能乱。如果先测性能设备可能因为配置问题工作在非隔离模式测出来的数据好看但没意义。如果先测功能传输可能会因为协议剥离没配好导致传输失败误以为是功能问题。每一步的结论都是下一步的前提这是测试实施指导里隐含但非常重要的逻辑。提示每完成一个阶段的测试建议导出设备日志和抓包文件存档。等保测评和项目验收时这些是证明「确实测过」的关键材料事后补是补不出来的。4. 避坑与排查FGAP 测试现场最容易翻车的五个地方测试现场的问题往往不是设备本身而是环境、配置和人的操作。下面五条是实际项目里反复出现的坑每条按现象、原因、解决来写。4.1 反向 nc 返回 refused 而不是 timed out现象在高密级侧用 nc 探测低密级侧端口返回 connection refused而不是预期的超时。原因反向链路上还有一台主机或设备在应答 TCP RST。常见情况是测试机双网卡另一块网卡连着普通网络路由表把反向流量导向了错误接口或者 FGAP 设备的反向管理口没关管理协议在应答。解决先ip route get 192.168.100.10确认反向流量走的是哪个接口如果是非 FGAP 接口说明路由配错了。然后检查 FGAP 设备是否关闭了反向管理通道很多设备默认开启管理口双向通信测试前要在配置里关掉。4.2 正向传输大文件时中途断流现象小文件传输正常超过几百 MB 的文件传到一半就断接收端文件不完整。原因单向光通道的缓冲区有限大文件持续发送会填满缓冲区如果没有流控机制就会丢数据。另一个可能是设备的会话超时设置太短长连接被强制断开。解决先查设备的最大单次传输限制和缓冲区配置把大文件切成小块传输。如果是会话超时问题在管理界面把超时时间调大或者启用断点续传功能。测试时用split命令把大文件切成 100MB 的小块再传能规避大部分缓冲区问题。4.3 协议剥离测试时抓到了分片包现象发送分片 IP 包后在接收端 tcpdump 抓到了部分分片。原因设备的协议剥离规则只检查了完整包没有处理分片重组后的检测。有些设备为了性能会放行分片包指望接收端自己重组这就留下了绕过风险。解决在设备配置里启用分片包丢弃策略或者设置分片重组后再检测。测试时要专门构造重叠分片和畸形分片确认全部被丢弃。如果设备不支持分片处理需要在测试报告里明确标注这个风险点。4.4 性能测试结果远低于预期现象iperf3 测出来的吞吐只有几 Mbps远低于设备标称的百兆或千兆。原因最常见的是走了软件转发而非硬件直通设备 CPU 跑满了。其次是测试机的网卡协商速率不对比如千兆网卡协商成了百兆。还有可能是并发流数太少单流跑不满带宽。解决先ethtool eth0确认网卡速率和双工模式确保是 1000Mb/s 全双工。然后增加 iperf3 的并发流数-P 8或更高单流跑不满是常态。如果还是低登录设备看 CPU 利用率超过 80% 说明是软件转发瓶颈需要确认设备是否支持硬件直通模式并开启。4.5 测试通过但业务上线后出问题现象实验室测试全部通过业务系统接入后出现数据丢失或同步延迟。原因实验室环境太干净没有模拟真实业务的流量特征。比如业务系统有大量小包、突发流量、长连接保持这些在实验室里没测到。另一个原因是实验室的测试机和业务服务器的 TCP 参数不同比如窗口大小、重传策略。解决测试时尽量用真实业务系统的镜像或模拟流量至少要把小包场景和突发场景覆盖到。TCP 参数方面把测试机的net.ipv4.tcp_window_scaling和业务服务器保持一致。上线前做一次灰度先接非关键业务跑一周确认稳定再全量。5. 进阶技巧用自动化脚本把回归测试压到十分钟手工测一遍 FGAP 的单向性、协议剥离和性能熟练的人也要大半天。如果每次配置变更都重测一遍人力成本扛不住。我的习惯是写一套自动化回归脚本把重复性最高的几项压到十分钟以内跑完。核心思路是用 Python 的 subprocess 调系统命令把 ping、nc、tcpdump、iperf3 串起来每步自动判读结果并生成报告。下面是一个简化版的框架import subprocess import json import time def run_cmd(cmd, timeout10): 执行命令并返回输出超时返回None try: r subprocess.run(cmd, shellTrue, capture_outputTrue, textTrue, timeouttimeout) return r.stdout r.stderr except subprocess.TimeoutExpired: return None def test_unidirectional(target_ip): 单向性测试ping和nc都必须超时 results {} # ping测试预期100%丢包 out run_cmd(fping -c 3 -W 2 {target_ip}) results[ping_loss] 100% packet loss in out if out else True # nc测试预期超时返回None out run_cmd(fnc -zv -w 2 {target_ip} 22, timeout5) results[nc_timeout] out is None return results def test_throughput(target_ip, duration30): 吞吐测试返回Mbps out run_cmd(fiperf3 -c {target_ip} -t {duration} -P 4 -J, timeoutduration10) if out: data json.loads(out) return data[end][sum_received][bits_per_second] / 1e6 return 0 # 主流程 report {} report[unidirectional] test_unidirectional(192.168.100.10) report[throughput_mbps] test_throughput(192.168.200.10) # 输出报告 print(json.dumps(report, indent2, ensure_asciiFalse))这个脚本的关键设计点run_cmd用 timeout 参数控制命令超时因为单向性测试本身就依赖超时不能让命令无限等。test_unidirectional里 nc 返回 None 才算通过这是判读逻辑的核心。test_throughput用 iperf3 的-J参数输出 JSON方便程序解析比解析文本靠谱得多。参数上ping 的-c 3和-W 2是平衡速度和准确性的选择3 个包足够判断连通性2 秒超时不会让脚本卡太久。iperf3 的-P 4是并发流数根据设备能力可以调到 8 或 16。-t 30是测试时长回归测试可以缩到 10 秒验收测试建议 60 秒以上。这套脚本跑一遍大概十分钟覆盖了单向性、吞吐两个最关键的回归项。协议剥离测试因为要构造畸形包自动化复杂度高我一般还是手工做但会把 scapy 脚本存好需要时直接跑。最后说个习惯每次测试完把设备配置导出、抓包文件、脚本输出报告三个东西打包存档按日期命名。等保测评的时候测评师要什么材料你都能立刻拿出来不用临时翻日志。这个习惯帮我省过好几次事希望帮到你。本文还有配套的精品资源点击获取
返回列表