sarthakdewanda/pfsense-firewall-lab
GitHub: sarthakdewanda/pfsense-firewall-lab
基于 pfSense 和 VirtualBox 的虚拟化防火墙实验室,演示网络分段、规则配置和攻击流量防御的完整流程。
Stars: 0 | Forks: 0
# pfSense 防火墙实验室
这是一个使用 pfSense 演示核心防火墙工程概念的虚拟化家庭实验室:网络分段、接口配置、DHCP、基于规则的流量控制以及攻击防御。完全在 VirtualBox 中构建并进行了端到端测试,使用 Kali Linux 和 Ubuntu Desktop 作为测试主机。
## 目录
- [概述](#overview)
- [拓扑](#topology)
- [使用的工具](#tools-used)
- [前置条件](#prerequisites)
- [实验室构建](#lab-build)
- [1. 创建虚拟机](#1-vm-creation)
- [2. pfSense 初始设置](#2-pfsense-initial-setup)
- [3. 从 WAN 访问 pfSense WebGUI](#3-reaching-the-pfsense-webgui-from-the-wan)
- [4. LAN DHCP 配置](#4-lan-dhcp-configuration)
- [5. 防火墙规则:允许 Kali 访问内部 LAN](#5-firewall-rule-allow-kali-to-reach-the-internal-lan)
- [6. Kali Linux 设置(攻击者)](#6-kali-linux-setup-attacker)
- [7. Ubuntu 设置(受害者)](#7-ubuntu-setup-victim)
- [流量控制演示](#traffic-control-demo)
- [8. 生成测试流量 (hping3)](#8-generating-test-traffic-hping3)
- [9. 阻断流量并进行验证](#9-blocking-traffic-and-verifying)
- [结果摘要](#results-summary)
- [核心要点](#key-takeaways)
- [安全提示](#security-notes)
- [参考](#reference)
## 概述
本项目模拟了一个小型边缘防火墙部署。pfSense 将面向 WAN 的主机(Kali)与内部 LAN 主机(Ubuntu)隔离开来,并使用防火墙规则来控制,随后明确阻断这两个区域之间的流量。
**本实验室展示了:**
- 使用 pfSense 将网络划分为 WAN(外部)和 LAN(内部)区域
- 在隔离的 LAN 网段上分配接口并配置 DHCP
- 编写并应用防火墙规则,以允许区域之间的特定流量
- 使用 hping3 模拟泛洪流量,并在 Wireshark 中进行观察
- 编写阻断规则以停止不需要的流量,并通过 pfSense 验证该阻断效果
## 拓扑
```
Home Router (192.168.1.1/24)
|
[ Bridged Adapter ]
|
+----------+----------+
| |
pfSense WAN Kali Linux
(em0, 192.168.1.20/24) (Attacker, Bridged, 192.168.1.19/24)
|
pfSense LAN
(em1, 192.168.10.1/24)
|
[ Internal Network: LabNet ]
|
Ubuntu Desktop
(Victim, Internal, 192.168.10.100/24)
Admin PC (192.168.1.9/24), used to access the pfSense WebGUI over the WAN
```
| 设备 / 网段 | VirtualBox 适配器 | 接口 | IP / 子网掩码 | 角色 |
|-----------------------------|-----------------------|-----------|----------------------------|----------------------------------------|
| 家庭 LAN (物理) | (主机网络) | - | 192.168.1.0/24 | 提供互联网并桥接到实验室 |
| 管理 PC | (物理主机) | - | 192.168.1.9/24 | 用于访问 pfSense WebGUI |
| pfSense WAN | 桥接 | em0 | 192.168.1.20/24 (DHCP) | 面向家庭 LAN 的边缘防火墙 |
| Kali Linux (攻击者) | 桥接 | eth0 | 192.168.1.19/24 | 外部测试主机 |
| 实验室 LAN (内部 `LabNet`) | 内部网络 | - | 192.168.10.0/24 | pfSense 后面的隔离子网 |
| pfSense LAN | 内部 `LabNet` | em1 | 192.168.10.1/24 | 默认网关和 DHCP 服务器 |
| Ubuntu Desktop (受害者) | 内部 `LabNet` | enp0s3 | 192.168.10.100/24 | 内部测试主机 |
## 使用的工具
- VirtualBox 7.x,hypervisor
- pfSense CE 2.8.1,防火墙/路由器
- Kali Linux,外部测试主机和流量源
- Ubuntu Desktop 22.04,内部测试主机
- hping3,流量生成器
- Wireshark,数据包捕获和流量分析
## 前置条件
- 主机上已安装 VirtualBox 7.x
- ISO 镜像:pfSense CE(最新 amd64 版)、Kali Linux(最新 amd64 版)、Ubuntu 22.04 Desktop(amd64 版)
- 最低主机资源:8 GB 内存,40 GB 可用磁盘空间
- 主机上的管理员权限,创建桥接适配器时需要
## 实验室构建
### 1. 创建虚拟机
**pfSense**
- 操作系统类型:FreeBSD 64 位,2 个 vCPU,2 GB 内存,20 GB 磁盘(动态分配)
- 适配器 1 设置为桥接模式,连接到物理 NIC。

- 适配器 2 设置为内部网络,命名为 `LabNet`。

**Kali Linux(攻击者)**
- 操作系统类型:Debian 64 位,2 个 vCPU,2 GB 内存,15 GB 磁盘
- 适配器 1 设置为桥接模式。

**Ubuntu Desktop(受害者)**
- 操作系统类型:Ubuntu 64 位,2 个 vCPU,2 GB 内存,15 GB 磁盘
- 适配器 1 设置为内部网络,命名为 `LabNet`。

`LabNet` 只需创建一次。在任何虚拟机的网络设置中的“内部网络”下输入该名称,VirtualBox 即会自动创建它。
每次安装操作系统后,都会卸载已挂载的 ISO,并从虚拟机自身的虚拟磁盘重新启动。
### 2. pfSense 初始设置
pfSense 使用默认选项进行安装。从控制台菜单中,接口分配如下:`em0` 分配给 WAN(桥接),`em1` 分配给 LAN(LabNet)。
WAN 保留在 DHCP 上,并自动从家庭路由器获取了 `192.168.1.20/24`。LAN 设置为 `192.168.10.1/24`。

### 3. 从 WAN 访问 pfSense WebGUI
默认情况下,pfSense 不会在 WAN 接口上暴露 WebGUI,因此首先需要执行几个步骤。
从控制台选择选项 8(Shell),并使用以下命令临时禁用包过滤器:
```
pfctl -d
```

在过滤器关闭的情况下,通过在管理 PC 上浏览 pfSense 的 WAN IP 访问了 WebGUI。默认登录凭据是 `admin` / `pfsense`。

从仪表盘中添加了一条永久规则,这样无需再次禁用过滤器即可保持 GUI 可访问:
1. 转到 **Firewall > Rules > WAN**。
2. 点击 **Add** 创建新规则。
3. 按如下方式设置字段:
| 字段 | 值 |
|-------------|---------------------------------|
| Action | Pass |
| Interface | WAN |
| Protocol | TCP |
| Source | Network, 192.168.1.0/24 |
| Destination | Address, 192.168.1.20 (pfSense WAN) |

4. 点击 **Save**,然后点击 Rules 页面顶部的 **Apply Changes**。

此后,确认可以通过 WAN 正常访问 WebGUI。
### 4. LAN DHCP 配置
1. 转到 **Services > DHCP Server > LAN**。
2. 勾选 **Enable DHCP server on LAN interface**。
3. 在 Primary Address Pool 下,设置地址池范围。本实验室使用的是 `192.168.10.100` 到 `192.168.10.199`。
4. 点击 **Save**。

### 5. 防火墙规则:允许 Kali 访问内部 LAN
为了允许外部主机访问内部主机,在 WAN 接口上添加了第二条规则:
1. 转到 **Firewall > Rules > WAN** 并点击 **Add**。
2. 按如下方式设置字段:
| 字段 | 值 |
|-------------|--------------------------------|
| Action | Pass |
| Interface | WAN |
| Protocol | Any |
| Source | Address, 192.168.1.19 (Kali) |
| Destination | Address, 192.168.10.100 (Ubuntu) |
3. 点击 **Save**,然后点击 **Apply Changes**。

### 6. Kali Linux 设置(攻击者)
Kali 自动从家庭路由器获取其 IP。这已通过以下命令确认:
```
ifconfig
```
由于 Kali 位于 WAN 端,而 Ubuntu 位于 pfSense 后面的独立子网上,因此添加了一条静态路由,以便 Kali 知道如何通过 pfSense 的 WAN 接口到达内部 LAN:
```
sudo ip route add 192.168.10.0/24 via 192.168.1.20
```
如果 pfSense 的 WAN IP 在 DHCP 续约后发生更改,则需要更新此路由以使其匹配。
### 7. Ubuntu 设置(受害者)
Ubuntu 启动并从 pfSense DHCP 池接收 `192.168.10.100`,并将 pfSense(`192.168.10.1`)设置为网关和 DNS。
这已通过以下命令验证:
```
ifconfig
ping -c3 google.com
```
两端都分配了地址且 WAN 规则到位后,通过从 Kali ping Ubuntu 确认了连通性。执行成功。
## 流量控制演示
### 8. 生成测试流量
在 Ubuntu 上,安装了 Wireshark 并开始捕获,以监视 `enp0s3` 接口上的传入流量:
```
sudo apt update && sudo apt install -y wireshark
sudo wireshark &
```
在 Kali 上,向 Ubuntu 的 80 端口发起了 SYN 泛洪攻击:
```
sudo hping3 --flood -S -p 80 192.168.10.100
```

回到 Ubuntu 上,Wireshark 显示了来自 Kali IP 的大量入站 SYN 数据包,确认流量已通过 pfSense 到达主机。

### 9. 阻断流量并进行验证
添加了新的防火墙规则以阻断 Kali 主机:
1. 转到 **Firewall > Rules > WAN** 并点击 **Add**。
2. 按如下方式设置字段:
| 字段 | 值 |
|-------------|--------------------------------|
| Action | Block |
| Interface | WAN |
| Source | Address, 192.168.1.19 (Kali) |
| Destination | Address, 192.168.10.100 (Ubuntu) |
| Log | Enabled |
3. 点击 **Save**,然后点击 **Apply Changes**。

应用后,将 Ubuntu 上的 Wireshark 过滤为 `ip.addr==192.168.1.19`,显示没有数据包,确认泛洪已停止。

阻断操作也在 pfSense 上直接得到了确认。将鼠标悬停在 **Firewall > Rules > WAN** 下阻断规则的状态计数器上,显示该规则已匹配并丢弃了大量来自 Kali 的流量(超过 320 万个数据包,123 MB),这与生成的泛洪流量相符。

## 结果摘要
| 阶段 | 结果 |
|----------------------------|-----------------------------------------------------------|
| 缓解前 | 来自 Kali 的 SYN 泛洪到达了 Ubuntu,在 Wireshark 中表现为数据包激增 |
| 缓解后 | 泛洪流量在 pfSense WAN 规则处被阻断,已在 Wireshark 和 pfSense 自身的状态表中确认 |
这确认了 pfSense 正确实施了网络分段和防火墙策略,实时停止了区域之间不需要的流量。
## 核心要点
- 构建了一个双区域 pfSense 实验室(WAN/LAN),其中 WAN 端的 DHCP 自动处理,并在 LAN 端手动配置了 DHCP 作用域。
- 练习了 VirtualBox 网络模式、桥接模式与内部网络模式,隔离网段之间的静态路由。
- 端到端编写并测试了防火墙规则:允许规则、流量生成、阻断规则以及验证。
## 安全提示
- 本实验室与任何生产网络完全隔离,并应保持这种状态。内部流量永远不会触及 LabNet 网段之外的系统。
- 所有主机(Ubuntu、Kali、pfSense)都应保持最新状态,以修补已知的漏洞,然后再进行进一步的使用。
## 参考
- [pfSense 文档](https://docs.netgate.com/pfsense/en/latest/)
- [pfSense 防火墙规则文档](https://docs.netgate.com/pfsense/en/latest/firewall/index.html)
标签:Docker 部署, MacOS取证, pfSense, 流量控制, 网络运维, 网络隔离, 虚拟化, 防火墙