Prayas-Vijay/-Network-Intrusion-Detection-System
GitHub: Prayas-Vijay/-Network-Intrusion-Detection-System
基于 Suricata 的网络入侵检测系统,通过自定义规则和合成流量实现安全检测与告警可视化。
Stars: 0 | Forks: 0
# CodeAlpha_NetworkIDS
## 📌 概述
本项目是 **任务 4:网络入侵检测系统**,作为 **CodeAlpha 网络安全实习** 的一部分完成。它使用 **Suricata**(一个开源 IDS/IPS 引擎)和自定义规则集来检测常见的攻击模式 —— 端口扫描、Ping 扫射、明文凭证提交、扫描工具特征、FTP 匿名登录、DNS 隧道指示符以及不安全的 Telnet 流量 —— 并在独立的 HTML 仪表板中可视化结果。
## ⚠️ 仅限合法与合规使用
仅在你**拥有**或获得**明确书面授权**可以监控的网络上部署此项目。本仓库包含的“攻击”流量完全是**合成的** —— 离线使用 `scapy` 生成并写入 `.pcap` 文件 —— 因此可以在**不触碰任何真实网络或主机**的情况下演示和测试这些规则。本仓库中的任何内容都不会执行实时扫描、漏洞利用或流量注入。
## 🎯 目标
- 将 Suricata 设置为基于网络的 IDS
- 编写自定义检测规则和告警阈值
- 监控流量(实时接口或离线 `.pcap` 重放)以发现可疑活动
- 讨论检测到的入侵的响应/缓解方案
- 使用仪表板可视化告警(协议/严重程度细分、Top talkers、告警表格)
## 🛠 工具与技术
- **Suricata 7.x** — IDS/IPS 引擎
- **Python 3 + scapy** — 合成测试流量生成
- **Python 3** — `eve.json` 告警解析 → HTML 仪表板(无外部 JS/CSS 依赖)
## 📂 仓库结构
```
CodeAlpha_NetworkIDS/
├── rules/
│ └── custom.rules # 10 custom detection signatures
├── config/
│ ├── suricata.yaml # Suricata config (points to custom.rules only)
│ ├── classification.config # Standard Suricata classification types
│ └── reference.config # Standard Suricata reference types
├── scripts/
│ ├── generate_test_traffic.py # Builds a synthetic .pcap to test the rules
│ └── alert_dashboard.py # Parses eve.json -> dashboard.html
├── output/
│ ├── test_traffic.pcap # Synthetic traffic used for the demo run
│ ├── eve.json # Sample alert log from that run
│ ├── fast.log # Human-readable alert summary
│ └── dashboard.html # Generated visual dashboard
└── README.md
```
## 🧩 自定义检测规则 (`rules/custom.rules`)
| SID | 检测内容 |
|---|---|
| 9000001 | TCP 端口扫描(单一主机在 10 秒内发起 15 次以上 SYN) |
| 9000002 | ICMP Ping 扫射/泛洪(单一主机在 5 秒内发起 20 次以上 Ping) |
| 9000003 | 超大 ICMP 数据包(>1024 字节 —— DoS 探测指示符) |
| 9000004 | 通过 HTTP POST 提交明文密码 |
| 9000005–9000007 | 已知扫描工具的 User-Agent(sqlmap, Nikto, Nmap NSE) |
| 9000008 | FTP 匿名登录尝试 |
| 9000009 | 异常长的 DNS 查询(可能存在隧道/数据外发) |
| 9000010 | 明文 Telnet 流量 |
所有规则仅用于检测 —— 它们本身不会进行拦截、漏洞利用或生成攻击流量。
## ▶️ 如何复现演示(安全,离线)
```
# 1. 安装 Suricata
sudo apt-get install -y suricata
# 2. 生成合成测试流量(未触及真实网络)
pip install scapy --break-system-packages
python3 scripts/generate_test_traffic.py # writes output/test_traffic.pcap
# 3. 验证规则是否正确加载
suricata -T -c config/suricata.yaml -l output/
# 4. 针对 offline pcap 运行 Suricata
suricata -c config/suricata.yaml -l output/ -r output/test_traffic.pcap -k none
# 5. 根据生成的 alerts 构建仪表板
python3 scripts/alert_dashboard.py output/eve.json output/dashboard.html
```
在任意浏览器中打开 `output/dashboard.html` —— 它是完全独立的。
## 🌐 在实时接口上运行(真实监控)
要监控真实流量而不是 pcap 文件,请针对实时接口运行 Suricata(首先在 `suricata.yaml` 中调整 `HOME_NET` 以匹配你的实际网络):
```
sudo suricata -c config/suricata.yaml -i eth0 -l output/
```
然后实时追踪生成的告警:
```
tail -f output/eve.json | grep '"event_type":"alert"'
```
## 🚨 响应机制(针对检测到的入侵)
在此配置下,Suricata 以 **IDS 模式**运行(仅检测和记录)。转向主动响应的选项,按风险/复杂性从低到高排列:
1. **告警 pipeline** — 将 `eve.json` 告警转发到 SIEM(例如通过 Filebeat → Elasticsearch,或通过简单的脚本/webhook 发送至 Slack/电子邮件),以便人工能立即收到通知。
2. **自动阻断(IPS 模式)** — Suricata 支持使用 `drop` 规则的内联 `NFQUEUE` 或 `AF_PACKET` IPS 模式,或者告警可以触发防火墙规则(例如通过 `fail2ban` 读取 `eve.json`,或通过调用 `iptables`/`nftables` 的脚本)来阻断违规的源 IP。
3. **速率限制** — 对于扫描/扫射类型的告警,一种轻量级的响应是暂时对源 IP 进行速率限制,而不是直接拦截,从而减少误报的影响。
本仓库有意止步于检测 + 记录 + 仪表板展示,因为在共享/生产网络上进行自动阻断需要仔细调整,以避免拦截合法流量。
## 📊 仪表板
`output/dashboard.html` 显示:
- 告警总数、触发的唯一签名、唯一源 IP、高严重程度计数
- 按签名、严重程度和协议细分的告警
- 按告警计数排名的 Top 源 IP
- 一个直观且完全可排序的告警表格(时间、源、目标、协议、签名、严重程度)
## 🧠 调优笔记(用于报告)
- Telnet 规则(`9000010`)在端口扫描测试期间也会触发一次,因为扫描恰好探测了 23 端口,而该规则不要求实际的 Telnet 应用层数据 —— 这是一个很好的真实世界案例,说明了为什么需要针对真实流量对规则进行迭代调优以减少误报(例如添加 `app-layer-protocol:telnet` 或要求最小 payload)。
- 阈值(扫描和扫射规则上的 `count`/`seconds`)是保守选择的,这样单次合法的重试不会触发告警 —— 请根据你实际网络的基线流量调整这些参数。
## 👤 作者
**Prayas Vijay**
B.Tech. 计算机科学与工程 (CSE) 学生
作为 **CodeAlpha 网络安全实习(任务 4)** 的一部分完成。
标签:IP 地址批量处理, Metaprompt, Python, Suricata, 插件系统, 无后门, 现代安全运营, 网络安全, 网络流量分析, 防御绕过, 隐私保护