ascjreddy/Enterprise-network-Project-phase-1

GitHub: ascjreddy/Enterprise-network-Project-phase-1

基于 OPNsense 的虚拟化多区域企业网络实验室,集成防火墙策略、QoS 流量整形、Ansible 自动化部署和 Python 健康监控,提供完整验证证据。

Stars: 0 | Forks: 0

# 企业网络安全与流量控制实验室 基于 OPNsense 构建的虚拟化多区域企业网络 —— 实现基于区域的防火墙策略、QoS 流量整形、通过 REST API 实现的 Ansible 自动化,以及带有 Slack 告警的 Python 健康监控。每一项安全控制都通过抓包和防火墙日志进行了验证。每一项带宽声明都有 iperf3 测量数据的支持。 ## 架构 ``` ┌─────────────────┐ │ OPNsense FW │ │ 192.168.x.1 │ └────────┬────────┘ ┌─────────────────┼─────────────────┐ │ │ │ ┌──────▼──────┐ ┌───────▼──────┐ ┌──────▼──────┐ │ LAN │ │ Guest │ │ DMZ │ │192.168.10.0 │ │192.168.20.0 │ │192.168.30.0 │ │ /24 │ │ /24 │ │ /24 │ │ │ │ │ │ │ │ Employee │ │ Untrusted │ │ nginx web │ │ workstation │ │ users │ │ SSH server │ └─────────────┘ └──────────────┘ └─────────────┘ ``` | 区域 | 子网 | 网关 | 信任级别 | |------|--------|---------|-------------| | LAN | 192.168.10.0/24 | 192.168.10.1 | 受信任 —— 完整的互联网访问,仅限通过 SSH/HTTP 访问 DMZ | | Guest | 192.168.20.0/24 | 192.168.20.1 | 不受信任 —— 仅限互联网访问,5 Mbps 上限 | | DMZ | 192.168.30.0/24 | 192.168.30.1 | 半信任 —— 托管内部服务器,禁止 Guest 访问 | | WAN | NAT (VirtualBox) | — | 不受信任 —— 默认拒绝入站流量 | ## 实验环境 | 虚拟机 | 角色 | 操作系统 | 资源配置 | |----|------|----|-----------| | OPNsense-FW | 防火墙 / 路由器 | OPNsense 24.x (FreeBSD) | 2 核心, 2GB 内存 | | LAN-Client | 员工工作站 | Ubuntu 22.04 Desktop | 1 核心, 1GB 内存 | | Guest-Client | 访客用户 | Ubuntu 22.04 Desktop | 1 核心, 1GB 内存 | | DMZ-Server | Web / SSH 服务器 | Ubuntu 22.04 Server | 1 核心, 1GB 内存 | 所有环境均运行在单台笔记本电脑的 VirtualBox 中。VirtualBox 内部网络用于模拟物理网段。OPNsense 位于网络中心,配备四个虚拟接口 —— 每个区域一个。 ## 防火墙策略 规则按自上而下的顺序处理。最先匹配的规则生效。在每个接口上,阻止规则优先于允许规则。 | 接口 | 源地址 | 目的地址 | 动作 | 目的 | |-----------|--------|-------------|--------|---------| | Guest | 192.168.20.0/24 | 192.168.20.1 | 阻止 | 访客无法访问防火墙 | | Guest | 192.168.20.0/24 | 192.168.10.0/24 | 阻止 | 访客无法访问员工区 | | Guest | 192.168.20.0/24 | 192.168.30.0/24 | 阻止 | 访客无法访问服务器 | | Guest | 192.168.20.0/24 | 任意 | 允许 TCP 80,443 | 仅限互联网浏览 | | LAN | 192.168.10.0/24 | 192.168.20.0/24 | 阻止 | 员工无法访客访客区 | | LAN | 192.168.10.0/24 | 192.168.30.10 | 允许 TCP 22 | 通过 SSH 连接到 DMZ 服务器 | | LAN | 192.168.10.0/24 | 192.168.30.10 | 允许 TCP 80 | 通过 HTTP 连接到 DMZ 服务器 | | LAN | 192.168.10.0/24 | 任意 | 允许 | 互联网访问 | | WAN | 任意 | 任意 | 阻止 | 默认拒绝所有入站流量 | ### 验证 每条规则都通过了正向测试(应被允许的流量)和反向测试(应被阻止的流量)的验证。通过等效于 Wireshark 的 OPNsense 防火墙日志抓取了相关证据。 | 测试 | 结果 | 证据 | |------|--------|---------| | Guest → LAN ping | 100% 丢包 | 截图 —— 防火墙日志显示丢弃 | | Guest → DMZ HTTP | 连接超时 | 截图 —— 浏览器超时 | | Guest → google.com | 成功加载 | 截图 —— Firefox | | LAN → DMZ nginx | nginx 欢迎页 | 截图 —— Firefox | | LAN → DMZ SSH | 成功连接 | 截图 —— 终端 | | LAN → Guest ping | 100% 丢包 | 截图 —— 防火墙日志显示丢弃 | ## QoS 流量整形 ### 管道 —— 带宽容器 | 管道 | 带宽 | 应用于 | |------|-----------|------------| | Guest-Cap | 5 Mbps 硬性限制 | 所有 Guest 区域流量 | | LAN-Guarantee | 20 Mbps 保证带宽 | 所有 LAN 区域流量 | ### 队列 —— LAN 管道内的优先级通道 | 队列 | 权重 | 拥塞时的共享比例 | 流量类型 | |-------|--------|------------------------|--------------| | Management | 100 | ~83% | SSH 端口 22 | | Interactive | 20 | ~16% | HTTP/HTTPS 端口 80, 443 | | Bulk | 1 | ~1% | 所有其他流量 | 权重仅在链路饱和时激活。在正常负载下,所有流量均可自由传输。 ### 分类规则 五条浮动规则检查每一个数据包,并将其定向到正确的管道或队列: 1. Guest 接口,所有协议 → Guest-Cap 管道 2. LAN TCP 端口 22 → Management 队列 3. LAN TCP 端口 80 → Interactive 队列 4. LAN TCP 端口 443 → Interactive 队列 5. LAN 所有剩余流量 → Bulk 队列 (兜底规则) ### 测量结果 从 LAN-Client 到 DMZ-Server 持续 30 秒的 iperf3 测试: ``` [ ID] Interval Transfer Bitrate [ 5] 0.00-30.03 sec 67.2 MBytes 18.8 Mbits/sec receiver ``` LAN 保持了约 19 Mbps 的速率,证实了 LAN-Guarantee 管道得到了严格执行。在测试过程中 SSH 保持响应,没有明显的延迟 —— 证实了 Management 队列的优先级在负载下正常工作。 ## 自动化 ### Ansible —— 防火墙规则部署 防火墙规则通过 Ansible playbook 调用 OPNsense REST API 进行部署。配置在 Git 中进行版本控制。在全新安装的 OPNsense 上运行该 playbook,可在几秒钟内重建整个安全策略。 ``` ansible-playbook -i inventory.yml firewall_rules.yml ``` 成功运行时的输出: ``` TASK [Block Guest to LAN] ✓ ok TASK [Block Guest to DMZ] ✓ ok TASK [Allow LAN to DMZ SSH] ✓ ok TASK [Apply firewall rules] ✓ ok PLAY RECAP: ok=4 failed=0 ``` ### Python —— 网络健康监控 `health_check.py` 在整个网络上运行 13 项检查,并向 Slack 发送完整的通过/失败报告。它基于生产环境的监控原则设计 —— 而不仅仅是简单的连通性检查。 | 检查项 | 检测内容 | |-------|-----------------| | 接口状态 (WAN/LAN/Guest/DMZ) | 区域连通性故障 | | 按名称检测关键规则是否存在 | 安全策略被静默删除 | | WAN 网关可达性 | 互联网中断 | | CPU 使用率 < 80% | 防火墙性能下降 | | 内存使用率 < 85% | 丢包风险 | | DHCP 租约数量 (时间敏感) | 客户端连接故障 | | 状态表使用率 < 80% | 连接跟踪耗尽 | | DMZ nginx HTTP 响应 | 服务器可用性 | DHCP 检查是时间敏感的 —— 凌晨 3 点零租约是正常的,但在工作时间为零则属于故障。这可以防止因夜间错误警报导致的告警疲劳。 状态表监控可以检测到大多数工程师都不知道存在的一种故障模式 —— 当连接跟踪表填满时,防火墙会静默丢弃新连接,且不提供任何错误消息。 ``` python3 health_check.py ``` 示例输出: ``` PASS!! | Interface WAN present | up PASS!! | Interface LAN present | up PASS!! | Interface Guest present | up PASS!! | Interface DMZ present | up PASS!! | Rule: Block Guest to LAN | found PASS!! | Rule: Block Guest to DMZ | found PASS!! | Rule: Allow LAN to DMZ SSH | found PASS!! | WAN internet reachability | ping to 8.8.8.8 PASS!! | CPU usage | 0.0% used PASS!! | Memory usage | 0.0% used PASS!! | DHCP leases | 0 leases - off hours PASS!! | State table | 115 active states PASS!! | DMZ nginx | responding on port 80 Report sent to Slack. ``` Slack 告警截图 —— `screenshots/slack_health_report.png` ## 展示技能 | 技能 | 证据 | |-------|---------| | 基于区域的防火墙架构 | 具有强制性区域间策略的 4 区域网络 | | 有状态防火墙规则设计 | 规则排序、默认拒绝,并通过抓包验证 | | QoS 流量整形 | 管道、队列、分类规则 —— 通过 iperf3 测量验证 | | 带宽强制限制 | 访客上限为 5 Mbps,LAN 保持在 19 Mbps | | REST API 自动化 | Ansible 通过 OPNsense API 下发防火墙规则 | | 基础设施即代码 | 规则在 Git 中进行版本控制,可从零开始复现 | | 生产监控设计 | 状态表、规则完整性、时间敏感阈值、Slack 告警 | | Linux 系统 | Ubuntu 虚拟机管理、服务管理、网络配置 | | 故障排查 | 通过日志诊断 DHCP 冲突、DNS 故障、包锁定问题 | ## 仓库结构 ``` ├── scripts/ │ ├── firewall_rules.yml # Ansible playbook — deploys firewall rules via REST API │ └── health_check.py # Python health monitor — 13 checks, Slack alerting ├── screenshots/ # Verification evidence for every firewall rule └── configs/ └── opnsense_config.xml # Full OPNsense configuration backup ``` ## 如何复现 **前提条件:** VirtualBox, OPNsense 24.x ISO, Ubuntu 22.04 ISO, Ansible, Python 3 1. 在 VirtualBox 中创建四个虚拟机,并按照架构表中的说明配置内部网络 2. 安装 OPNsense,分配接口,将 LAN IP 设置为 192.168.10.1 3. 在 LAN-Client、Guest-Client、DMZ-Server 上安装 Ubuntu 4. 在 DMZ-Server 上安装 nginx:`sudo apt install nginx -y` 5. 将你的 OPNsense API 密钥和密钥对添加到 `inventory.yml` 中 6. 运行:`ansible-playbook -i inventory.yml firewall_rules.yml` 7. 运行:`python3 health_check.py` 完整的 OPNsense 配置可在 `configs/opnsense_config.xml` 中找到 —— 通过 System → Configuration → Backups 恢复,即可复现完全相同的环境。 ## 技术栈 - **OPNsense 24.x** —— 基于 FreeBSD 的企业级防火墙 - **Ansible** —— 通过 REST API 部署防火墙规则 - **Python 3** —— 健康监控与 Slack 集成 - **iperf3** —— 带宽测量与 QoS 验证 - **Ubuntu 22.04** —— 客户端与服务器虚拟机 - **VirtualBox** —— 用于整个实验室虚拟化的虚拟机监控程序
标签:Ansible自动化, Beacon Object File, DMZ, iperf3, IP 地址批量处理, MacOS取证, OPNsense, Python监控, QoS流量整形, REST API, Slack告警, Streamlit, 企业网络, 区域分割, 多区域隔离, 实验环境, 抓包分析, 流量控制, 系统提示词, 网络安全, 网络实验室, 网络架构, 虚拟化网络, 访问控制, 运维自动化, 防火墙, 隐私保护