infra-lab-de/Azure-TwoTier-Network

GitHub: infra-lab-de/Azure-TwoTier-Network

在 Azure 中构建基于 NSG 网段隔离、Jump Host 管理接入和 NAT Gateway 受控出站的两层网络架构实践项目。

Stars: 0 | Forks: 0

# Azure 中的两层网络 在 Azure 中构建一个包含前端层和后端层以及用于管理访问的专用 Jump Host 的两层网络——这是一个关于 Azure 网络、网络安全和层隔离的实践实验项目。 ![架构图](https://static.pigsec.cn/wp-content/uploads/repos/cas/4b/4b9a10c73cd245396ad0e1ca0af9c60ef8682148ff00c81db1f3949ec5bd4883.png) ## 构建内容 一个包含三个独立子网的 Virtual Network,每个子网都由各自的 Network Security Group 进行安全保护:前端、后端以及一个带有 Jump Host 的独立管理子网。前端子网中运行着一台可公开访问的 VM,后端子网中运行着一台无 Public IP、仅限内部访问的 VM。第三个子网中的 Jump Host 是唯一允许通过 SSH 对前端和后端进行管理访问的入口。 **资源:** - Resource Group:`rg-twotier-lab-weu-001` - Virtual Network:`vnet-twotier-lab-weu-001` (10.0.0.0/16) - 前端子网:`snet-frontend-001` (10.0.0.0/24) - 后端子网:`snet-backend-001` (10.0.1.0/24) - Jumper 子网:`snet-jumper-001` (10.0.2.0/24) - 前端 Network Security Group:`nsg-frontend-001` - 后端 Network Security Group:`nsg-backend-001` - Jumper Network Security Group:`nsg-jumper-001` - 前端 Virtual Machine:`vm-frontend-001` – Ubuntu 24.04 LTS,Private IP `10.0.0.5`,包含 Public IP - 后端 Virtual Machine:`vm-backend-001` – Ubuntu 24.04 LTS,Private IP `10.0.1.5`,无 Public IP - Jumper Virtual Machine:`vm-jumper-001` – Ubuntu 24.04 LTS,Private IP `10.0.2.5`,包含 Public IP - Public IP:`pip-vm-frontend-001`、`pip-vm-jumper-001` - NAT Gateway:`nat-backend-001` - Network Interface:`nic-vm-frontend-001`、`nic-vm-backend-001`、`nic-vm-jumper-001` - SSH 密钥:每台 VM 独立配置 所有资源都进行了统一的标签标记(`Project: TwoTier-Network`、`Environment: Lab`、`Purpose: Portfolio`、`Owner: Nico Miehle`、`CreatedBy: Manual`)。 ## 网络安全 每个子网都由各自的 NSG 进行保护,遵循“仅允许必要流量”的原则。其他所有流量均被丢弃。 **Jumper NSG (`nsg-jumper-001`):** 仅允许来自我本人 IP 的 SSH 连接,屏蔽其他所有流量。 ![NSG Jumper 规则](https://static.pigsec.cn/wp-content/uploads/repos/cas/e9/e9e429e6336faefda086bcddf892431ba48ea07379080fcbd91100cb023e7ae9.png) **前端 NSG (`nsg-frontend-001`):** SSH 仅限来自 Jumper,允许来自任意位置的 HTTP,屏蔽其他所有流量。 ![NSG 前端规则](https://static.pigsec.cn/wp-content/uploads/repos/cas/c6/c647d351e20422bb4d5cc97c3927b74227cf042a0a7fe704297e3b4ea9a946f3.png) **后端 NSG (`nsg-backend-001`):** SSH 仅限来自 Jumper,MySQL 仅限来自前端,屏蔽其他所有流量。 ![NSG 后端规则](https://static.pigsec.cn/wp-content/uploads/repos/cas/4a/4aa82c6981b18bbda3bedeecda3a6b327139e82122c7daa2c3aa138e48feed6e.png) 对前端和后端的 SSH 访问权限仅保留给 Jumper VM。前端被限制为只能与后端进行 MySQL 通信,不允许 SSH 访问。这样,Web 攻击面(前端)和管理访问面(Jumper)就成为了完全分离、独立的系统。 这三个子网都被额外配置为“私有子网”——因此 Azure 的隐式默认出站访问已被禁用。尽管如此,前端和 Jumper 依然可以通过各自的 Public IP 显式地访问互联网;而后端则仅通过受控的 NAT Gateway `nat-backend-001` 获取互联网访问权限——在后端 VM 上成功执行 `apt update` 即证明了这一点,尽管该 VM 没有自己的 Public IP。 ![NAT Gateway 出站访问](https://static.pigsec.cn/wp-content/uploads/repos/cas/63/639aba8348b77f3dde3874c33b97d452b4a304b39c737f6c5ac510451dfea257.png) ## SSH 访问 这三台 VM 均只能通过 Public-Key 身份验证进行访问,密码登录已被完全禁用。禁止通过 SSH 进行 Root 登录(`PermitRootLogin no`)。在建立连接时,个性化的登录 Banner 会在三台 VM 上统一显示有关授权访问和日志记录的提示。 管理访问完全通过 Jump Host 进行:从 Jump Host 通过 SSH 连接到前端或后端。 ![SSH 访问 Jumper](https://static.pigsec.cn/wp-content/uploads/repos/cas/fa/faf03c6887c85c1cdde1466922919e792e6d97d2e5cc5ab3a57c820796bb07a6.png) ![从 Jumper SSH 访问前端](https://static.pigsec.cn/wp-content/uploads/repos/cas/cf/cff499e2e89f41adbde7ccd0abf90f50e726375934fb421d367531fc5551f1dd.png) ![从 Jumper SSH 访问后端](https://static.pigsec.cn/wp-content/uploads/repos/cas/25/254803b31d302867aad42b2ea355bc44772dc7782422c6773f7eb19427165914.png) ## 自动安全更新 为了定期安装与安全相关的更新,我们在三台 VM 上都配置了 `unattended-upgrades`——这与我的 [Pi-SSH-Fortress 项目](https://github.com/infra-lab-de/Raspberry-Pi-SSH-Server)中的配置完全相同,在该项目的页面中也可以看到已配置自动更新的截图。 ## 数据库访问 – 层级隔离验证 后端运行着一个 MySQL 实例。一个专用的数据库用户(`frontend_user`)被明确限制为只能从 `10.0.0.%` 建立连接。此外,MySQL 仅绑定到后端私有 IP `10.0.1.5`,而不是绑定到所有网络接口。 从前端发起了与后端数据库的连接,写入了一条记录并将其读取出来——这证明了层级隔离允许真实的数据库流量通行,同时后端对外部依然保持完全不可访问的状态。 ![MySQL 跨层访问](https://static.pigsec.cn/wp-content/uploads/repos/cas/5f/5fce8bdbc1ff82fa989e93ed8ddb557d0b032ad6fd27e7878170c0f0a72770e7.png) ## 计划扩展 - Infrastructure as Code (Terraform),以实现可重现、版本化的配置 - 在所有 VM 上部署基于主机的防火墙(nftables),作为对 NSG 的补充 - 采用最小权限原则分配权限(Azure RBAC),取代拥有完整权限的单一账户 - IDS/IPS,例如通过 NSG Flow Logs + Log Analytics,或在主机端使用 Suricata - 使用 Azure Bastion 替代自行管理的 Jumper VM - Just-in-Time VM Access (Microsoft Defender for Cloud) - 通过 Azure Key Vault 进行 Secrets Management,取代配置文件中的密码 ## 截图 **资源概览** ![资源概览](https://static.pigsec.cn/wp-content/uploads/repos/cas/97/976e9d11ecf7e4addbd0458cbb9e9ab31568633bc9febd1a9a32edc966397041.png) **前端 VM – 概览** ![前端 VM 概览](https://static.pigsec.cn/wp-content/uploads/repos/cas/6d/6d2dfcea728d844d0c252ae6baebb269810f1c308c3d2efbd12794e73a411a65.png) **后端 VM – 概览** ![后端 VM 概览](https://static.pigsec.cn/wp-content/uploads/repos/cas/6f/6f88775375341a096cff17b65f54f21dcdf8c6fc34bcbeb59ac20d517ff8c660.png) **Jumper VM – 概览** ![Jumper VM 概览](https://static.pigsec.cn/wp-content/uploads/repos/cas/a6/a61865c8cdaf2b37e0188770a62022e9fc716b080970f9784cac3ea02e469acb.png)
标签:Azure, 内存分配, 堡垒机, 网络安全, 网络架构, 虚拟网络, 隐私保护