d4rkali/suricata-ids-ips-setup

GitHub: d4rkali/suricata-ids-ips-setup

一份面向 Linux 平台的 Suricata 入侵检测与防御系统完整配置教程,涵盖安装、自定义规则编写、实时告警监控、IPS 模式流量阻断及日志分析。

Stars: 0 | Forks: 0

# Suricata IDS/IPS 设置指南 在 Linux 上将 Suricata 设置为网络入侵检测和防御系统的完整演练。涵盖了安装、自定义规则编写、实时警报监控、IPS 模式下的丢包处理以及结构化日志分析。 ## 📖 目录 1. [什么是 Suricata?](#what-is-suricata) 2. [安装与配置](#1-installation--configuration) 3. [以 IDS 模式运行](#2-running-in-ids-mode) 4. [编写自定义检测规则](#3-writing-custom-detection-rules) 5. [以 IPS 模式运行 — 阻断流量](#4-running-in-ips-mode--blocking-traffic) 6. [日志分析](#5-log-analysis) 7. [要点总结](#key-takeaways) ## 什么是 Suricata? Suricata 是一款开源的网络威胁检测引擎,广泛应用于全球的企业 SOC 环境中。它有两种运行模式: - **IDS(入侵检测系统)** — 被动监控网络流量并生成警报,不会中断流量 - **IPS(入侵防御系统)** — 主动内联检查并在恶意数据包到达目标之前丢弃它们 ## 1. 安装与配置 ### 安装 Suricata 并更新规则集 ``` sudo apt update sudo apt install -y suricata suricata-update # 下载 Emerging Threats community 规则集 sudo suricata-update ``` ### 在部署前验证配置 在启动或重启 Suricata 之前务必进行验证。这可以尽早发现语法错误。 ``` sudo suricata -T -c /etc/suricata/suricata.yaml ``` **预期输出:** ``` Configuration provided was successfully loaded. Exiting. ``` ### 确认构建信息 ``` suricata --build-info ``` ![安装成功](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/7591b45e0f012633.png) ## 2. 以 IDS 模式运行 IDS 模式被动监控网络接口上的流量,并将警报写入日志文件,而不会阻断任何流量。 ### 查找活动网络接口 ``` ip a ``` 查找你的接口名称 —— 通常是 `eth0`、`ens33` 或 `enp0s3`。 ### 以 IDS 模式启动 Suricata ``` sudo suricata -c /etc/suricata/suricata.yaml -i eth0 ``` ![IDS 模式运行中](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/659d5063f1012634.png) ### 实时监控警报 打开第二个终端并跟踪警报日志: ``` tail -f /var/log/suricata/fast.log ``` ### 生成测试流量以验证规则触发 ``` curl http://testmynids.org/uid/index.html ``` 这是一个专门设计用于触发 Suricata Emerging Threats 规则的公开测试 URL。在 `fast.log` 中出现成功的警报确认 Suricata 运行正常。 ![fast.log 中的实时警报](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/3ee7bb3677012635.png) ## 3. 编写自定义检测规则 Suricata 规则遵循以下结构: ``` action protocol src_ip src_port -> dest_ip dest_port (options) ``` ### 创建本地规则文件 ``` sudo nano /etc/suricata/rules/local.rules ``` ### 示例规则 — 检测对 youtube.com 的 DNS 查询 ``` alert dns any any -> any any (msg:"YouTube DNS Lookup Detected"; dns.query; content:"youtube.com"; nocase; sid:1000002; rev:1;) ``` **规则解析:** - `alert` — 匹配时生成警报 - `dns` — 匹配 DNS 协议流量 - `dns.query` — 专门检查 DNS 查询字段 - `content:"youtube.com"` — 在查询中匹配此字符串 - `nocase` — 不区分大小写匹配 - `sid:1000002` — 唯一规则 ID(本地规则使用 1000000+) ![YouTube 规则已写入](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/426170a94c012636.png) ### 在 suricata.yaml 中注册本地规则 ``` sudo nano /etc/suricata/suricata.yaml ``` 找到 `rule-files:` 部分并添加你的文件: ``` rule-files: - suricata.rules - local.rules # Add this line ``` ### 验证并重启 ``` sudo suricata -T -c /etc/suricata/suricata.yaml sudo systemctl restart suricata ``` ### 验证规则是否触发 ``` curl https://www.youtube.com grep "YouTube" /var/log/suricata/fast.log ``` ![YouTube 警报已触发](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/607bd95f0a012638.png) ## 4. 以 IPS 模式运行 — 阻断流量 IPS 模式使用 NFQUEUE 在数据包被操作系统处理之前进行拦截,允许 Suricata 内联丢弃它们。 ### 向 local.rules 添加 DROP 规则 ``` sudo nano /etc/suricata/rules/local.rules ``` 添加: ``` drop dns any any -> any any (msg:"BLOCK Facebook DNS"; dns.query; content:"facebook.com"; nocase; sid:1000003; rev:1;) ``` `drop` 操作会静默丢弃匹配的数据包 —— 客户端侧的连接将会超时。 ### 通过 NFQUEUE 重定向流量 ``` sudo iptables -I INPUT -j NFQUEUE --queue-num 0 sudo iptables -I OUTPUT -j NFQUEUE --queue-num 0 sudo iptables -I FORWARD -j NFQUEUE --queue-num 0 ``` ### 以 IPS 模式启动 Suricata ``` sudo suricata -c /etc/suricata/suricata.yaml -q 0 ``` ### 测试阻断效果 ``` curl https://www.facebook.com # 连接应该超时 — 流量正在被丢弃 ``` ![Facebook 流量被阻断](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/e9e990f4b2012639.png) ### 测试后恢复正常流量 测试完成后务必清理 iptables 规则: ``` sudo iptables -D INPUT -j NFQUEUE --queue-num 0 sudo iptables -D OUTPUT -j NFQUEUE --queue-num 0 sudo iptables -D FORWARD -j NFQUEUE --queue-num 0 ``` ## 5. 日志分析 Suricata 将结构化的 JSON 日志写入 `eve.json` —— 这是用于分析和 SIEM 集成的主要日志文件。 ### 安装 jq 用于 JSON 解析 ``` sudo apt install -y jq ``` ### 查看所有警报事件 ``` jq 'select(.event_type=="alert")' /var/log/suricata/eve.json ``` ### 提取触发次数最多的签名 ``` jq -r 'select(.event_type=="alert") | .alert.signature' /var/log/suricata/eve.json \ | sort | uniq -c | sort -rn | head -20 ``` ### 显示包含源 IP 和目标 IP 的警报 ``` jq -r 'select(.event_type=="alert") | "\(.src_ip) -> \(.dest_ip) : \(.alert.signature)"' \ /var/log/suricata/eve.json ``` ### 快速生成人类可读的摘要 ``` cat /var/log/suricata/fast.log ``` ![使用 jq 进行日志分析](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/5e4b5ade78012640.png) ## 🛠️ 使用的工具 | 工具 | 用途 | |------|---------| | Suricata | 网络 IDS/IPS 引擎 | | Emerging Threats 规则集 | 社区威胁检测规则 | | iptables + NFQUEUE | 用于 IPS 模式的数据包重定向 | | jq | JSON 日志解析与分析 | | Kali Linux | 实验环境 | ## 要点总结 - **IDS 与 IPS** — IDS 检测并发出警报,IPS 检测并阻断。两者使用相同的规则,只是操作和模式不同。 - **自定义规则** — Suricata 的规则语言非常灵活,足以检测任何协议模式。对于 HTTPS 流量,基于 DNS 的检测比 TCP 内容匹配更可靠。 - **日志分析** — `eve.json` 是最强大的日志文件。它包含结构化数据,可以直接与 Splunk 和 Elastic 等 SIEM 平台集成。 - **务必验证** — 在重启之前运行 `suricata -T` 可以节省数小时的调试时间。 ## 👤 作者 **Muhammad Ali** — 网络安全学生 @ 伊斯兰堡航空大学 GitHub: [d4rkali](https://github.com/d4rkali)
标签:AMSI绕过, IPS, IP 地址批量处理, Metaprompt, PB级数据处理, Suricata, 云计算, 企业安全, 入侵检测系统, 包过滤, 威胁检测, 威胁检测与响应, 安全数据湖, 安全运维, 密码管理, 恶意流量阻断, 教程, 数据包丢弃, 构建工具, 流量监控, 现代安全运营, 网络安全, 网络安全指南, 网络流量分析, 网络资产管理, 自定义规则, 规则引擎, 防御绕过, 隐私保护