AnshioRenin/Snort-IDS-Network-Intrusion-Detection-System-Setup-Configuration

GitHub: AnshioRenin/Snort-IDS-Network-Intrusion-Detection-System-Setup-Configuration

基于 Snort 在 Kali Linux 上搭建的网络入侵检测系统,包含 8 条覆盖常见攻击模式的自定义检测规则及完整的配置、测试与告警分析流程。

Stars: 0 | Forks: 0

# 🚨 Snort IDS — 网络入侵检测系统设置与配置 ![Snort](https://img.shields.io/badge/Snort-IDS-CC0000?style=for-the-badge) ![Kali Linux](https://img.shields.io/badge/Kali_Linux-557C94?style=for-the-badge&logo=kali-linux&logoColor=white) ![网络安全](https://img.shields.io/badge/Network-Security-blue?style=for-the-badge) ![模块](https://img.shields.io/badge/Module-Communications%20%26%20Networking%20Security-orange?style=for-the-badge) ## 📌 概述 本项目展示了**Snort**的完整设置与配置过程——这是一款开源的、基于规则的入侵检测系统(IDS),涵盖了从创建目录结构到实时流量监控和告警生成的全过程。 针对8种不同的攻击类型编写了自定义检测规则,并在实时流量中进行了测试,通过分析告警日志验证了检测结果。该项目证实了 Snort 作为实时网络安全监控工具的能力。 **测试期间成功触发的告警:** - ✅ ICMP echo request 检测(侦察) - ✅ ICMP ping sweep(主机发现) - ✅ TCP SYN 端口扫描检测 - ✅ SSH 暴力破解检测(端口 22) - ✅ 可疑 HTTP user-agent(扫描器检测) - ✅ SQL injection 尝试(`%27` 检测) - ✅ FTP 暴力破解检测(端口 21) - ✅ DNS zone transfer 尝试(端口 53) ## 🎯 目标 - 在 Kali Linux 上从零开始配置完整的 Snort IDS 环境 - 编写针对 8 种常见攻击模式的自定义检测规则 - 针对测试网络接口以实时监控模式运行 Snort - 分析生成的告警日志并评估其安全影响 - 评估 Snort 作为网络防御工具的优势与局限性 ## 🏗️ 目录结构 ``` /etc/snort/ # Main configuration directory ├── snort.conf # Master configuration file ├── rules/ │ └── local.rules # Custom detection rules ├── builtin_rules/ # Snort pre-configured rules └── so_rules/ # Shared object (dynamically loaded) rules /var/log/snort/ # Alert and packet logs /usr/local/lib/snort_plugins/ # Optional third-party plugins ``` ### 设置命令 ``` # 创建所有必需的目录 sudo mkdir -p /etc/snort sudo mkdir -p /etc/snort/rules sudo mkdir -p /etc/snort/builtin_rules sudo mkdir -p /etc/snort/so_rules sudo mkdir -p /var/log/snort sudo mkdir -p /usr/local/lib/snort_plugins ``` ## ⚙️ 配置 ### snort.conf(关键设置) ``` sudo nano /etc/snort/snort.conf ``` ``` -- Network scope HOME_NET = "10.0.2.0/24" -- Internal network to monitor EXTERNAL_NET = "any" -- All external traffic analysed -- Enable all rules by default ips = { enable_builtin_rules = true, rules = local_rules } -- Alert output format outputs = { alert_fast = { enabled = true, file = true, packet = true } } -- Include custom rules file include = '/etc/snort/rules/local.rules' ``` ## 📋 自定义规则(local.rules) 编写了 8 条自定义规则以检测常见攻击模式: ``` sudo nano /etc/snort/rules/local.rules ``` ### 规则 1 — ICMP Echo Request 检测 针对任何发往家庭网络的 ICMP ping 发出告警——表明存在侦察活动。 ``` alert icmp any any -> $HOME_NET any (msg:"ICMP Test"; sid:1000001; rev:1;) ``` ### 规则 2 — ICMP Ping Sweep 检测 1 秒内来自同一来源的多个 ICMP 请求——主机发现扫描。 ``` alert icmp any any -> any any (msg:"ICMP Ping Sweep"; detection_filter:track by_src, count 5, seconds 1; sid:1000002; rev:1;) ``` ### 规则 3 — TCP 端口扫描 标记来自同一来源的多个 SYN packet——典型的端口扫描行为。 ``` alert tcp any any -> any any (msg:"Potential TCP Port Scan"; flags:S; detection_filter:track by_src, count 5, seconds 2; sid:1000003; rev:1;) ``` ### 规则 4 — SSH 暴力破解 检测针对端口 22 的快速重复连接尝试——自动化暴力破解攻击。 ``` alert tcp any any -> any 22 (msg:"Potential SSH Brute Force"; flags:S; flow:stateless; detection_filter:track by_src, count 5, seconds 10; sid:1000004; rev:1;) ``` ### 规则 5 — 可疑 HTTP User-Agent 针对来自已知扫描器 user-agent 字符串(Nmap, Spider, Proxy, Scan)的 HTTP 请求发出告警。 ``` alert tcp any any -> any 80 (msg:"Suspicious User Agent - Possible Scanner"; flow:established,to_server; content:"User-Agent|3A| "; http_header; pcre:"/(?:Scan|Proxy|Spider|Nmap)/i"; sid:1000005; rev:1;) ``` ### 规则 6 — SQL Injection 尝试 检测 HTTP 请求中的 `%27`(URL 编码的单引号)——常见的 SQL injection 指标。 ``` alert tcp any any -> any any (msg:"SQL Injection Attempt"; flow:to_server,established; content:"%27"; sid:1000006; rev:1;) ``` ### 规则 7 — FTP 暴力破解 监控针对端口 21 的多次登录尝试——针对 FTP 服务的暴力破解。 ``` alert tcp any any -> any 21 (msg:"FTP Brute Force Attempt"; flow:established,to_server; detection_filter:track by_src, count 5, seconds 10; sid:1000007; rev:1;) ``` ### 规则 8 — DNS Zone Transfer 尝试 检测未经授权的 DNS AXFR zone transfer 请求——可能会暴露完整的内部 DNS 结构。 ``` alert tcp any any -> $HOME_NET 53 (msg:"DNS Zone Transfer Attempt"; flow:established,to_server; content:"|00 00 FC|"; offset:12; depth:3; sid:1000008; rev:1;) ``` ## 🔒 文件权限 对所有 Snort 目录应用了安全权限: ``` # 允许 Snort 写入日志(所有人可读/写) sudo chmod 666 /var/log/snort # 限制 config、logs 和 plugins — 仅限 root(读/写/执行) # 组成员:读和执行 | 其他:无访问权限 sudo chmod -R 750 /etc/snort sudo chmod -R 750 /var/log/snort sudo chmod -R 750 /usr/local/lib/snort_plugins ``` ## 🚀 运行 Snort ### 步骤 1 — 测试配置(无实时捕获) ``` sudo snort -T -c /etc/snort/snort.conf -i eth0 ``` 验证 `snort.conf` 的语法和规则加载情况,而不启动实时监控。在继续之前,请修复显示的任何错误。 ### 步骤 2 — 实时监控模式 ``` sudo snort -c /etc/snort/snort.conf -i eth0 -A alert_fast ``` 在 `eth0` 接口上以实时模式启动 Snort,以 `alert_fast` 格式输出告警——提供每个检测到的事件的快速摘要。 ## 🚨 测试期间生成的告警 所有 5 种核心告警类型均已成功触发并记录: | 告警 | 来源 | 描述 | |-------|--------|-------------| | **ICMP 测试** | 192.168.1.10 → 内部 | 检测到 ICMP echo request — 可能是侦察 | | **ICMP Ping Sweep** | 单一来源 → 多台主机 | 几秒内的多个 ICMP packet — 主机发现扫描 | | **TCP 端口扫描** | 外部 → 10.0.2.10 | 针对多个端口的多个 SYN packet — 服务发现 | | **SSH 暴力破解** | 外部 → 端口 22 | 反复登录失败 — 自动化凭证攻击 | | **可疑 User Agent** | HTTP 请求 | 在 HTTP header 中检测到扫描器/机器人 user-agent 字符串 | ### 示例告警日志格式(alert_fast) ``` [**] [1:1000001:1] ICMP Test [**] [Priority: 0] 04/22-14:32:11.123456 192.168.1.10 -> 10.0.2.5 ICMP TTL:64 TOS:0x0 ID:1234 IpLen:20 DgmLen:84 Type:8 Code:0 ID:12345 Seq:1 ECHO ``` ## 🔐 安全影响 | 告警类型 | 安全风险 | 严重程度 | |-----------|--------------|----------| | ICMP 泛洪 / ping sweep | DoS 或侦察 — 探测存活主机 | 🟠 高危 | | TCP SYN 泛洪 | DoS/DDoS — 耗尽服务器资源 | 🔴 严重 | | SSH/FTP 暴力破解 | 凭证泄露 — 未经授权的访问 | 🔴 严重 | | SQL injection | 数据库篡改 — 数据窃取 | 🔴 严重 | | DNS zone transfer | 网络拓扑泄露 — 为未来攻击提供便利 | 🟠 高危 | ## 📊 安全分析 **此 Snort 配置的优势:** - `detection_filter:track by_src` 要求在告警前达到阈值次数,从而减少了误报 - 自定义规则针对与受监控网络相关的特定攻击模式 - 涵盖网络层(ICMP、TCP)和应用层(HTTP、SSH、DNS、FTP)威胁 **局限性:** - 基于规则的检测无法识别 zero-day 攻击或新型 APT 技术 - 需要定期更新规则以跟上新威胁模式的步伐 - 仅作为 IDS(检测和告警)运行 — 而非 IPS(主动拦截) **建议:** - 将 Snort 与 Talos Intelligence 威胁情报源集成以获取规则更新 - 结合防火墙或 IPS(例如 Suricata)以实现主动拦截功能 - 添加 SIEM 集成(例如 Splunk、ELK)以进行集中式日志分析 ## 🔧 工具与环境 | 工具 | 用途 | |------|---------| | Snort(开源) | 网络 IDS — 实时流量监控与告警 | | Kali Linux | 测试环境 | | Nano | 配置文件编辑 | | eth0 接口 | 受监控的网络接口 | ## 📚 参考资料 - Snort 文档 — https://www.snort.org/documentation - Talos Intelligence(Snort 规则源)— https://talosintelligence.com/ - SANS Institute — https://www.sans.org/ ## 👤 作者 **Anshio Renin Micheal Antony Xavier Soosammal** 网络安全理学硕士 | 都柏林商学院 模块:通信与网络安全 (B9CY103) | 讲师:Arturo Vázquez Zepeda 🔗 [LinkedIn](https://linkedin.com/in/anshio-renin-ms) | 在爱尔兰开放工作机会
标签:CISA项目, DOE合作, rizin, 插件系统, 流量监控, 红队行动, 网络安全, 规则编写, 隐私保护