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. Na przykład możesz ograniczyć dostęp do witryn internetowych. Możesz też ograniczyć wychodzące adresy IP i porty, do których można uzyskać dostęp.

Jednym ze sposobów kontrolowania dostępu do sieciowego ruchu wychodzącego z podsieci platformy Azure jest użycie usługi Azure Firewall. Za pomocą usługi Azure Firewall można skonfigurować następujące reguły:

  • 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 podlega skonfigurowanym regułom zapory podczas kierowania ruchu sieciowego 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 zalecany jest model piasty i szprych, w którym zapora znajduje się we 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 Cennik i jednostki SKU. Jeśli wdrażasz usługę Bastion w ramach samouczka lub testu, zalecamy usunięcie tego zasobu po zakończeniu korzystania z niego.

Infrastruktura sieci samouczka

W tym artykule omówiono sposób wykonywania następujących zadań:

  • 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 platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Wymagania wstępne

Ta procedura wymaga lokalnego uruchomienia programu PowerShell. Musisz mieć zainstalowany moduł Azure PowerShell. Uruchom polecenie Get-Module -ListAvailable Az, aby dowiedzieć się, jaka wersja jest używana. 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 do obsługi testowania.

Tworzenie grupy zasobów

Grupa zasobów zawiera wszystkie zasoby 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:

Uwaga

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

Teraz utwórz 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

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

Tworzenie hosta usługi Azure Bastion

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

Tworzenie maszyny wirtualnej

Teraz utwórz maszynę wirtualną obciążenia i umieść ją w odpowiedniej podsieci. Po wyświetleniu monitu wpisz nazwę użytkownika i hasło maszyny wirtualnej.

Utwórz maszynę wirtualną obciążenia. Po wyświetleniu monitu wpisz nazwę użytkownika i hasło maszyny wirtualnej.

#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

Uwaga

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 jest umieszczana w puli zaplecza standardowego modułu równoważenia obciążenia z regułami ruchu wychodzącego lub bez tych reguł.
  • 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

Teraz wdróż 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. Użyjesz go później podczas tworzenia trasy domyślnej.

Tworzenie trasy domyślnej

Tworzenie tabeli z wyłączoną propagacją tras protokołu BGP

$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

Reguła aplikacji zezwala na dostęp wychodzący do www.google.com.

$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 wbudowaną kolekcję reguł dla nazw FQDN infrastruktury, które domyślnie są dozwolone. Te nazwy FQDN są specyficzne dla platformy i nie można ich używać do innych celów. Aby uzyskać więcej informacji, zobacz Infrastrukturalne nazwy FQDN.

Konfigurowanie reguły sieci

Reguła sieci zezwala na 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. Nie jest to ogólne wymaganie 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łączenie do Maszyna wirtualna Srv-Work przy użyciu usługi Bastion i zaloguj się.

    Połączenie przy użyciu usługi 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 powinny zwracać 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.google.com
    
    Invoke-WebRequest -Uri https://www.microsoft.com
    Invoke-WebRequest -Uri https://www.microsoft.com
    

    Żądania powinny zakończyć się powodzeniem www.google.com , a żądania powinny zakończyć się niepowodzeniem www.microsoft.com . Pokazuje to, że reguły zapory działają zgodnie z oczekiwaniami.

Teraz sprawdziliśmy, czy reguły zapory działają:

  • Możesz rozpoznać nazwy DNS przy użyciu skonfigurowanego zewnętrznego serwera DNS.
  • Możesz przejść do jednej z dozwolonych nazw FQDN, ale nie do innych.

Czyszczenie zasobów

Możesz zachować zasoby zapory na potrzeby następnego samouczka lub 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

Następne kroki