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。 ![pfSense 适配器 1](https://static.pigsec.cn/wp-content/uploads/repos/cas/94/94505bf502757f3bd42c844d6e1d403791b1412cc9739b8062c192a19bc09547.png) - 适配器 2 设置为内部网络,命名为 `LabNet`。 ![pfSense 适配器 2](https://static.pigsec.cn/wp-content/uploads/repos/cas/25/2519a7ee9bcd025f1e9ca94177949d453fd4bd0144395d7424f0dcb8057f565c.png) **Kali Linux(攻击者)** - 操作系统类型:Debian 64 位,2 个 vCPU,2 GB 内存,15 GB 磁盘 - 适配器 1 设置为桥接模式。 ![Kali 适配器 1](https://static.pigsec.cn/wp-content/uploads/repos/cas/42/424e4e63b8349fcaeb75510ea710172a09a7dc45a6b47b8d5b31d84bb4a46072.png) **Ubuntu Desktop(受害者)** - 操作系统类型:Ubuntu 64 位,2 个 vCPU,2 GB 内存,15 GB 磁盘 - 适配器 1 设置为内部网络,命名为 `LabNet`。 ![Ubuntu 适配器 1](https://static.pigsec.cn/wp-content/uploads/repos/cas/bc/bcdb95477c16c909511ac7bd6d9df29625780982a7a8fc2682285d21eed81c45.png) `LabNet` 只需创建一次。在任何虚拟机的网络设置中的“内部网络”下输入该名称,VirtualBox 即会自动创建它。 每次安装操作系统后,都会卸载已挂载的 ISO,并从虚拟机自身的虚拟磁盘重新启动。 ### 2. pfSense 初始设置 pfSense 使用默认选项进行安装。从控制台菜单中,接口分配如下:`em0` 分配给 WAN(桥接),`em1` 分配给 LAN(LabNet)。 WAN 保留在 DHCP 上,并自动从家庭路由器获取了 `192.168.1.20/24`。LAN 设置为 `192.168.10.1/24`。 ![pfSense 控制台接口分配](https://static.pigsec.cn/wp-content/uploads/repos/cas/84/84a8604aa0bc1478f748d21e420b01c94f6a3558ef6ab63ce0669096b0db0add.png) ### 3. 从 WAN 访问 pfSense WebGUI 默认情况下,pfSense 不会在 WAN 接口上暴露 WebGUI,因此首先需要执行几个步骤。 从控制台选择选项 8(Shell),并使用以下命令临时禁用包过滤器: ``` pfctl -d ``` ![pfSense shell, pfctl -d](https://static.pigsec.cn/wp-content/uploads/repos/cas/c6/c6b5c1003b4f8caf3f69b4f347d54529f3a1fa0a20f12606abf3d2eed4ec4450.png) 在过滤器关闭的情况下,通过在管理 PC 上浏览 pfSense 的 WAN IP 访问了 WebGUI。默认登录凭据是 `admin` / `pfsense`。 ![pfSense WebGUI 仪表盘](https://static.pigsec.cn/wp-content/uploads/repos/cas/1f/1f99ad734a63f1892d87883d6c9d3dff921b70de3746fff4a663ad129b972132.png) 从仪表盘中添加了一条永久规则,这样无需再次禁用过滤器即可保持 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) | ![WAN GUI 访问规则表单](https://static.pigsec.cn/wp-content/uploads/repos/cas/44/44aa131e1cf60b599e163639ae7bad473b9ef777d3bb74928223c30b983ba98f.png) 4. 点击 **Save**,然后点击 Rules 页面顶部的 **Apply Changes**。 ![保存后的 WAN 规则](https://static.pigsec.cn/wp-content/uploads/repos/cas/a4/a4b6fbeae5661a022ead856b8ebac51f3654077062e5d0d19c87188f5f0efb79.png) 此后,确认可以通过 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**。 ![LAN DHCP 服务器设置](https://static.pigsec.cn/wp-content/uploads/repos/cas/7b/7b694f4d837b72dc0be35e2ecc0262d9524b45f634ff565e160ddf88c6925d9f.png) ### 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**。 ![允许 Kali 访问 Ubuntu 的 WAN 规则](https://static.pigsec.cn/wp-content/uploads/repos/cas/62/62a000be9ce0e859a090fe0a6f5f22d4da1e997c730ee5e097a90211fa05f531.png) ### 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 ``` ![运行 hping3 SYN 泛洪的 Kali](https://static.pigsec.cn/wp-content/uploads/repos/cas/c9/c91e59c787ad84b30320a5f82a3eb4753628f17272132501c520f35a0d4798f8.png) 回到 Ubuntu 上,Wireshark 显示了来自 Kali IP 的大量入站 SYN 数据包,确认流量已通过 pfSense 到达主机。 ![显示泛洪进行中的 Wireshark](https://static.pigsec.cn/wp-content/uploads/repos/cas/22/22ba6df56171ecc0848436b3cc01c67d3f2800f557df138f6ad5a6ff6736d021.png) ### 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**。 ![添加了阻断规则的最终 WAN 规则集](https://static.pigsec.cn/wp-content/uploads/repos/cas/e7/e7f8923ba427ea1c3b7d5e9eb415aab750e07bf3c553ffb24fde8d468d15da23.png) 应用后,将 Ubuntu 上的 Wireshark 过滤为 `ip.addr==192.168.1.19`,显示没有数据包,确认泛洪已停止。 ![Wireshark 过滤结果,无来自 Kali 的数据包](https://static.pigsec.cn/wp-content/uploads/repos/cas/cf/cf9ada26f15b91c9c5f6c49364ab93284a9e3a0eefb1533f0dcdf8a9a44126e3.png) 阻断操作也在 pfSense 上直接得到了确认。将鼠标悬停在 **Firewall > Rules > WAN** 下阻断规则的状态计数器上,显示该规则已匹配并丢弃了大量来自 Kali 的流量(超过 320 万个数据包,123 MB),这与生成的泛洪流量相符。 ![显示丢弃数据包的 pfSense 状态详情](https://static.pigsec.cn/wp-content/uploads/repos/cas/f6/f64e465b0f4fa47c58120bc0f58014fefeb861a049a33809837cb420927ae106.png) ## 结果摘要 | 阶段 | 结果 | |----------------------------|-----------------------------------------------------------| | 缓解前 | 来自 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, 流量控制, 网络运维, 网络隔离, 虚拟化, 防火墙