Wdrażanie i konfigurowanie usługi Azure Firewall przy użyciu programu Azure PowerShell

Kontrolowanie dostępu do sieciowego ruchu wychodzącego jest ważną częścią ogólnego planu zabezpieczeń sieci. Możesz na przykład ograniczyć dostęp do witryn internetowych. Możesz też ograniczyć wychodzące adresy IP i porty, do których można uzyskać dostęp.

Dostęp do sieci wychodzącej można kontrolować z podsieci platformy Azure przy użyciu usługi Azure Firewall. Za pomocą usługi Azure Firewall można skonfigurować:

  • Reguły aplikacji, które definiują w pełni kwalifikowane nazwy domen (FQDN), do których można uzyskać dostęp z podsieci.
  • Reguły sieci, które definiują adres źródłowy, protokół, port docelowy i adres docelowy.

Ruch sieciowy jest poddawany skonfigurowanym regułom zapory, gdy kierujesz go do zapory jako bramy domyślnej podsieci.

W tym artykule utworzysz uproszczoną pojedynczą sieć wirtualną z trzema podsieciami w celu łatwego wdrożenia. W przypadku wdrożeń produkcyjnych należy użyć modelu centrum i szprych, gdzie zapora znajduje się w swojej własnej sieci wirtualnej. Serwery obciążeń znajdują się w równorzędnych sieciach wirtualnych w tym samym regionie z co najmniej jedną podsiecią.

  • AzureFirewallSubnet — w tej podsieci znajduje się zapora.
  • Workload-SN — w tej podsieci znajduje się serwer obciążeń. Ruch sieciowy tej podsieci przechodzi przez zaporę.
  • AzureBastionSubnet — podsieć używana dla usługi Azure Bastion, która służy do nawiązywania połączenia z serwerem obciążenia.

Aby uzyskać więcej informacji na temat usługi Azure Bastion, zobacz Co to jest usługa Azure Bastion?

Ważne

Ceny godzinowe zaczynają się od momentu wdrożenia usługi Bastion, niezależnie od użycia danych wychodzących. Aby uzyskać więcej informacji, zobacz Ceny i SKU. Jeśli wdrażasz Bastion w ramach samouczka lub testu, zalecamy usunięcie tego zasobu po zakończeniu jego używania.

Diagram przedstawiający infrastrukturę sieciową zapory sieciowej.

W tym artykule dowiesz się, jak:

  • Konfigurowanie testowego środowiska sieciowego
  • Wdrażanie zapory
  • Tworzenie trasy domyślnej
  • Konfigurowanie reguły aplikacji w celu zezwolenia na dostęp do www.google.com
  • Konfigurowanie reguły sieci w celu umożliwienia dostępu do zewnętrznych serwerów DNS
  • Testowanie zapory

Jeśli wolisz, możesz wykonać tę procedurę przy użyciu witryny Azure Portal.

Jeśli nie masz subskrypcji Azure, przed rozpoczęciem utwórz darmowe konto.

Prerequisites

Ta procedura wymaga lokalnego uruchomienia programu PowerShell. Musisz mieć zainstalowany moduł Azure PowerShell. Uruchom Get-Module -ListAvailable Az, aby znaleźć wersję. Jeśli konieczne będzie uaktualnienie, zobacz Instalowanie modułu Azure PowerShell. Po zweryfikowaniu wersji programu PowerShell uruchom polecenie Connect-AzAccount, aby utworzyć połączenie z platformą Azure.

Konfigurowanie sieci

Najpierw utwórz grupę zasobów zawierającą zasoby wymagane do wdrożenia zapory. Następnie utwórz sieć wirtualną, podsieci i serwery testowe.

Tworzenie grupy zasobów

Użyj New-AzResourceGroup, aby utworzyć grupę zasobów dla wdrożenia.

New-AzResourceGroup -Name Test-FW-RG -Location "East US"

Tworzenie sieci wirtualnej i hosta usługi Azure Bastion

Ta sieć wirtualna ma trzy podsieci. Użyj New-AzVirtualNetworkSubnetConfig, aby je zdefiniować.

Notatka

Rozmiar podsieci AzureFirewallSubnet to /26. Aby uzyskać więcej informacji na temat rozmiaru podsieci, zobacz Często zadawane pytania dotyczące usługi Azure Firewall.

$Bastionsub = New-AzVirtualNetworkSubnetConfig `
    -Name AzureBastionSubnet `
    -AddressPrefix 10.0.0.0/27
$FWsub = New-AzVirtualNetworkSubnetConfig `
    -Name AzureFirewallSubnet `
    -AddressPrefix 10.0.1.0/26
$Worksub = New-AzVirtualNetworkSubnetConfig `
    -Name Workload-SN `
    -AddressPrefix 10.0.2.0/24

Użyj polecenia New-AzVirtualNetwork, aby utworzyć sieć wirtualną.

$testVnet = New-AzVirtualNetwork `
    -Name Test-FW-VN `
    -ResourceGroupName Test-FW-RG `
    -Location "East US" `
    -AddressPrefix 10.0.0.0/16 `
    -Subnet $Bastionsub, $FWsub, $Worksub

Tworzenie publicznego adresu IP dla hosta usługi Azure Bastion

Użyj polecenia New-AzPublicIpAddress , aby utworzyć statyczny publiczny adres IP hosta usługi Bastion:

$publicip = New-AzPublicIpAddress `
    -ResourceGroupName Test-FW-RG `
    -Location "East US" `
    -Name Bastion-pip `
    -AllocationMethod static `
    -Sku standard

Tworzenie hosta usługi Azure Bastion

Użyj polecenia New-AzBastion, aby utworzyć hosta Bastion.

New-AzBastion `
    -ResourceGroupName Test-FW-RG `
    -Name Bastion-01 `
    -PublicIpAddress $publicip `
    -VirtualNetwork $testVnet

Tworzenie maszyny wirtualnej

Użyj polecenia New-AzVM, aby utworzyć maszynę wirtualną dla obciążeń. Po wyświetleniu monitu wpisz nazwę użytkownika i hasło:

# Create the NIC
$wsn = Get-AzVirtualNetworkSubnetConfig `
    -Name Workload-SN `
    -VirtualNetwork $testVnet
$NIC01 = New-AzNetworkInterface `
    -Name Srv-Work `
    -ResourceGroupName Test-FW-RG `
    -Location "East US" `
    -Subnet $wsn

# Define the virtual machine
$SecurePassword = ConvertTo-SecureString "<choose a password>" -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential ("<choose a user name>", $SecurePassword);
$VirtualMachine = New-AzVMConfig `
    -VMName Srv-Work `
    -VMSize "Standard_DS2"
$VirtualMachine = Set-AzVMOperatingSystem `
    -VM $VirtualMachine `
    -Windows `
    -ComputerName Srv-Work `
    -ProvisionVMAgent `
    -EnableAutoUpdate `
    -Credential $Credential
$VirtualMachine = Add-AzVMNetworkInterface `
    -VM $VirtualMachine `
    -Id $NIC01.Id
$VirtualMachine = Set-AzVMSourceImage `
    -VM $VirtualMachine `
    -PublisherName 'MicrosoftWindowsServer' `
    -Offer 'WindowsServer' `
    -Skus '2019-Datacenter' `
    -Version latest

# Create the virtual machine
New-AzVM `
    -ResourceGroupName Test-FW-RG `
    -Location "East US" `
    -VM $VirtualMachine `
    -Verbose

Notatka

Platforma Azure udostępnia domyślny adres IP dostępu wychodzącego dla maszyn wirtualnych, które nie są przypisane do publicznego adresu IP lub znajdują się w puli zaplecza wewnętrznego podstawowego modułu równoważenia obciążenia platformy Azure. Domyślny mechanizm adresów IP dostępu wychodzącego zapewnia wychodzący adres IP, który nie jest konfigurowalny.

Domyślny adres IP dostępu wychodzącego jest wyłączony, gdy wystąpi jedno z następujących zdarzeń:

  • Publiczny adres IP jest przypisywany do maszyny wirtualnej.
  • Maszyna wirtualna (VM) jest umieszczana w puli zaplecza standardowego modułu równoważenia obciążenia, z regułami wychodzącymi lub bez nich.
  • Zasób usługi Azure NAT Gateway jest przypisywany do podsieci maszyny wirtualnej.

Maszyny wirtualne tworzone przy użyciu zestawów skalowania maszyn wirtualnych w trybie elastycznej aranżacji nie mają domyślnego dostępu wychodzącego.

Aby uzyskać więcej informacji na temat połączeń wychodzących na platformie Azure, zobacz Domyślny dostęp wychodzący na platformie Azure i Używanie źródłowego tłumaczenia adresów sieciowych (SNAT) dla połączeń wychodzących.

Wdrażanie zapory

Użyj New-AzPublicIpAddress oraz New-AzFirewall, aby wdrożyć zaporę w sieci wirtualnej.

# Get a Public IP for the firewall
$FWpip = New-AzPublicIpAddress `
    -Name "fw-pip" `
    -ResourceGroupName Test-FW-RG `
    -Location "East US" `
    -AllocationMethod Static `
    -Sku Standard
# Create the firewall
$Azfw = New-AzFirewall `
    -Name Test-FW01 `
    -ResourceGroupName Test-FW-RG `
    -Location "East US" `
    -VirtualNetwork $testVnet `
    -PublicIpAddress $FWpip

# Save the firewall private IP address for future use

$AzfwPrivateIP = $Azfw.IpConfigurations.privateipaddress
$AzfwPrivateIP

Zanotuj prywatny adres IP. Będzie ona używana później podczas tworzenia trasy domyślnej.

Tworzenie trasy domyślnej

Użyj polecenia New-AzRouteTable i Add-AzRouteConfig , aby utworzyć tabelę tras z domyślną trasą wskazującą zaporę, a następnie skojarz ją z podsiecią obciążenia:

$routeTableDG = New-AzRouteTable `
  -Name Firewall-rt-table `
  -ResourceGroupName Test-FW-RG `
  -location "East US" `
  -DisableBgpRoutePropagation

# Create a route
Add-AzRouteConfig `
  -Name "DG-Route" `
  -RouteTable $routeTableDG `
  -AddressPrefix 0.0.0.0/0 `
  -NextHopType "VirtualAppliance" `
  -NextHopIpAddress $AzfwPrivateIP
Set-AzRouteTable

# Associate the route table to the subnet

Set-AzVirtualNetworkSubnetConfig `
  -VirtualNetwork $testVnet `
  -Name Workload-SN `
  -AddressPrefix 10.0.2.0/24 `
  -RouteTable $routeTableDG | Set-AzVirtualNetwork

Konfigurowanie reguły aplikacji

Użyj polecenia New-AzFirewallApplicationRule i New-AzFirewallApplicationRuleCollection , aby utworzyć regułę aplikacji, która udziela dostępu wychodzącego do www.google.comelementu :

$AppRule1 = New-AzFirewallApplicationRule `
    -Name Allow-Google `
    -SourceAddress 10.0.2.0/24 `
    -Protocol http, https `
    -TargetFqdn www.google.com
$AppRuleCollection = New-AzFirewallApplicationRuleCollection `
    -Name App-Coll01 `
    -Priority 200 `
    -ActionType Allow `
    -Rule $AppRule1
$Azfw.ApplicationRuleCollections.Add($AppRuleCollection)
Set-AzFirewall -AzureFirewall $Azfw

Usługa Azure Firewall zawiera wbudowany zbiór reguł dla infrastrukturalnych FQDN, które są domyślnie dozwolone. Te nazwy FQDN są specyficzne dla platformy i nie mogą być używane do innych celów. Aby uzyskać więcej informacji, zobacz Infrastruktura FQDN.

Konfigurowanie reguły sieci

Użyj New-AzFirewallNetworkRule i New-AzFirewallNetworkRuleCollection, aby utworzyć regułę sieciową, która zapewnia dostęp wychodzący do dwóch adresów IP na porcie 53 (DNS):

$NetRule1 = New-AzFirewallNetworkRule `
    -Name "Allow-DNS" `
    -Protocol UDP `
    -SourceAddress 10.0.2.0/24 `
    -DestinationAddress 209.244.0.3,209.244.0.4 `
    -DestinationPort 53
$NetRuleCollection = New-AzFirewallNetworkRuleCollection `
    -Name RCNet01 `
    -Priority 200 `
    -Rule $NetRule1 `
    -ActionType "Allow"
$Azfw.NetworkRuleCollections.Add($NetRuleCollection)
Set-AzFirewall -AzureFirewall $Azfw

Zmienianie podstawowego i pomocniczego adresu DNS dla interfejsu sieciowego Srv-Work

Na potrzeby testowania w tej procedurze skonfiguruj podstawowe i pomocnicze adresy DNS serwera. Ta konfiguracja nie jest ogólnym wymaganiem usługi Azure Firewall.

$NIC01.DnsSettings.DnsServers.Add("209.244.0.3")
$NIC01.DnsSettings.DnsServers.Add("209.244.0.4")
$NIC01 | Set-AzNetworkInterface

Testowanie zapory

Teraz przetestuj zaporę, aby potwierdzić, że działa zgodnie z oczekiwaniami.

  1. Połącz się z maszyną wirtualną Srv-Work przy użyciu usługi Bastion i zaloguj się.

    Zrzut ekranu przedstawiający połączenie z maszyną wirtualną Srv-Work przy użyciu usługi Azure Bastion.

  2. W programie Srv-Work otwórz okno programu PowerShell i uruchom następujące polecenia:

    nslookup www.google.com
    nslookup www.microsoft.com
    

    Oba polecenia zwracają odpowiedzi, pokazując, że zapytania DNS przechodzą przez zaporę.

  3. Uruchom następujące polecenia:

    Invoke-WebRequest -Uri https://www.google.com
    
    Invoke-WebRequest -Uri https://www.microsoft.com
    

    Żądania www.google.com udają się, a żądania www.microsoft.com nie udają się. Ten wynik pokazuje, że reguły zapory działają zgodnie z oczekiwaniami.

Teraz sprawdzono, że reguły zapory działają:

  • Nazwy DNS można rozpoznać przy użyciu skonfigurowanego zewnętrznego serwera DNS.
  • Możesz przejść do jednej dozwolonej nazwy FQDN, ale nie do żadnej innej.

Uprzątnij zasoby

Możesz zachować zasoby zapory na potrzeby następnego samouczka. Jeśli nie są już potrzebne, usuń grupę zasobów Test-FW-RG , aby usunąć wszystkie zasoby związane z zaporą:

Remove-AzResourceGroup -Name Test-FW-RG

Dalsze kroki