公开文集
0x01 SRC 资产管理系统
0x02 Web 漏洞案例库
0x03 小程序漏洞案例库
第一章:小程序渗透基础
1.1 微信小程序反编译与动态调试
1.2 微信小程序强制开启开发者模式
0x99 信息安全学习体系
01-网络安全基础
Day-001-TCP-IP协议栈安全分析
Day-002-DNS协议安全与DNS劫持攻防
Day-003-IPv6 安全基础与过渡
Day-004-HTTP-HTTPS协议深度解析
Day-005-网络嗅探与流量分析技术
Day-006-防火墙原理与配置实践
Day-007-网络地址转换 NAT 安全分析
Day-008-路由协议安全 RIP-OSPF-BGP
Day-009-VLAN 安全与 VLAN-Hopping
Day-010-无线网络基础与安全 802.11
Day-011-网络访问控制 802.1X-NAC
Day-012-网络分段与微隔离设计
Day-013-负载均衡器安全配置
Day-014-CDN安全与防护
Day-015-NTP安全
Day-016-DHCP安全与攻击防护
Day-017-ICMP协议安全分析
Day-018-网络协议模糊测试基础
Day-019-网络流量基线建立
Day-020-网络取证基础
Day-021-网络入侵检测系统 NIDS
Day-022-网络入侵防御系统 NIPS
Day-023-网络流量加密与解密
Day-024-网络协议逆向工程基础
Day-025-网络性能与安全权衡
Day-026-SDN 安全
Day-027-网络虚拟化安全
Day-028-网络欺骗技术
Day-029-网络威胁情报应用
Day-030-网络容量规划与安全
Day-031-网络安全架构设计实战
02-Web 安全
Day-032-OWASP-Top-10-2021详解
Day-033-SQL 注入原理与手工检测
Day-034-SQL注入进阶报错注入与盲注
Day-035-XSS跨站脚本攻击基础
Day-036-XSS 进阶绕过与利用
Day-037-XSS进阶绕过与利用
Day-038-CSRF 跨站请求伪造
Day-039-文件上传漏洞
Day-040-反序列化漏洞基础
Day-041-PHP反序列化深入
Day-042-Java反序列化深入
Day-043-SSTI 服务端模板注入
Day-044-文件包含漏洞 LFI-RFI
Day-045-命令注入漏洞
Day-046-XXE-XML 外部实体注入
Day-047-反序列化漏洞进阶
Day-048-API 安全基础
Day-049-API认证与授权安全
Day-050-API漏洞挖掘实战
Day-051-文件上传漏洞进阶
Day-052-反序列化漏洞实战
Day-053-Web 安全综合实战
Day-054-移动安全基础
Day-055-Android 应用安全测试
Day-056-iOS 应用安全测试
Day-057-移动应用综合实战
Day-058-云安全基础
Day-059-AWS 安全实战
Day-060-Azure 安全实战
Day-061-GCP 安全实战
Day-062-云安全综合实战
Day-063-容器安全基础
Day-064-Docker 安全实战
Day-065-Kubernetes 安全实战
Day-066-容器安全综合实战
Day-067-API 安全进阶
Day-068-服务端请求伪造 SSRF 深入
Day-069-文件上传漏洞进阶
Day-070-反序列化漏洞实战进阶
Day-071-业务逻辑漏洞深入
Day-072-前端安全深入
Day-073-Web 安全综合实战
Day-074-云安全进阶
Day-075-移动安全进阶
Day-076-API 安全进阶
Day-077-前端安全进阶
Day-078-业务逻辑漏洞进阶
Day-079-反序列化漏洞实战进阶
Day-080-文件上传漏洞实战进阶
Day-081-SSTI 服务端模板注入进阶
Day-082-XXE-XML 外部实体注入进阶
Day-083-SSRF 服务端请求伪造进阶
Day-084-命令注入漏洞进阶
Day-085-文件包含漏洞进阶
Day-086-反序列化漏洞实战进阶
Day-087-文件上传漏洞实战进阶
Day-088-SSTI 服务端模板注入实战进阶
Day-089-XXE-XML 外部实体注入实战进阶
Day-090-SSRF 服务端请求伪造实战进阶
Day-091-命令注入漏洞实战进阶
Day-092-Web 安全综合实战
Day-093-GraphQL 安全
Day-094-JWT 与 OAuth2 安全
03-系统安全
Day-095-系统监控与检测
Day-096-主机防火墙配置
Day-097-系统审计与合规
Day-098-Linux 系统安全进阶
Day-099-Windows 系统安全进阶
Day-100-容器安全进阶
Day-101-容器编排安全进阶
Day-102-Linux 内核安全
Day-103-Windows 内核安全
Day-104-系统安全总结与实战
Day-105-Linux 系统安全基础
Day-106-Windows 系统安全基础
Day-107-容器安全基础
Day-108-系统加固技术
Day-109-日志分析技术
Day-110-威胁狩猎技术
04-应用安全
Day-111-安全编码规范
Day-112-输入验证技术
Day-113-输出编码技术
Day-114-错误处理安全
Day-115-会话管理安全
Day-116-认证安全
Day-117-授权安全
Day-118-数据保护安全
Day-119-日志安全
Day-120-API 安全
Day-121-微服务安全
Day-122-新兴技术安全概论
Day-123-DevSecOps 流水线安全
Day-124-云原生安全架构
Day-125-API 安全最佳实践
Day-126-安全编码规范
Day-127-SDL 安全开发生命周期
Day-128-威胁建模实战
Day-129-安全需求分析
Day-130-安全架构设计
Day-131-安全编码实践Java
Day-132-安全编码实践Python
Day-133-代码审计方法论
Day-134-静态代码分析SAST
Day-135-动态应用测试DAST
Day-136-交互式测试IAST
Day-137-软件成分分析SCA
Day-138-依赖漏洞管理
Day-139-安全测试自动化
Day-140-漏洞管理与响应
Day-141-应用安全总结与展望
Day-142-OWASP-Top10-2024 详解
Day-143-CWE-Top25 分析
Day-144-漏洞挖掘方法论
Day-145-模糊测试技术
Day-146-逆向工程基础
Day-147-漏洞利用开发基础
Day-148-漏洞复现与验证
Day-149-漏洞披露流程
Day-150-CVE 申请与管理
Day-151-漏洞赏金计划
Day-152-等保2.0详解
Day-153-GDPR 合规实践
Day-154-数据安全法解读
Day-155-个人信息保护法与合规指南
Day-156-个人信息保护法解读
Day-157-ISO-27001 信息安全管理体系
Day-158-SOC-2 合规与审计
Day-159-PCI-DSS 支付卡行业数据安全标准
Day-160-网络安全审查办法解读
Day-161-数据出境安全评估办法
Day-162-应用安全评估实战
Day-163-红蓝对抗演练
Day-164-安全应急响应
Day-165-安全运营中心建设
Day-166-应用安全总结与展望
05-密码学
Day-167-密码学基础
Day-168-对称加密算法详解
Day-169-非对称加密算法详解
Day-170-哈希函数与数字签名
Day-171-密钥管理与PKI
Day-172-TLS-SSL 协议详解
Day-173-国密算法详解
Day-174-认证与密钥协议
Day-175-随机数生成与熵源
Day-176-椭圆曲线密码学详解
Day-177-后量子密码学详解
Day-178-高级密码学主题
Day-179-密码学行业应用精选
Day-180-常用加密算法原理与实现
Day-181-密码学总结与展望
Day-182-密码学系列总结与展望
06-渗透测试
Day-183-渗透测试方法论
Day-184-信息收集技术详解
Day-185-漏洞扫描技术详解
Day-186-漏洞利用技术详解
Day-187-渗透测试中的漏洞利用框架
Day-188-漏洞利用框架与 Metasploit 深入
Day-189-渗透测试中的 WAF 绕过技术
Day-190-渗透测试中的模糊测试技术
Day-191-渗透测试中的代码审计与静态分析
Day-192-渗透测试中的密码哈希破解技术
Day-193-渗透测试报告编写指南
Day-194-Web 应用渗透测试
Day-195-渗透测试中的 API 安全测试
Day-196-渗透测试中的 GraphQL 安全测试
Day-197-渗透测试中的前后端分离应用测试
Day-198-渗透测试中的小程序安全测试
Day-199-渗透测试中的浏览器安全测试
Day-200-OAuth-SSO安全测试
Day-201-渗透测试中的业务逻辑漏洞测试
Day-202-渗透测试中的厚客户端安全测试
Day-203-渗透测试综合实战演练
Day-204-内网渗透技术详解
Day-205-渗透测试中的内网信息收集进阶
Day-206-渗透测试中的域森林渗透技术
Day-207-渗透测试中的权限维持技术
Day-208-渗透测试中的横向移动技术
Day-209-渗透测试中的痕迹清理与反取证技术
Day-210-渗透测试中的数据窃取与 Exfiltration 技术
Day-211-渗透测试中的内部威胁与数据泄露测试
Day-212-渗透测试中的物理安全渗透
Day-213-社会工程学攻击技术
Day-214-移动应用渗透测试
Day-215-云安全渗透测试
Day-216-渗透测试中的容器与 Kubernetes 安全渗透
Day-217-渗透测试中的 Serverless 安全测试
Day-218-渗透测试中的微服务安全测试
Day-219-物联网安全渗透测试
Day-220-工业控制系统安全渗透测试
Day-221-无线网络安全渗透测试
Day-222-数据库安全渗透测试
Day-223-渗透测试中的供应链安全测试
Day-224-红队演练技术详解
Day-225-渗透测试中的红队基础设施搭建
Day-226-渗透测试中的威胁情报与狩猎
Day-227-渗透测试中的综合指纹识别技术
Day-228-自动化渗透测试技术
Day-229-渗透测试中的运维安全测试
Day-230-渗透测试中的区块链与智能合约安全测试
Day-231-渗透测试中的漏洞管理与修复验证
Day-232-渗透测试法律与合规
Day-233-后渗透攻击技术详解
Day-234-渗透测试中的人工智能应用
Day-235-漏洞利用开发深入
Day-236-云原生渗透测试深入
07-应急响应
Day-237-应急响应概述与核心概念
Day-238-应急响应流程框架
Day-239-CSIRT 团队组建与职责分工
Day-240-应急响应工具包准备
Day-241-应急响应法律与合规要求
Day-242-安全事件检测方法与指标
Day-243-云原生应急响应
Day-244-日志收集与分析技术
Day-245-网络流量分析与异常识别
Day-246-自动化响应与 SOAR
Day-247-端点监控与 EDR 技术
Day-248-威胁狩猎方法论
Day-249-威胁情报在检测中的应用
Day-250-数字取证基础与证据链管理
Day-251-内存取证技术
Day-252-磁盘取证与文件恢复
Day-253-网络取证与数据包分析
Day-254-云环境与容器取证
Day-255-恶意代码静态分析技术
Day-256-恶意代码动态分析技术
Day-257-恶意代码行为分析方法
Day-258-逆向工程基础与工具
Day-259-沙箱技术与自动化分析
Day-260-事件隔离与遏制策略
Day-261-威胁根除与系统修复
Day-262-系统恢复与数据重建
Day-263-业务连续性计划
Day-264-事件复盘与经验总结
Day-265-APT 攻击事件复盘分析
Day-266-勒索软件事件响应实战
Day-267-数据泄露事件处置流程
Day-268-内部威胁调查与取证
Day-269-综合应急响应演练
08-安全运维
Day-270-安全运营中心 SOC 概述
Day-271-安全监控指标体系
Day-272-安全告警管理
Day-273-安全可视化与仪表盘
Day-274-监控工具选型
Day-275-日志采集技术
Day-276-日志标准化与解析
Day-277-日志存储与归档
Day-278-日志分析技术
Day-279-日志合规要求
Day-280-SIEM 架构与设计
Day-281-关联规则引擎
Day-282-高级关联分析
Day-283-UEBA 用户实体行为分析
Day-284-威胁狩猎
Day-285-SOAR 基础概念
Day-286-剧本设计
Day-287-自动化响应技术
Day-288-安全工具集成
Day-289-SOAR 度量与优化
Day-290-安全基线管理
Day-291-漏洞管理流程
Day-292-补丁管理策略
Day-293-变更安全管理
Day-294-合规审计技术
Day-295-7x24 安全运营
Day-296-安全事件管理流程
Day-297-安全运营度量体系
Day-298-持续改进机制
Day-299-安全运维综合演练
Day-300-云原生安全运营
Day-301-AI 与机器学习安全运营
Day-302-安全自动化脚本实战
09-移动安全
Day-303-移动安全威胁概述
Day-304-移动设备安全架构
Day-305-移动操作系统安全模型
Day-306-移动应用权限管理
Day-307-移动端数据加密
Day-308-330-Android 安全合集
Day-309-Android 安全架构
Day-310-Android 组件安全
Day-311-Android 权限与隐私
Day-312-Android 逆向工程
Day-313-Android 应用加固
Day-314-iOS 安全架构
Day-315-iOS 应用沙盒机制
Day-316-越狱与反越狱
Day-317-iOS 逆向工程
Day-318-iOS 企业分发安全
Day-319-移动安全开发生命周期
Day-320-移动应用安全测试
Day-321-移动应用加固技术
Day-322-移动威胁防护
Day-323-移动安全合规
10-云安全
Day-324-云计算安全模型
Day-325-责任共担模型
Day-326-云安全威胁模型
Day-327-云安全合规框架
Day-328-云安全架构设计
Day-329-AWS IAM 安全
Day-330-AWS 网络安全
Day-331-AWS 存储安全
Day-332-AWS 安全监控
Day-333-AWS 安全最佳实践
Day-334-Azure AD 安全
Day-335-Azure 网络安全
Day-336-Azure 存储安全
Day-337-Azure 安全中心
Day-338-Azure 安全最佳实践
Day-339-容器安全基础
Day-340-Kubernetes 安全
Day-341-Serverless 安全
Day-342-云原生 DevSecOps
Day-343-云安全态势管理 CSPM
11-物联网工控
Day-344-物联网安全概述
Day-345-IoT 通信协议安全
Day-346-IoT 设备安全
Day-347-IoT 平台安全
Day-348-IoT 应用安全
Day-349-工业控制系统概述
Day-350-工控协议安全
Day-351-PLC 安全
Day-352-SCADA 系统安全
Day-353-工控安全防护
12-综合与总结
Day-354-安全职业发展路径
Day-355-安全技术趋势展望
Day-356-安全建设方法论
Day-357-经典攻防案例复盘
Day-358-安全学习资源指南
Day-359-信息安全行业求职指南
-
+
首页
Day-019-网络流量基线建立
# Day 18: 网络流量基线建立 > 网络安全系列第 18 天 | 预计阅读时间:30 分钟 | 难度:★★★★☆ --- ## 清单 目录 1. [引言](#引言) 2. [流量基线概念](#流量基线概念) 3. [基线指标体系](#基线指标体系) 4. [数据收集方法](#数据收集方法) 5. [基线建立流程](#基线建立流程) 6. [异常检测技术](#异常检测技术) 7. [实验环境搭建](#实验环境搭建) 8. [实战演练](#实战演练) 9. [监控与告警](#监控与告警) 10. [总结与思考](#总结与思考) 11. [参考资料](#参考资料) --- ## 引言 ### 为什么需要流量基线 在网络安全的日常运营中,最大的挑战之一是区分"正常"和"异常"流量。没有基线,就无法知道什么是异常;没有异常检测,就无法及时发现攻击。 **流量基线的价值**: - 统计 **异常检测基础**:知道什么是正常,才能发现异常 - **攻击发现**:DDoS、数据外泄、横向移动等攻击会改变流量模式 - 增长 **容量规划**:了解流量趋势,提前规划扩容 - 目标 **性能优化**:识别瓶颈,优化网络配置 - 说明 **合规要求**:许多标准要求持续监控和基线分析 **真实案例**: ``` 案例 1: 数据外泄检测(2020) - 公司建立了流量基线 - 监控发现夜间流量异常(超出基线 3σ) - 调查发现内部人员窃取数据 - 及时阻止,避免重大损失 案例 2: DDoS 预警(2021) - 基线显示正常流量 1Gbps - 监控发现流量缓慢增长到 1.5Gbps - 提前扩容,避免服务中断 - 后续遭遇 2Tbps 攻击,因有准备未受影响 案例 3: 横向移动检测(2019) - 建立服务器间通信基线 - 发现异常的内部扫描流量 - 及时隔离受感染服务器 - 阻止勒索软件扩散 ``` --- ## 流量基线概念 ### 什么是流量基线 ``` 流量基线定义: 网络在"正常"状态下的流量特征集合,包括: - 流量大小(带宽使用率) - 流量模式(时间分布) - 协议分布 - 连接特征 - 行为模式 基线不是固定值,而是一个范围: - 平均值(Mean) - 标准差(Standard Deviation) - 最小值/最大值 - 百分位数(P95, P99) ``` ### 基线类型 ``` 1. 时间基线 - 小时基线(24 小时周期) - 天基线(7 天周期) - 周基线(4 周周期) - 月基线(12 月周期) - 季节性基线(年度周期) 2. 空间基线 - 网段基线(不同子网) - 应用基线(不同服务) - 用户基线(不同部门) - 地理位置基线 3. 协议基线 - TCP 基线 - UDP 基线 - ICMP 基线 - 应用协议基线(HTTP, DNS, SSH 等) ``` ### 基线统计模型 ``` 正态分布模型: 假设流量服从正态分布 正常范围:μ ± 2σ (95% 置信区间) 异常阈值:μ ± 3σ (99.7% 置信区间) 优点:简单、计算快 缺点:网络流量通常不服从正态分布 百分位数模型: 使用 P95、P99 作为阈值 正常:<= P95 警告:P95-P99 异常:> P99 优点:不假设分布 缺点:需要大量数据 时间序列模型: 考虑时间因素 工作日 vs 周末 白天 vs 夜间 业务高峰期 vs 低峰期 优点:更准确 缺点:复杂、需要训练 ``` --- ## 基线指标体系 ### 基础流量指标 ``` 1. 带宽使用率 - 入站带宽(bps, Mbps, Gbps) - 出站带宽 - 总带宽 - 带宽利用率(%) 2. 包速率 - 包/秒(pps) - 入站包速率 - 出站包速率 3. 连接数 - 活跃连接数 - 新建连接速率(conn/s) - 并发连接数 - 连接失败率 4. 流量大小 - 平均包大小 - 最大包大小 - 总字节数 ``` ### 协议分布指标 ``` 1. 传输层协议 - TCP 占比(%) - UDP 占比 - 其他协议占比 2. 应用层协议 - HTTP/HTTPS 流量 - DNS 流量 - SSH/RDP 流量 - 数据库流量 - 邮件流量 3. 端口分布 - Top 10 目标端口 - Top 10 源端口 - 非常用端口流量 ``` ### 行为指标 ``` 1. 通信模式 - Top 10 源 IP - Top 10 目标 IP - Top 10 IP 对 - 内部 vs 外部流量比 2. 时间模式 - 小时流量分布 - 工作日 vs 周末 - 业务时间 vs 非业务时间 3. 异常行为 - 端口扫描检测 - 暴力破解检测 - 数据外泄检测 - 横向移动检测 ``` --- ## 数据收集方法 ### 流量捕获工具 ``` 1. 端口镜像(SPAN) 交换机配置: - 镜像所有端口到监控端口 - 镜像特定 VLAN - 镜像特定端口 优点:无侵入、完整流量 缺点:需要交换机支持、可能影响性能 2. 网络分路器(TAP) 物理设备,复制流量 优点:完全被动、不影响网络 缺点:需要硬件、成本较高 3. 主机抓包 tcpdump, Wireshark 优点:简单、无需额外设备 缺点:只能看到本机流量 4. 流数据(NetFlow/sFlow) 路由器/交换机导出流统计 优点:开销小、覆盖广 缺点:只有统计信息、无包内容 ``` ### 工具配置示例 ```bash # 1. tcpdump 长期抓包 tcpdump -i eth0 -s 1500 -C 100 -W 24 \ -w /var/log/pcap/traffic-%Y%m%d-%H.pcap # -s 1500: 捕获完整包 # -C 100: 每个文件 100MB # -W 24: 保留 24 个文件(循环) # 2. tshark 统计 tshark -i eth0 -q -z io,stat,60 \ -z conv,tcp -z conv,udp \ -w /var/log/tshark/stats.log # 3. ntopng 部署 apt install ntopng systemctl start ntopng # 访问 http://localhost:3000 # 4. NetFlow 配置(Cisco) interface GigabitEthernet0/1 ip flow ingress ip flow egress ip flow-export destination 192.168.1.100 2055 ip flow-export version 9 ``` ### 数据标准化 ``` 数据格式统一: - 时间戳:ISO 8601 (YYYY-MM-DDTHH:MM:SSZ) - IP 地址:点分十进制 - 端口:整数 - 协议:标准名称(TCP, UDP, HTTP) 数据清洗: - 去除无效数据 - 填补缺失值 - 去重 - 格式化 数据聚合: - 按时间聚合(1 分钟、5 分钟、1 小时) - 按 IP 聚合 - 按协议聚合 - 按应用聚合 ``` --- ## 基线建立流程 ### 步骤 1: 确定监控范围 ``` 需要监控的对象: □ 边界流量(互联网出入口) □ 关键服务器(数据库、应用服务器) □ 关键网段(DMZ、内网核心) □ 关键应用(Web、邮件、数据库) □ 关键用户(管理员、VIP) 优先级划分: P0: 必须监控(核心业务) P1: 重要监控(关键系统) P2: 一般监控(普通用户) ``` ### 步骤 2: 数据收集期 ``` 收集时长建议: - 最小:2 周(覆盖工作日和周末) - 推荐:4 周(覆盖完整业务周期) - 理想:3 个月(覆盖业务变化) 数据量估算: 1Gbps 链路 × 24 小时 × 14 天 = 21TB 原始数据 实际存储(聚合后): - 原始包:压缩后约 5TB - 流数据:约 500GB - 聚合统计:约 50GB 建议策略: - 原始包:保留 7 天 - 流数据:保留 30 天 - 聚合统计:保留 1 年 ``` ### 步骤 3: 数据分析 ```python # Python 基线分析示例 import pandas as pd import numpy as np from datetime import datetime # 读取流量数据 df = pd.read_csv('traffic_data.csv', parse_dates=['timestamp']) # 按小时聚合 hourly = df.groupby(df['timestamp'].dt.hour)['bytes'].agg(['mean', 'std', 'min', 'max', 'count']) # 计算基线 baseline = { 'hour_0': {'mean': hourly.loc[0, 'mean'], 'std': hourly.loc[0, 'std']}, 'hour_1': {'mean': hourly.loc[1, 'mean'], 'std': hourly.loc[1, 'std']}, # ... } # 计算阈值(3σ原则) thresholds = {} for hour in range(24): mean = hourly.loc[hour, 'mean'] std = hourly.loc[hour, 'std'] thresholds[hour] = { 'warning': mean + 2 * std, 'critical': mean + 3 * std } # 保存基线 import json with open('baseline.json', 'w') as f: json.dump(thresholds, f, indent=2) ``` ### 步骤 4: 基线验证 ``` 验证方法: 1. 历史数据回测 - 使用已知正常时段数据验证 - 误报率应 < 5% - 漏报率应 < 1% 2. 注入测试 - 模拟已知攻击流量 - 验证能否检测 - 调整阈值 3. 业务验证 - 与业务部门确认 - 排除业务高峰期 - 考虑特殊事件 4. 持续调优 - 每周审查告警 - 调整误报阈值 - 更新基线模型 ``` --- ## 异常检测技术 ### 统计方法 ``` 1. Z-Score 方法 Z = (X - μ) / σ |Z| > 3 → 异常 优点:简单、快速 缺点:假设正态分布 2. IQR 方法(四分位距) IQR = Q3 - Q1 异常:< Q1 - 1.5×IQR 或 > Q3 + 1.5×IQR 优点:不假设分布 缺点:需要足够数据 3. EWMA(指数加权移动平均) 更重视近期数据 适合动态基线 优点:适应变化 缺点:参数敏感 ``` ### 机器学习方法 ``` 1. 孤立森林(Isolation Forest) 基于树的方法检测异常 适合高维数据 2. 单类 SVM 学习正常数据边界 边界外为异常 3. 自动编码器 深度学习重建误差 误差大为异常 4. 时间序列预测 LSTM/ARIMA 预测 实际与预测差异大为异常 ``` ### 规则方法 ``` 预定义规则: - 流量 > 1Gbps → 告警 - 新建连接 > 1000/s → 告警 - 非常用端口流量 > 10% → 告警 - 夜间流量 > 白天 50% → 告警 组合规则: - (流量异常 AND 连接数异常) → 高优先级 - (流量异常 OR 连接数异常) → 中优先级 上下文规则: - 工作时间:宽松阈值 - 非工作时间:严格阈值 - 节假日:特殊阈值 ``` --- ## 实验环境搭建 ### 监控环境拓扑 ``` ┌─────────────────────────────────────────┐ │ 生产网络 │ │ │ │ ┌─────────┐ ┌─────────┐ │ │ │ Web │ │ DB │ │ │ │ Server │ │ Server │ │ │ └────┬────┘ └────┬────┘ │ │ │ │ │ │ └──────┬───────┘ │ │ │ │ │ ┌──────▼──────┐ │ │ │ 交换机 │ │ │ │ (带端口镜像) │ │ │ └──────┬──────┘ │ │ │ │ │ ┌──────▼──────┐ │ │ │ 监控网络 │ │ │ └──────┬──────┘ │ │ │ │ │ ┌─────────┼─────────┐ │ │ │ │ │ │ │ ┌──▼──┐ ┌───▼───┐ ┌──▼──┐ │ │ │流量 │ │ 分析 │ │ 告警 │ │ │ │收集 │ │ 服务器 │ │ 系统 │ │ │ └─────┘ └───────┘ └─────┘ │ └─────────────────────────────────────────┘ ``` ### 工具栈部署 ```bash # 1. ELK Stack 部署 # Elasticsearch apt install elasticsearch systemctl start elasticsearch # Logstash apt install logstash # 配置 input/filter/output # Kibana apt install kibana systemctl start kibana # 2. Grafana + Prometheus apt install prometheus grafana systemctl start prometheus grafana-server # 3. ntopng apt install ntopng systemctl start ntopng # 4. 自定义监控脚本 cat > /etc/cron.hourly/traffic-baseline.sh << 'EOF' #!/bin/bash # 每小时收集流量统计 INTERFACES="eth0 eth1" OUTPUT="/var/log/traffic/stats" for iface in $INTERFACES; do # 收集接口统计 cat /proc/net/dev | grep $iface >> $OUTPUT/$(date +%Y%m%d).log # 收集连接统计 netstat -an | awk '{print $6}' | sort | uniq -c >> $OUTPUT/connections.log # 收集 Top 连接 netstat -an | awk 'NR>2 {print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10 >> $OUTPUT/top_ips.log done EOF chmod +x /etc/cron.hourly/traffic-baseline.sh ``` --- ## 实战演练 ### 实验 1: 基础流量监控 **目标**:建立基础流量监控 **步骤**: ```bash # 1. 安装监控工具 apt install iftop nethogs vnstat # 2. 实时监控 iftop -i eth0 # 查看实时流量和 Top 连接 nethogs eth0 # 按进程查看流量 # 3. 历史统计 vnstat vnstat -d # 按天 vnstat -m # 按月 # 4. 配置 vnstat 守护进程 systemctl enable vnstat systemctl start vnstat # 5. 生成报告 vnstat --exportdb > /var/log/traffic/vnstat_export.json ``` ### 实验 2: 基线计算 **目标**:计算流量基线 **步骤**: ```python #!/usr/bin/env python3 # baseline_calc.py import pandas as pd import numpy as np import json from datetime import datetime, timedelta # 读取历史流量数据 def load_traffic_data(days=30): data = [] for i in range(days): date = (datetime.now() - timedelta(days=i)).strftime('%Y%m%d') try: df = pd.read_csv(f'/var/log/traffic/stats/{date}.log') data.append(df) except FileNotFoundError: continue return pd.concat(data) # 计算基线 def calculate_baseline(df): # 按小时分组 df['hour'] = pd.to_datetime(df['timestamp']).dt.hour baseline = {} for hour in range(24): hour_data = df[df['hour'] == hour]['bytes'] baseline[hour] = { 'mean': hour_data.mean(), 'std': hour_data.std(), 'min': hour_data.min(), 'max': hour_data.max(), 'p95': hour_data.quantile(0.95), 'p99': hour_data.quantile(0.99) } return baseline # 保存基线 def save_baseline(baseline): with open('/etc/monitoring/baseline.json', 'w') as f: json.dump(baseline, f, indent=2, default=str) if __name__ == '__main__': df = load_traffic_data(30) baseline = calculate_baseline(df) save_baseline(baseline) print("基线计算完成,已保存到 /etc/monitoring/baseline.json") ``` ### 实验 3: 异常检测 **目标**:实现异常检测 **步骤**: ```python #!/usr/bin/env python3 # anomaly_detection.py import json import smtplib from email.mime.text import MIMEText from datetime import datetime def load_baseline(): with open('/etc/monitoring/baseline.json', 'r') as f: return json.load(f) def get_current_traffic(): # 获取当前流量(从监控工具或 API) # 这里简化处理 import subprocess result = subprocess.run( ['cat', '/sys/class/net/eth0/statistics/rx_bytes'], capture_output=True, text=True ) return int(result.stdout.strip()) def check_anomaly(current, baseline, hour): hour_str = str(hour) if hour_str not in baseline: return None mean = baseline[hour_str]['mean'] std = baseline[hour_str]['std'] z_score = (current - mean) / std if std > 0 else 0 if abs(z_score) > 3: return { 'level': 'CRITICAL', 'z_score': z_score, 'current': current, 'expected': mean, 'deviation': (current - mean) / mean * 100 } elif abs(z_score) > 2: return { 'level': 'WARNING', 'z_score': z_score, 'current': current, 'expected': mean, 'deviation': (current - mean) / mean * 100 } return None def send_alert(anomaly): msg = MIMEText(f""" 流量异常告警 级别:{anomaly['level']} Z-Score: {anomaly['z_score']:.2f} 当前流量:{anomaly['current']} bytes 预期流量:{anomaly['expected']:.0f} bytes 偏差:{anomaly['deviation']:.1f}% 时间:{datetime.now()} """) msg['Subject'] = f"流量异常告警 - {anomaly['level']}" msg['From'] = 'monitor@example.com' msg['To'] = 'admin@example.com' with smtplib.SMTP('localhost') as server: server.send_message(msg) if __name__ == '__main__': baseline = load_baseline() current = get_current_traffic() hour = datetime.now().hour anomaly = check_anomaly(current, baseline, hour) if anomaly: print(f"检测到异常:{anomaly['level']}") send_alert(anomaly) else: print("流量正常") ``` ### 实验 4: 可视化仪表板 **目标**:创建监控仪表板 **步骤**: ```bash # 1. 安装 Grafana apt install grafana-server systemctl start grafana-server # 2. 配置数据源 # 访问 http://localhost:3000 # 添加 Prometheus 数据源 # 3. 创建仪表板 # 导入或创建以下面板: # 面板 1: 实时流量 # PromQL: rate(network_rx_bytes[5m]) # 面板 2: 流量趋势 # PromQL: sum(rate(network_rx_bytes[5m])) by (instance) # 面板 3: Top 连接 # PromQL: topk(10, sum by (dst) (rate(network_bytes[5m]))) # 面板 4: 协议分布 # PromQL: sum by (protocol) (rate(network_bytes[5m])) # 面板 5: 异常检测 # PromQL: abs((current - baseline) / baseline_std) > 3 # 4. 配置告警 # 设置阈值告警 # 配置通知渠道(邮件、Slack、钉钉等) ``` --- ## 监控与告警 ### 告警策略 ``` 告警级别定义: INFO(信息): - 流量略高于基线(1-2σ) - 无需立即行动 - 记录用于分析 WARNING(警告): - 流量明显高于基线(2-3σ) - 需要关注 - 准备响应 CRITICAL(严重): - 流量异常高(>3σ) - 立即响应 - 启动应急流程 EMERGENCY(紧急): - 流量极度异常(>5σ) - 可能正在遭受攻击 - 立即启动应急预案 ``` ### 告警渠道 ```bash # 1. 邮件告警 # 配置 Postfix 或 Sendmail # 使用 Python smtplib 发送 # 2. Slack 告警 curl -X POST -H 'Content-type: application/json' \ --data '{"text":"流量异常告警"}' \ https://hooks.slack.com/services/YOUR/WEBHOOK/URL # 3. 钉钉告警 curl 'https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN' \ -H 'Content-Type: application/json' \ -d '{"msgtype":"text","text":{"content":"流量异常告警"}}' # 4. 短信告警 # 使用云服务商 API(阿里云、腾讯云等) ``` ### 告警优化 ``` 减少误报: 1. 设置告警抑制 - 相同告警 5 分钟内只发一次 - 维护窗口暂停告警 2. 多指标确认 - 流量异常 + 连接数异常 → 确认告警 - 单一指标异常 → 降低级别 3. 时间窗口 - 持续 5 分钟异常才告警 - 避免瞬时波动 4. 基线更新 - 每周更新基线 - 考虑业务变化 - 季节性调整 ``` --- ## 总结与思考 ### 核心要点回顾 1. **基线重要性** - 异常检测的基础 - 需要持续维护 - 不是一劳永逸 2. **建立流程** - 确定监控范围 - 收集足够数据 - 计算统计基线 - 持续验证调优 3. **检测方法** - 统计方法(简单快速) - 机器学习(准确但复杂) - 规则方法(灵活但需维护) ### 深入思考问题 1. **基线漂移** - 业务增长导致基线变化 - 如何区分正常增长和异常? - 自适应基线 vs 固定基线? 2. **加密流量** - 90%+ 流量已加密 - 如何检测加密流量中的异常? - 元数据分析 vs 解密检测? 3. **云环境** - 云原生架构动态变化 - 传统基线方法适用吗? - 需要新的方法论? ### 实战建议 **中小企业**: 1. 从简单工具开始(vnstat, iftop) 2. 建立基础基线 3. 配置关键告警 4. 逐步完善 **大型企业**: 1. 部署专业监控(ELK, Grafana) 2. 建立完整基线体系 3. 机器学习异常检测 4. 自动化响应 **云环境**: 1. 使用云监控(CloudWatch, Azure Monitor) 2. 关注云原生指标 3. 容器流量监控 4. Serverless 监控 --- ## 参考资料 ### 工具资源 - [ntopng](https://www.ntop.org/) - [ELK Stack](https://www.elastic.co/) - [Grafana](https://grafana.com/) - [Prometheus](https://prometheus.io/) ### 在线资源 - [网络监控最佳实践](https://www.sans.org/) - [基线建立指南](https://www.nist.gov/) ### 书籍推荐 - 《网络流量分析》 - 《异常检测技术》 - 《网络安全监控》 --- **标记 明日预告**:Day 19 - 网络取证基础 > 本文内容仅供学习和研究使用,请勿用于非法目的。所有实验请在隔离环境中进行。 --- *本文是 365 天信息安全技术系列的第 18 篇,精编版本*
myh0st
2026年4月13日 23:11
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码