AZ-500 LAB 23 ~2 giờ Chương 06 Secure Networking

Azure Firewall Kiểm Soát Egress Traffic

Triển khai Azure Firewall Standard trên VNet hub, tạo route table ép toàn bộ outbound traffic qua firewall, cấu hình application rule chỉ cho phép truy cập domain cụ thể — kiểm soát egress hoàn toàn.

Cảnh báo chi phí: Azure Firewall tốn ~$1.25/giờ (Standard) hoặc ~$2.50/giờ (Premium). Luôn xóa firewall và Public IP sau lab. Ước tính lab này ~$3–5 nếu hoàn thành trong 2 giờ.

🎯 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ị

Yêu cầu:
  • 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)
Kiến thức cần có:
  • 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*.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

1

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.

Cách 1 — Portal
  1. 1.1Portal → Resource Groups → + Create → Name: rg-lab23-firewall → Region: Southeast Asia → Review + Create
  2. 1.2Virtual Networks → + Create → Name: vnet-lab23 → Region: Southeast Asia → RG: rg-lab23-firewall
  3. 1.3Tab IP Addresses → Address space: 10.0.0.0/16 → Xóa default subnet
  4. 1.4+ Add subnet → Name: AzureFirewallSubnet (tên bắt buộc chính xác) → Range: 10.0.1.0/26
  5. 1.5+ Add subnet → Name: snet-app → Range: 10.0.2.0/24 → Review + Create
Cách 2 — Azure CLI
Azure CLI— Bash / Cloud Shell / PowerShell
# 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
2

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.

Cách 1 — Portal
  1. 2.1Public IP addresses → + Create → Name: pip-firewall-lab23 → SKU: Standard → Assignment: Static → Region: Southeast Asia
  2. 2.2Firewalls → + Create → Name: fw-lab23 → Region: Southeast Asia → RG: rg-lab23-firewall
  3. 2.3Tier: Standard → Firewall management: Use Firewall rules (classic) cho lab đơn giản này
  4. 2.4Virtual network: vnet-lab23 → Public IP: pip-firewall-lab23 → Review + Create → đợi 5–10 phút
  5. 2.5Sau khi deploy xong: ghi lại Firewall private IP (ví dụ 10.0.1.4) ở mục Overview
Cách 2 — Azure CLI
Azure CLI— mất ~5–10 phút
# 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
3

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.

Cách 1 — Portal
  1. 3.1Route tables → + Create → Name: rt-lab23-app → Region: Southeast Asia → RG: rg-lab23-firewall
  2. 3.2Vào rt-lab23-app → Routes → + Add → Route name: route-to-internet
  3. 3.3Destination: 0.0.0.0/0 → Next hop type: Virtual appliance → Next hop address: 10.0.1.4 (private IP firewall)
  4. 3.4Subnets → + Associate → VNet: vnet-lab23 → Subnet: snet-app
Cách 2 — Azure CLI
Azure CLI— thay FW_PRIVATE_IP bằng IP thực
# 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
4

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).

Cách 1 — Portal
  1. 4.1fw-lab23 → Rules (classic) → Application rule collection → + Add application rule collection
  2. 4.2Name: arc-allow-microsoft → Priority: 100 → Action: Allow
  3. 4.3Trong bảng Rules: Name: allow-microsoft → Source: 10.0.2.0/24
  4. 4.4Protocol:Port: Https:443,Http:80 → Target FQDNs: *.microsoft.com
  5. 4.5Thêm rule thứ 2: allow-windowsupdate → FQDNs: *.windowsupdate.com → Add
Cách 2 — Azure CLI
Azure CLI— application rule collection
# 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
5

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.

Cách 2 — Azure CLI
Azure CLI— tạo VM không có public IP
# 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ả mong đợi: microsoft.com → HTTP 200 (allowed). google.com → timeout hoặc connection refused (blocked by firewall).

📊 Kết Quả Đầu Ra Lab 23

Azure Firewall Standard deployed

fw-lab23 → ProvisioningState: Succeeded, có private IP trong AzureFirewallSubnet

Route Table gán vào snet-app

0.0.0.0/0 → next hop VirtualAppliance → firewall private IP

Application Rule hoạt động

*.microsoft.com → Allow. Mọi domain khác → Deny (default)

VM không public IP

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.

Azure CLI— xóa toàn bộ resource group
# 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

Lab 22: NSG Flow Logs Thư viện Labs Lab 24: DNAT Rule