🎯 Mục Tiêu Lab
Tạo VNet với subnet AzureFirewallSubnet (/26) và subnet ứng dụng
Triển khai Azure Firewall Standard với Public IP Standard SKU
Tạo Route Table ép toàn bộ outbound traffic (0.0.0.0/0) qua firewall private IP
Cấu hình Application Rule Collection cho phép truy cập domain *.microsoft.com
Kiểm tra VM chỉ truy cập được domain được phép, chặn domain khác
Xem Azure Firewall logs trong Log Analytics / Monitor
📋 Chuẩn Bị
- Hoàn thành Lab 01–22 (đặc biệt lab VNet cơ bản)
- Azure subscription có quyền Contributor
- Azure CLI đã cài và az login thành công
- Region: southeastasia (Singapore)
- VNet, Subnet, Route Table cơ bản
- NSG và network traffic flow
- Khái niệm hub-spoke topology
🏗️ Kịch Bản
Công ty yêu cầu kiểm soát toàn bộ outbound traffic từ VMs trong subnet ứng dụng. Chỉ được phép truy cập *.microsoft.com và *.windowsupdate.com. Mọi traffic khác bị block. Azure Firewall Standard đóng vai trò điểm kiểm soát duy nhất.
Internet
│
▼
[Azure Firewall] ── Public IP (Standard SKU)
│ 10.0.0.4 (private)
│
[AzureFirewallSubnet] 10.0.1.0/26
│
[VNet: vnet-lab23] 10.0.0.0/16
├─ [Subnet: snet-app] 10.0.2.0/24
│ └─ VM (no public IP)
└─ Route Table: 0.0.0.0/0 → 10.0.1.4 (FW)
🧪 Các Bước Thực Hiện
Tạo Resource Group và VNet
Tạo VNet với 2 subnet: AzureFirewallSubnet (bắt buộc /26 hoặc lớn hơn) và subnet ứng dụng.
- 1.1Portal → Resource Groups → + Create → Name:
rg-lab23-firewall→ Region: Southeast Asia → Review + Create - 1.2Virtual Networks → + Create → Name:
vnet-lab23→ Region: Southeast Asia → RG: rg-lab23-firewall - 1.3Tab IP Addresses → Address space:
10.0.0.0/16→ Xóa default subnet - 1.4+ Add subnet → Name:
AzureFirewallSubnet(tên bắt buộc chính xác) → Range:10.0.1.0/26 - 1.5+ Add subnet → Name:
snet-app→ Range:10.0.2.0/24→ Review + Create
# Tạo resource group
az group create \
--name rg-lab23-firewall \
--location southeastasia
# Tạo VNet với AzureFirewallSubnet
az network vnet create \
--resource-group rg-lab23-firewall \
--name vnet-lab23 \
--address-prefix 10.0.0.0/16 \
--subnet-name AzureFirewallSubnet \
--subnet-prefix 10.0.1.0/26
# Thêm subnet ứng dụng
az network vnet subnet create \
--resource-group rg-lab23-firewall \
--vnet-name vnet-lab23 \
--name snet-app \
--address-prefix 10.0.2.0/24
Tạo Public IP và Triển Khai Azure Firewall Standard
Azure Firewall yêu cầu Public IP với SKU Standard. Quá trình deploy mất 5–10 phút.
- 2.1Public IP addresses → + Create → Name:
pip-firewall-lab23→ SKU: Standard → Assignment: Static → Region: Southeast Asia - 2.2Firewalls → + Create → Name:
fw-lab23→ Region: Southeast Asia → RG: rg-lab23-firewall - 2.3Tier: Standard → Firewall management: Use Firewall rules (classic) cho lab đơn giản này
- 2.4Virtual network:
vnet-lab23→ Public IP:pip-firewall-lab23→ Review + Create → đợi 5–10 phút - 2.5Sau khi deploy xong: ghi lại Firewall private IP (ví dụ 10.0.1.4) ở mục Overview
# Tạo Public IP Standard SKU (bắt buộc)
az network public-ip create \
--resource-group rg-lab23-firewall \
--name pip-firewall-lab23 \
--sku Standard \
--allocation-method Static \
--location southeastasia
# Triển khai Azure Firewall Standard
az network firewall create \
--resource-group rg-lab23-firewall \
--name fw-lab23 \
--location southeastasia \
--sku-tier Standard
# Gán Public IP vào Firewall
az network firewall ip-config create \
--firewall-name fw-lab23 \
--resource-group rg-lab23-firewall \
--name fw-ipconfig \
--public-ip-address pip-firewall-lab23 \
--vnet-name vnet-lab23
# Lấy private IP của Firewall
az network firewall show \
--resource-group rg-lab23-firewall \
--name fw-lab23 \
--query "ipConfigurations[0].privateIPAddress" \
--output tsv
Tạo Route Table — Ép Traffic Qua Firewall
User-Defined Route (UDR) ép toàn bộ outbound traffic từ snet-app qua private IP của Azure Firewall thay vì đi thẳng ra Internet.
- 3.1Route tables → + Create → Name:
rt-lab23-app→ Region: Southeast Asia → RG: rg-lab23-firewall - 3.2Vào rt-lab23-app → Routes → + Add → Route name:
route-to-internet - 3.3Destination:
0.0.0.0/0→ Next hop type: Virtual appliance → Next hop address:10.0.1.4(private IP firewall) - 3.4Subnets → + Associate → VNet: vnet-lab23 → Subnet: snet-app
# Lấy private IP firewall (chạy bước 2 trước)
FW_PRIVATE_IP=$(az network firewall show \
--resource-group rg-lab23-firewall \
--name fw-lab23 \
--query "ipConfigurations[0].privateIPAddress" \
--output tsv)
echo "Firewall Private IP: $FW_PRIVATE_IP"
# Tạo Route Table
az network route-table create \
--resource-group rg-lab23-firewall \
--name rt-lab23-app \
--location southeastasia \
--disable-bgp-route-propagation true
# Thêm route ép traffic qua Firewall
az network route-table route create \
--resource-group rg-lab23-firewall \
--route-table-name rt-lab23-app \
--name route-to-internet \
--address-prefix 0.0.0.0/0 \
--next-hop-type VirtualAppliance \
--next-hop-ip-address $FW_PRIVATE_IP
# Gán Route Table vào subnet ứng dụng
az network vnet subnet update \
--resource-group rg-lab23-firewall \
--vnet-name vnet-lab23 \
--name snet-app \
--route-table rt-lab23-app
Cấu Hình Application Rule Collection
Application rule cho phép traffic HTTP/HTTPS đến domain được chỉ định. Mọi traffic không match đều bị deny (default deny của Azure Firewall).
- 4.1fw-lab23 → Rules (classic) → Application rule collection → + Add application rule collection
- 4.2Name:
arc-allow-microsoft→ Priority:100→ Action: Allow - 4.3Trong bảng Rules: Name:
allow-microsoft→ Source:10.0.2.0/24 - 4.4Protocol:Port:
Https:443,Http:80→ Target FQDNs:*.microsoft.com - 4.5Thêm rule thứ 2: allow-windowsupdate → FQDNs:
*.windowsupdate.com→ Add
# Tạo Application Rule Collection — cho phép *.microsoft.com và *.windowsupdate.com
az network firewall application-rule collection add \
--resource-group rg-lab23-firewall \
--firewall-name fw-lab23 \
--collection-name arc-allow-microsoft \
--priority 100 \
--action Allow
# Thêm rule allow microsoft domains
az network firewall application-rule add \
--resource-group rg-lab23-firewall \
--firewall-name fw-lab23 \
--collection-name arc-allow-microsoft \
--name allow-microsoft \
--source-addresses 10.0.2.0/24 \
--protocols Http=80 Https=443 \
--target-fqdns "*.microsoft.com" "*.windowsupdate.com"
# Kiểm tra rules đã được tạo
az network firewall show \
--resource-group rg-lab23-firewall \
--name fw-lab23 \
--query "applicationRuleCollections" \
--output table
Tạo VM Test và Kiểm Tra Kết Nối
VM trong snet-app không có public IP. Dùng Azure Bastion hoặc Run Command để test. Kiểm tra domain được phép vs bị chặn.
# Tạo VM trong snet-app, KHÔNG gán public IP
az vm create \
--resource-group rg-lab23-firewall \
--name vm-test-lab23 \
--image Ubuntu2204 \
--vnet-name vnet-lab23 \
--subnet snet-app \
--public-ip-address "" \
--admin-username azureuser \
--generate-ssh-keys \
--size Standard_B1s \
--no-wait
# Kiểm tra VM đã tạo
az vm list \
--resource-group rg-lab23-firewall \
--output table
# Dùng Run Command để test HTTP từ VM (thay vm-test-lab23)
# Test domain được phép: microsoft.com
az vm run-command invoke \
--resource-group rg-lab23-firewall \
--name vm-test-lab23 \
--command-id RunShellScript \
--scripts "curl -s -o /dev/null -w '%{http_code}' https://www.microsoft.com --max-time 10 && echo ' - microsoft.com: ALLOWED'"
# Test domain bị chặn: google.com
az vm run-command invoke \
--resource-group rg-lab23-firewall \
--name vm-test-lab23 \
--command-id RunShellScript \
--scripts "curl -s -o /dev/null -w '%{http_code}' https://www.google.com --max-time 10 && echo ' - google.com: SHOULD BE BLOCKED'"
📊 Kết Quả Đầu Ra Lab 23
fw-lab23 → ProvisioningState: Succeeded, có private IP trong AzureFirewallSubnet
0.0.0.0/0 → next hop VirtualAppliance → firewall private IP
*.microsoft.com → Allow. Mọi domain khác → Deny (default)
vm-test-lab23 chỉ có private IP, truy cập qua Azure Bastion hoặc Run Command
🧹 Dọn Dẹp Tài Nguyên
Azure Firewall tốn chi phí theo giờ. Xóa ngay sau lab nếu không tiếp tục Lab 24.
# Xóa toàn bộ resource group (bao gồm firewall, VNet, VM, Public IP)
az group delete \
--name rg-lab23-firewall \
--yes \
--no-wait
# Xác nhận đã xóa
az group show --name rg-lab23-firewall 2>&1 | grep -c "not found"
❓ Câu Hỏi Ôn Tập
1. Tại sao AzureFirewallSubnet phải có kích thước tối thiểu /26?
Gợi ý: Azure Firewall cần ít nhất 64 địa chỉ IP để hỗ trợ scale-out (nhiều instance), /26 = 64 hosts
2. Sự khác biệt giữa Application Rule và Network Rule trong Azure Firewall là gì?
Gợi ý: Application rule → Layer 7, kiểm soát FQDN/URL; Network rule → Layer 3/4, kiểm soát IP/Port/Protocol
3. Tại sao phải tạo Route Table với next hop VirtualAppliance? Nếu không có UDR thì traffic đi đâu?
Gợi ý: Không có UDR → traffic đi thẳng ra Internet qua Azure default routing, bypassing firewall
4. Azure Firewall Standard và Premium khác nhau điểm gì quan trọng nhất cho bảo mật?
Gợi ý: Premium có IDPS (Intrusion Detection/Prevention), TLS inspection, URL filtering — Standard chỉ có FQDN filtering cơ bản
5. Public IP của Azure Firewall phải có SKU nào và tại sao không dùng SKU Basic?
Gợi ý: Bắt buộc SKU Standard. SKU Basic sẽ bị retire 30/09/2025 và không hỗ trợ zone redundancy