faisal-kh-alkanhal/Suricata-IDS-Lab
GitHub: faisal-kh-alkanhal/Suricata-IDS-Lab
基于 Suricata 构建的蓝队入侵检测实验室,通过自定义检测规则和攻击模拟验证网络威胁检测能力。
Stars: 0 | Forks: 0
# Suricata IDS 实验室
一个基于 Ubuntu Server 22.04 构建的家庭网络入侵检测系统,使用自定义 Suricata 规则来检测真实的攻击模式,包括端口扫描、暴力破解尝试和 HTTP 异常。
构建为一个实操性的蓝队项目,以展示网络威胁检测和 SOC 分析师技能。
## 实验室架构
```
┌─────────────────────────────────────────────────┐
│ HOME LAB NETWORK │
│ │
│ [Attack Machine] ──────► [Suricata VM] │
│ Host / Kali Linux Ubuntu Server │
│ nmap, curl, hydra 22.04 LTS │
│ (generates test traffic) (monitors + alerts) │
└─────────────────────────────────────────────────┘
```
**技术栈:** Suricata 8.0.5 · Ubuntu Server 22.04 · jq · 自定义检测规则
## 检测规则
所有规则都是在 `/etc/suricata/rules/local.rules` 中从头编写的。没有使用任何社区规则集,每一个触发的告警都源自为本实验室编写的逻辑。
| # | 规则名称 | 模拟攻击 | 技术 |
|---|-----------|-----------------|-----------|
| 1 | SCAN nmap SYN Sweep | `nmap -sS` 端口扫描 | TCP SYN 标志 + 阈值 |
| 2 | BRUTE FORCE SSH Login | 重复的 SSH 连接 | 内容匹配 + 速率阈值 |
| 3 | DNS Query Suspicious TLD | 对 `.xyz` 及其他域名的 DNS 查询 | DNS 关键字匹配 |
| 4 | HTTP Admin Panel Access | `curl /admin` 端点探测 | HTTP URI 内容匹配 |
### 规则:端口扫描检测
```
alert tcp $EXTERNAL_NET any -> $HOME_NET any (
msg:"Nmap SYN Sweep";
flags:S;
threshold:type both, track by_src, count 20, seconds 3;
sid:1000001; rev:1;
)
```
当单一来源在 3 秒内发送超过 20 个 SYN 数据包时触发,这是 nmap 默认扫描的特征。对阈值进行了调整,以减少合法流量上的误报,同时捕获自动化扫描器。
### 规则:SSH 暴力破解
```
alert tcp $EXTERNAL_NET any -> $HOME_NET 22 (
msg:"SSH Brute Force Attack";
flow:to_server,established;
content:"SSH";
threshold:type both, track by_src, count 5, seconds 60;
sid:1000002; rev:1;
)
```
检测来自同一源 IP 的重复 SSH 登录尝试。按源进行追踪,因此来自多个 IP 的分布式攻击将需要单独的检测方法(在下方作为局限性注明)。
### 规则:可疑 DNS 查询
```
alert dns any any -> any any (
msg: "DNS Query For Suspicious TLD";
dns.query; pcre:"/\.(xyz|top|biz)/i";
sid:1000003; rev:1;
)
```
标记针对可疑域名的出站 DNS 查询,该 TLD 通常与恶意软件 C2 基础设施相关。在实际环境中,这会与威胁情报源配合使用。
### 规则:HTTP 管理面板探测
```
alert http $EXTERNAL_NET any -> $HOME_NET any (
msg:"HTTP Admin Panel Access Attempt";
http.uri; content:"/admin"; nocase;
sid:1000004; rev:1;
)
```
检测对常见管理路径的请求。使用 `http.uri` 粘性缓冲区进行精确的 URI 匹配,而不是原始内容检查。
## 攻击模拟与结果
每条规则均通过生成匹配的流量并确认在 `fast.log` 中触发告警来进行验证。
### 模拟命令
```
# 规则 1:Port scan
nmap -sS
# 规则 2:SSH brute force
hydra -l root -P /usr/share/wordlists/rockyou.txt ssh://
# 规则 3:Suspicious DNS
nslookup test.malicious.xyz
# 规则 4:HTTP admin probe
curl http:///admin
```
### 告警输出示例 (`fast.log`)
```
05/24/2026-15:53:04.609359 [**] [1:1000001:1] Nmap SYN Sweep [**]
[Classification:(null)] [Priority: 3] {TCP} 192.168.32.131:62961 -> 192.168.32.130:106
05/24/2026-15:12:00.462001 [**] [1:1000002:1] SSH Brute Force Attack [**]
[Classification(null)] [Priority: 3] {TCP} 192.168.32.131:48766 -> 192.168.32.130:22
05/24/2026-15:17:00.310172 [**] [1:1000003:1] DNS Query For Suspicious TLD [**]
[Classification: (null)] [Priority: 3] {UDP} 192.168.32.131:56961 -> 192.168.32.2:53
05/24/2026-15:24:24.563944 [**] [1:1000004:1] HTTP Admin Panel Access Attempt [**]
[Classification: (null)] [Priority: 3] {TCP} 192.168.32.131:53482 -> 192.168.32.130:80
```
## 告警分析
使用 `jq` 针对结构化 JSON 日志(`eve.json`)对告警进行分析。
```
# 按规则名称统计告警
cat /var/log/suricata/eve.json \
| jq -r 'select(.event_type=="alert") | .alert.signature' \
| sort | uniq -c
# Top attacking source IPs
cat /var/log/suricata/eve.json \
| jq -r 'select(.event_type=="alert") | .src_ip' \
| sort | uniq -c
```
| 规则 | 触发告警数 | 备注 |
|------|-------------|-------|
| SCAN nmap SYN Sweep | 4 | 如预期在首次运行扫描时触发 |
| BRUTE FORCE SSH | 4 | hydra 运行期间有多个触发窗口 |
| DNS .xyz Query | 3 | 每次 nslookup 尝试时触发 |
| HTTP Admin Access | 1 | 在两个 curl 请求上触发 |
## 关键发现与局限性
**运作良好的方面:**
- 基于阈值的规则有效地区分了攻击流量和噪声
- `http.uri` 粘性缓冲区比原始内容提供了更可靠的 HTTP 匹配
- `eve.json` JSON 日志记录使得使用 jq 进行事后分析变得简单直接
**发现的局限性:**
- SSH 暴力破解规则按单一源 IP 进行追踪 —— 分散在许多 IP 上的分布式攻击将规避此检测。更好的方法是在应用层聚合失败的认证事件(例如通过 SIEM 中的日志关联)
- `.xyz` DNS 规则会对合法的 `.xyz` 域名产生误报。在生产环境中,这将被动态威胁情报源取代
- 仅以 IDS 模式运行,不执行阻断。转向 IPS 模式需要仔细调整阈值,以避免丢弃合法流量
## 仓库结构
```
suricata-ids-lab/
├── README.md
├── rules/
│ └── local.rules
├── screenshots/
│ ├── alerts-fast-log.png
│ └── jq-analysis.png
└── logs/
└── sample-eve.json
```
## 展示技能
`网络流量分析` · `IDS 规则编写` · `威胁检测逻辑` · `日志分析` · `Linux 管理` · `攻击模拟` · `蓝队 / SOC`
标签:IDS/IPS, Metaprompt, Suricata, 入侵检测系统, 安全数据湖, 插件系统, 现代安全运营, 红队行动, 网络安全, 网络安全审计, 隐私保护