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, 插件系统, 无后门, 现代安全运营, 网络安全, 网络流量分析, 防御绕过, 隐私保护