Gitlovess/pfSense-Suricata-IPS-lab
GitHub: Gitlovess/pfSense-Suricata-IPS-lab
基于 pfSense 与 Suricata 构建的内联入侵防御系统实验室,实现实时数据包拦截与地理封锁验证。
Stars: 0 | Forks: 0
# 🔥 pfSense 防火墙 + Suricata IPS 实验室
一个企业级网络安全实验室,部署 pfSense 作为边界防火墙,并运行在主动式 **入侵防御系统 (IPS)** 模式下的 Suricata —— 从仅检测升级为实时拦截攻击。
## 🧪 实验室架构
```
┌─────────────────────────────────────────────────────────┐
│ VirtualBox Environment │
│ │
│ Internet │
│ │ │
│ ▼ │
│ ┌─────────────────────────────┐ │
│ │ pfSense Firewall │ │
│ │ WAN: NAT (Internet) │ │
│ │ LAN: Host-Only (.254 GW) │ │
│ │ │ │
│ │ ┌─────────────────────┐ │ │
│ │ │ pfBlockerNG │ │ ← Geo-blocking │
│ │ │ Malicious IP Alias │ │ ← Known bad IPs │
│ │ │ Suricata IPS │ │ ← Inline packet drop │
│ │ └─────────────────────┘ │ │
│ └──────────────┬──────────────┘ │
│ │ Secure LAN (192.168.x.0/24) │
│ ┌────────────┼────────────┐ │
│ ▼ ▼ ▼ │
│ Ubuntu Ubuntu Windows 10 │
│ Server Desktop (Endpoint) │
│ (Monitor) (Attacker) │
└─────────────────────────────────────────────────────────┘
```
所有虚拟机流量都**严格通过 pfSense 路由** —— 终端设备无法直接访问互联网。
## 🔧 工具与技术栈
| 工具 | 用途 |
|------|---------|
| **pfSense CE** | 边界防火墙与网络网关 |
| **pfBlockerNG-devel** | 地理封锁与恶意 IP 封锁 |
| **MaxMind GeoLite2** | 地理 IP 数据库 |
| **Suricata IPS** | 内联入侵防御(60,000+ 特征码) |
| **VirtualBox** | 虚拟化平台 |
## 🛠️ 实验室设置
### 1. pfSense 虚拟机配置
| 设置 | 值 |
|---------|-------|
| 操作系统 | FreeBSD (pfSense CE ISO) |
| CPU | 2 核 |
| 内存 | 2 GB |
| 存储 | 20 GB |
| 网卡 1 (WAN) | NAT |
| 网卡 2 (LAN) | 仅主机网络 |
### 2. pfSense Web GUI 初始设置
- DNS 服务器更新为 Google (`8.8.8.8`)
- 锁定管理员凭证
- 分配自定义域名:`cdm.local`
## 🌍 防火墙情报与地理封锁
### 恶意 IP 别名
自定义的防火墙别名 (`malicious_IPs`) 将已知的恶意 IP 地址整合到单个条目中 —— 只需一条规则即可在 WAN 层封锁整个威胁群组。
### 使用 pfBlockerNG 进行地理封锁
1. 在 pfSense 中安装 `pfBlockerNG-devel` 软件包
2. 注册免费的 **MaxMind GeoLite2** 账号
3. 将地理 IP 范围同步到 pfSense
4. 创建 WAN 规则以**自动丢弃来自高风险地区的所有流量**
## 🚨 Suricata 内联 IPS 模式
### 核心区别:IDS 与 IPS
| 模式 | 操作 |
|------|--------|
| IDS(实验室 1) | 检测并**告警** —— 流量仍然放行 |
| IPS(实验室 2) | 检测并**丢弃** —— 实时拦截流量 |
### 配置步骤
1. 在 pfSense 上安装 Suricata
2. 启用 **Block Offenders** 选项
3. 将模式设置为 **Inline Mode**
4. 加载威胁情报规则集:
- 恶意软件特征码
- 系统扫描检测
- 漏洞利用行为模式
## 🔒 网络强化
### 隔离终端设备
- 禁用所有实验室虚拟机(Ubuntu Server、Ubuntu Desktop、Windows 10)上的直接 NAT 网卡
- 所有互联网流量现在都**强制通过 pfSense 网关**
### 网关重新配置
**Linux (Ubuntu) — Netplan:**
```
network:
version: 2
ethernets:
enp0s3:
dhcp4: no
gateway4: 192.168.x.254 # pfSense LAN IP
nameservers:
addresses: [8.8.8.8]
```
**Windows 10:**
- 网络适配器 → IPv4 属性
- 默认网关:`192.168.x.254` (pfSense LAN IP)
## ✅ 验证测试
### 测试:使用 testmynids.org 触发与拦截
从 Ubuntu Desktop 运行:
```
curl http://testmynids.org/uid/index.html
```
**结果 1 — 告警模式:** 标记了流量但仍允许通过
**结果 2 — 将规则切换为 Drop 后:** 连接超时 —— 数据包在边界被拦截
pfSense 仪表板日志确认数据包在到达任何终端之前**已在 WAN 层被丢弃**。
## 📁 仓库结构
```
pfsense-ips-lab/
├── README.md # This file
├── docs/
│ └── setup-notes.md # Detailed configuration notes
├── rules/
│ └── custom-notes.md # Suricata rule modifications used
└── screenshots/
└── .gitkeep # Evidence screenshots
```
## 🎯 展示的技能
- 从零开始部署和配置 pfSense 防火墙
- 双接口 WAN/LAN 网络分段
- 使用 pfBlockerNG + MaxMind GeoLite2 实施地理封锁
- 创建自定义防火墙别名以封锁威胁群组
- 将 Suricata 从被动 IDS 升级 → 主动式 IPS 内联模式
- 终端设备网络隔离与网关重路由
- 使用 testmynids.org 验证 IPS
- 通过 pfSense 仪表板日志进行实时丢包验证
## 📌 参考
- [pfSense 文档](https://docs.netgate.com/pfsense/en/latest/)
- [pfBlockerNG 指南](https://docs.netgate.com/pfsense/en/latest/packages/pfblocker.html)
- [Suricata IPS 模式](https://suricata.readthedocs.io/en/latest/setting-up-ipsinline-for-linux.html)
- [MaxMind GeoLite2](https://dev.maxmind.com/geoip/geolite2-free-geolocation-data)
- [实验室 1 — NSM 实验室](https://github.com/Gitlovess/nsm-lab)
## 🔗 SOC 家庭实验室系列
| 实验室 | 项目 | 状态 |
|-----|---------|--------|
| 实验室 1 | [NSM 技术栈 — TShark + Zeek + Suricata IDS](https://github.com/Gitlovess/nsm-lab) | ✅ 已完成 |
| 实验室 2 | pfSense 防火墙 + Suricata IPS(当前仓库) | ✅ 已完成 |
标签:Metaprompt, 入侵防御系统, 威胁猎捕, 流量监控, 网络安全, 虚拟化实验环境, 进程监控, 防火墙, 隐私保护