构建虚拟化网络安全实验室:网络与 pfSense 设置
Source: Dev.to
为什么要这样做
在过去的一年里,我使用了单独的虚拟机、Docker 容器以及 TryHackMe 等在线培训平台来获取动手的网络安全经验。虽然这些工具很有价值,但它们并不能提供完全受控网络环境的真实感和复杂度。
随着我在 Maryville University 开始网络安全学位——并且在 Windows 10 到达生命周期终点后将主工作站迁移到基于 Fedora 的 Linux 发行版——我决定是时候构建一个真正的虚拟化家庭实验室了。将 Linux 作为宿主操作系统还能让我避免 Windows 11 的硬件要求(安全启动、TPM),从而完全掌控我的虚拟化堆栈,并能够设计一个面向网络安全培训的企业级实验室。
本文是记录我的家庭实验室构建的四篇系列文章的第一篇。这里我会介绍基础架构的选择,解释如何配置虚拟化环境,并演示如何部署 pfSense 作为整个网络的核心路由器和防火墙。由于我的工作站原生运行 Linux,我选择 KVM 和 QEMU,因为它们性能好、灵活且与操作系统深度集成。再配合 libvirt、virsh 和 virt‑viewer,即可获得一个快速、轻量且高度可定制的虚拟化生态系统——非常适合学习真实基础设施的内部工作原理。
虚拟网络
- lab‑NAT – 为 pfSense 提供通过 Linux 主机的上行互联网访问。
- lab‑LAN – 完全隔离的内部网络,所有客户端和服务器虚拟机都位于此。
这种划分模拟了真实企业网络中外部和内部段的区别。
pfSense 防火墙/路由器
pfSense 充当实验室的中心安全设备,提供:
- WAN 与 LAN 之间的路由
- 有状态防火墙
- DHCP 服务
- NAT 转换
- 分段和网络边界控制
所有进出内部网络的流量都经过 pfSense,映射了大多数企业环境的设计。
内部系统
这些系统构成实验室内部的“企业网络”:
- Windows Server 2022(Active Directory + DNS)
- Windows 11 工作站
- 运行 Splunk 的 Ubuntu Desktop
- 用于测试和未来项目的其他 Linux 服务器
它们共同提供了一个功能完整的身份、终端和日志生态系统,代表了真实的企业环境。
外部攻击机器(通过 VPN 的 Kali ThinkPad)
我将实体的 Kali Linux ThinkPad 作为外部攻击机器接入。它通过 VPN 隧道连接到 pfSense 防火墙,模拟以下两种情形之一:
- 来自外部的威胁行为者访问网络,或
- 通过受控入口点连接的恶意设备。
此设置允许对隔离的 lab‑LAN 进行渗透测试、漏洞发现和攻击模拟,同时保持所有内容安全地与我的真实设备隔离分段。
安装 KVM/QEMU 与工具
# Install the virtualization stack
sudo rpm-ostree install @virtualization virt-manager libvirt libvirt-daemon-kvm qemu-kvm bridge-utils --allow-inactive
启用并启动 libvirtd
sudo systemctl enable --now libvirtd
sudo systemctl status libvirtd # verify it’s running
验证 KVM 支持
egrep -c '(vmx|svm)' /proc/cpuinfo
定义虚拟网络
为 lab‑LAN 和 lab‑NAT 创建 XML 定义(此处省略示例 XML)。随后定义、启动并设为自动启动:
# lab‑LAN
sudo virsh net-define /etc/libvirt/qemu/networks/lab-lan.xml
sudo virsh net-start lab-lan
sudo virsh net-autostart lab-lan
# lab‑NAT (same steps with lab-nat.xml)
sudo virsh net-define /etc/libvirt/qemu/networks/lab-nat.xml
sudo virsh net-start lab-nat
sudo virsh net-autostart lab-nat
验证网络已激活:
sudo virsh net-list --all
使用 virt-install 创建 pfSense 虚拟机
sudo virt-install \
--name pfSense \
--ram 2048 \
--vcpus 2 \
--os-variant freebsd13.0 \
--disk path=/var/lib/libvirt/images/pfSense.qcow2,size=10,format=qcow2 \
--cdrom /var/lib/libvirt/boot/pfsense.iso \
--network network=lab-nat,model=virtio \
--network network=lab-lan,model=virtio \
--graphics spice \
--boot uefi
打开安装程序控制台:
sudo virt-viewer pfSense
pfSense 接口分配
在 pfSense 安装过程中为两个虚拟网卡分配:
- WAN →
lab‑NAT - LAN →
lab‑LAN
安装完成后,根据需要配置 DHCP、防火墙规则和 NAT。这一步完成了初始的网络分段和路由。
反思与后续计划
构建防火墙和虚拟网络基础显著提升了我对 virsh、virt-viewer 以及基于 KVM 的虚拟化的信心。该过程巩固了关键的基础设施概念,如定义虚拟网络、桥接接口、配置路由以及在防火墙层进行 DHCP 分配。部署 pfSense 加深了我对分段、NAT 行为以及多接口设计的理解。
即将开展的工作
- 扩展 pfSense 功能:高级防火墙规则、VLAN 分段、DNS 解析器调优、静态 DHCP 映射。
- 评估 pfSense 插件:pfBlockerNG(威胁情报)和 Suricata(IDS/IPS)。
- 在下一篇文章中,我将安装 Windows Server 2022,将其提升为域控制器,配置 DNS,并与 pfSense 集成。Windows 和 Linux 客户端将加入域,为后续关于 SOC 工作流、蓝队工具、检测工程以及攻击模拟的文章奠定 Active Directory 基础。