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
```

## 2. 以 IDS 模式运行
IDS 模式被动监控网络接口上的流量,并将警报写入日志文件,而不会阻断任何流量。
### 查找活动网络接口
```
ip a
```
查找你的接口名称 —— 通常是 `eth0`、`ens33` 或 `enp0s3`。
### 以 IDS 模式启动 Suricata
```
sudo suricata -c /etc/suricata/suricata.yaml -i eth0
```

### 实时监控警报
打开第二个终端并跟踪警报日志:
```
tail -f /var/log/suricata/fast.log
```
### 生成测试流量以验证规则触发
```
curl http://testmynids.org/uid/index.html
```
这是一个专门设计用于触发 Suricata Emerging Threats 规则的公开测试 URL。在 `fast.log` 中出现成功的警报确认 Suricata 运行正常。

## 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+)

### 在 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
```

## 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
# 连接应该超时 — 流量正在被丢弃
```

### 测试后恢复正常流量
测试完成后务必清理 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
```

## 🛠️ 使用的工具
| 工具 | 用途 |
|------|---------|
| 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, 云计算, 企业安全, 入侵检测系统, 包过滤, 威胁检测, 威胁检测与响应, 安全数据湖, 安全运维, 密码管理, 恶意流量阻断, 教程, 数据包丢弃, 构建工具, 流量监控, 现代安全运营, 网络安全, 网络安全指南, 网络流量分析, 网络资产管理, 自定义规则, 规则引擎, 防御绕过, 隐私保护