saivoru777-ship-it/NIDS
GitHub: saivoru777-ship-it/NIDS
一个基于Python与Scapy的轻量级NIDS,实时捕获流量并结合签名与异常检测识别常见网络攻击。
Stars: 0 | Forks: 0
# 网络入侵检测系统(NIDS)
一个基于Python的网络入侵检测系统,能够实时监控网络流量、检测潜在安全威胁,并提供全面的告警功能。
## 功能特性
### 🔍 基于签名的检测
- **端口扫描检测**:识别横向和纵向端口扫描
- **SYN洪水检测**:检测TCP SYN洪水攻击
- **ICMP洪水检测**:识别ICMP泛洪尝试
- **ARP欺骗检测**:检测ARP中毒攻击
- **恶意载荷检测**:识别SQL注入、XSS及其他攻击模式
- **暴力破解检测**:监控SSH、RDP、FTP的失败连接尝试
### 📊 基于异常的检测
- **流量体积异常**:通过统计分析检测不寻常的流量模式
- **协议分布异常**:识别异常的协议使用
- **连接模式分析**:检测不寻常的端口使用和连接行为
- **基线分析**:建立正常流量模式用于对比
- **行为分析**:使用统计方法(标准差、Z分数)
### 📈 流量分析
- 使用Scapy进行实时数据包捕获与分析
- 协议分布统计
- 顶级通信者识别
- 端口使用分析
- 连接跟踪
- 流量速率监控
### 🚨 告警管理
- 颜色编码的严重级别(严重、高、中、低)
- 实时控制台告警
- JSON/CSV日志记录
- 详细的威胁报告
- 告警统计与摘要
## 架构
```
NIDS/
├── src/
│ ├── capture/
│ │ └── packet_sniffer.py # Packet capture with Scapy
│ ├── detection/
│ │ ├── signature_based.py # Signature-based detection
│ │ └── anomaly_based.py # Anomaly-based detection
│ ├── analysis/
│ │ └── traffic_analyzer.py # Traffic analysis
│ ├── alerts/
│ │ └── alert_manager.py # Alert handling
│ └── utils/
│ └── helpers.py # Utility functions
├── rules/
│ └── signatures.json # Attack signatures
├── config/
│ └── config.yaml # Configuration
├── logs/ # Alert logs
├── tests/ # Tests
├── requirements.txt
├── main.py # Entry point
└── README.md
```
## 安装
### 先决条件
- Python 3.7 或更高版本
- 根/管理员权限(数据包捕获需要)
- macOS、Linux 或 Windows
### 步骤 1:克隆或下载
```
cd NIDS
```
### 步骤 2:安装依赖
```
pip install -r requirements.txt
```
### 步骤 3:配置
编辑 `config/config.yaml` 进行自定义配置:
- 要监控的网络接口
- 检测阈值
- 基线收集时间
- 日志偏好设置
要查找网络接口:
```
sudo python3 main.py --list-interfaces
```
## 用法
### 基本用法
使用默认设置运行(使用配置文件中的接口):
```
sudo python3 main.py
```
### 指定网络接口
```
sudo python3 main.py -i eth0
```
### 自定义配置
```
sudo python3 main.py -c custom_config.yaml
```
### 列出可用接口
```
sudo python3 main.py --list-interfaces
```
### 命令行选项
```
usage: main.py [-h] [-i INTERFACE] [-c CONFIG] [--list-interfaces]
optional arguments:
-h, --help show this help message and exit
-i INTERFACE, --interface INTERFACE
Network interface to monitor
-c CONFIG, --config CONFIG
Configuration file path
--list-interfaces List available network interfaces and exit
```
## 配置
### 网络设置
```
network:
interface: "en0" # Network interface to monitor
promiscuous_mode: true # Enable promiscuous mode
packet_count: 0 # 0 for continuous capture
```
### 签名检测
```
signature_detection:
enabled: true
port_scan:
enabled: true
threshold: 20 # Number of unique ports
time_window: 60 # seconds
syn_flood:
enabled: true
threshold: 100 # SYN packets without ACK
time_window: 10 # seconds
```
### 异常检测
```
anomaly_detection:
enabled: true
baseline_collection_time: 300 # 5 minutes
traffic_volume:
enabled: true
std_deviation_threshold: 3 # Standard deviations
protocol_distribution:
enabled: true
deviation_threshold: 0.3 # 30% deviation
```
## 检测技术
### 1. 端口扫描检测
跟踪每个源IP访问的唯一目标端口:
- **阈值**:60秒内20+个端口
- **检测方法**:端口计数
- **严重级别**:高
### 2. SYN洪水检测
监控没有对应ACK响应的SYN数据包:
- **阈值**:10秒内100+个SYN数据包
- **检测方法**:SYN/ACK比率分析
- **严重级别**:严重
### 3. ICMP洪水检测
跟踪ICMP数据包速率:
- **阈值**:5秒内50+个ICMP数据包
- **检测方法**:数据包计数
- **严重级别**:高
### 4. ARP欺骗检测
监控IP-MAC地址映射:
- **检测方法**:ARP缓存不一致
- **严重级别**:严重
### 5. 流量体积异常
数据包速率的统计分析:
- **检测方法**:Z分数(3个以上标准差)
- **严重级别**:中
### 6. 协议分布异常
将当前协议使用与基线进行比较:
- **检测方法**:频率偏差(30%以上)
- **严重级别**:中
## 测试NIDS
### 生成测试流量
**端口扫描(使用nmap)**:
```
nmap -p 1-100
```
**SYN洪水(使用hping3)**:
```
sudo hping3 -S --flood -p 80
```
**ICMP洪水**:
```
sudo hping3 --icmp --flood
```
### 验证检测
监控控制台输出以查看告警,并检查 `logs/` 目录中的日志文件。
## 告警严重级别
- **🔴 严重**:SYN洪水、ARP欺骗、关键漏洞
- **🟡 高**:端口扫描、ICMP洪水、暴力破解尝试
- **🔵 中**:异常流量模式、异常协议
- **🟢 低**:信息性告警、微小异常
## 日志文件
日志存储在 `logs/` 目录中,并带有时间戳:
- **JSON格式**:`nids_alerts_YYYYMMDD_HHMMSS.json`
- **CSV格式**:`nids_alerts_YYYYMMDD_HHMMSS.csv`
每个告警包含:
- 告警ID
- 时间戳
- 类型和严重级别
- 源/目标IP地址
- 详细描述
- 附加元数据
## 项目时间线
**2024年11月 - 2025年5月**
- ✅ **阶段1**:基础与数据包捕获(第1-2周)
- ✅ **阶段2**:基于签名的检测(第3-4周)
- ✅ **阶段3**:基于异常的检测(第5-7周)
- ✅ **阶段4**:集成与告警 — SQLite数据库、Flask仪表板、邮件通知(第8-9周)
- ✅ **阶段5**:测试与文档 — 60+单元测试、GitHub Actions CI(第10-12周)
## 技术栈
- **Scapy**:数据包操作与捕获
- **NumPy**:统计计算
- **Flask**:Web仪表板
- **SQLite**:持久化告警存储
- **PyYAML**:配置管理
- **Colorama**:彩色终端输出
## 性能考虑
- **基线收集**:前5分钟(可配置)
- **内存使用**:使用环形缓冲区和窗口机制,效率高
- **CPU使用**:优化的数据包处理
- **可扩展性**:可处理中等流量负载
## 安全注意事项
⚠️ **重要的安全考虑**:
1. **权限**:NIDS需要root/管理员权限进行数据包捕获
2. **生产使用**:这是一个教育/研究项目
3. **误报**:根据网络环境调整阈值
4. **隐私**:数据包捕获可能包含敏感数据
5. **法律**:确保遵守网络监控策略
## 故障排除
### 权限被拒绝
```
# 使用 sudo 运行
sudo python3 main.py
```
### 接口未找到
```
# 列出可用接口
sudo python3 main.py --list-interfaces
# 使用正确接口更新 config/config.yaml
```
### 模块未找到
```
# 重新安装依赖项
pip install -r requirements.txt
```
## 后续增强功能
潜在的高级版本改进:
- [x] 用于可视化的Web仪表板(Flask — 已实现)
- [x] 数据库集成(SQLite — 已实现)
- [x] 邮件通知(SMTP — 已实现)
- [ ] 基于机器学习的异常检测
- [ ] 分布式NIDS部署
- [ ] 深度数据包检测(DPI)
- [ ] 与SIEM系统集成
- [ ] 协议特定分析器
- [ ] 攻击者地理位置定位
- [ ] 自动响应机制(防火墙规则)
## 贡献
这是一个作为网络安全课程一部分开发的教育项目。
## 许可证
仅限教育/研究使用。
## 参考资料
- [Scapy 文档](https://scapy.readthedocs.io/)
- [NIST 网络入侵检测指南](https://csrc.nist.gov/)
- 《网络安全:公共网络中的私密通信》
## 作者
作为网络安全项目的一部分开发(2024年11月 - 2025年5月)
**注意**:本NIDS设计用于教育目的和安全研究。始终确保在监控网络流量前获得适当授权。
标签:ARP欺骗检测, CISA项目, CSV日志, DNS枚举, DNS 解析, ICMP洪水检测, IP 地址批量处理, JSON日志, NIDS, Python网络安全, Scapy, SYN洪水检测, Top Talkers, Web报告查看器, XSS, 严重级别, 免杀技术, 包捕获, 协议分布分析, 告警管理, 基线建模, 威胁报告, 安全告警, 实时控制台告警, 实时流量监控, 容器化, 开发者评论分析, 开源安全工具, 异常检测, 恶意代码分类, 恶意载荷检测, 无线安全, 暴力破解检测, 流量统计分析, 流量速率监控, 漏洞情报, 端口使用分析, 端口扫描检测, 签名检测, 网络安全审计, 网络安全工具, 连接行为分析, 连接跟踪, 逆向工具, 逆向工程平台