Filtrowanie ruchu sieciowego przy użyciu sieciowej grupy zabezpieczeń przy użyciu programu PowerShell

Ruch sieciowy przychodzący do podsieci sieci wirtualnej i wychodzący z niej możesz filtrować za pomocą sieciowej grupy zabezpieczeń. Sieciowe grupy zabezpieczeń zawierają reguły zabezpieczeń, które filtrują ruch sieciowy według adresów IP, portów i protokołów. Reguły zabezpieczeń są stosowane do zasobów wdrożonych w podsieci. W tym artykule omówiono sposób wykonywania następujących zadań:

  • Tworzenie sieciowej grupy zabezpieczeń i reguł zabezpieczeń
  • Tworzenie sieci wirtualnej i kojarzenie sieciowej grupy zabezpieczeń z podsiecią
  • Wdrażanie maszyn wirtualnych w podsieci
  • Testowanie filtrów ruchu

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Azure Cloud Shell

Na platforma Azure hostowane jest Azure Cloud Shell, interaktywne środowisko powłoki, z którego można korzystać w przeglądarce. Do pracy z usługami platformy Azure można używać programu Bash lub PowerShell w środowisku Cloud Shell. Aby uruchomić kod w tym artykule, możesz użyć wstępnie zainstalowanych poleceń usługi Cloud Shell bez konieczności instalowania niczego w środowisku lokalnym.

Aby uruchomić środowisko Azure Cloud Shell:

Opcja Przykład/link
Wybierz pozycję Wypróbuj w prawym górnym rogu bloku kodu lub polecenia. Wybranie pozycji Wypróbuj nie powoduje automatycznego skopiowania kodu lub polecenia do usługi Cloud Shell. Screenshot that shows an example of Try It for Azure Cloud Shell.
Przejdź do witryny https://shell.azure.com lub wybierz przycisk Uruchom Cloud Shell, aby otworzyć środowisko Cloud Shell w przeglądarce. Button to launch Azure Cloud Shell.
Wybierz przycisk Cloud Shell na pasku menu w prawym górnym rogu witryny Azure Portal. Screenshot that shows the Cloud Shell button in the Azure portal

Aby użyć usługi Azure Cloud Shell:

  1. Uruchom usługę Cloud Shell.

  2. Wybierz przycisk Kopiuj w bloku kodu (lub bloku poleceń), aby skopiować kod lub polecenie.

  3. Wklej kod lub polecenie do sesji usługi Cloud Shell, wybierając klawisze Ctrl+Shift V w systemach Windows i Linux lub wybierając pozycję Cmd+Shift++V w systemie macOS.

  4. Wybierz klawisz Enter, aby uruchomić kod lub polecenie.

Jeśli zdecydujesz się zainstalować program PowerShell i korzystać z niego lokalnie, ten artykuł wymaga modułu Azure PowerShell w wersji 1.0.0 lub nowszej. Uruchom polecenie Get-Module -ListAvailable Az, aby dowiedzieć się, jaka wersja jest zainstalowana. Jeśli konieczne będzie uaktualnienie, zobacz Instalowanie modułu Azure PowerShell. Jeśli używasz programu PowerShell lokalnie, musisz też uruchomić polecenie Connect-AzAccount, aby utworzyć połączenie z platformą Azure.

Tworzenie sieciowej grupy zabezpieczeń

Sieciowa grupa zabezpieczeń zawiera reguły zabezpieczeń. Reguły zabezpieczeń określają źródło i lokalizację docelową. Źródła i lokalizacje docelowe mogą być grupami zabezpieczeń aplikacji.

Tworzenie grup zabezpieczeń aplikacji

Najpierw utwórz grupę zasobów dla wszystkich zasobów utworzonych w tym artykule za pomocą polecenia New-AzResourceGroup. Poniższy przykład obejmuje tworzenie grupy zasobów w lokalizacji eastus:

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

Utwórz grupę zabezpieczeń aplikacji za pomocą polecenia New-AzApplicationSecurityGroup. Grupa zabezpieczeń aplikacji umożliwia grupowanie serwerów o podobnych wymaganiach w zakresie filtrowania portów. Poniższy przykład tworzy dwie grupy zabezpieczeń aplikacji.

$webAsg = New-AzApplicationSecurityGroup `
  -ResourceGroupName myResourceGroup `
  -Name myAsgWebServers `
  -Location eastus

$mgmtAsg = New-AzApplicationSecurityGroup `
  -ResourceGroupName myResourceGroup `
  -Name myAsgMgmtServers `
  -Location eastus

Tworzenie reguł zabezpieczeń

Utwórz regułę zabezpieczeń za pomocą polecenia New-AzNetworkSecurityRuleConfig. Poniższy przykład tworzy regułę, która zezwala na ruch przychodzący z Internetu do grupy zabezpieczeń aplikacji myWebServers przez porty 80 i 443:

$webRule = New-AzNetworkSecurityRuleConfig `
  -Name "Allow-Web-All" `
  -Access Allow `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 100 `
  -SourceAddressPrefix Internet `
  -SourcePortRange * `
  -DestinationApplicationSecurityGroupId $webAsg.id `
  -DestinationPortRange 80,443

The following example creates a rule that allows traffic inbound from the internet to the *myMgmtServers* application security group over port 3389:

$mgmtRule = New-AzNetworkSecurityRuleConfig `
  -Name "Allow-RDP-All" `
  -Access Allow `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 110 `
  -SourceAddressPrefix Internet `
  -SourcePortRange * `
  -DestinationApplicationSecurityGroupId $mgmtAsg.id `
  -DestinationPortRange 3389

W tym artykule protokół RDP (port 3389) jest uwidoczniony w Internecie dla maszyny wirtualnej myAsgMgmtServers . W przypadku środowisk produkcyjnych zamiast uwidaczniania portu 3389 w Internecie zaleca się połączenie z zasobami platformy Azure, którymi chcesz zarządzać, przy użyciu sieci VPN lub prywatnego połączenia sieciowego.

Tworzenie sieciowej grupy zabezpieczeń

Utwórz sieciową grupę zabezpieczeń przy użyciu polecenia New-AzNetworkSecurityGroup. Poniższy przykład tworzy sieciową grupę zabezpieczeń o nazwie myNsg:

$nsg = New-AzNetworkSecurityGroup `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -Name myNsg `
  -SecurityRules $webRule,$mgmtRule

Tworzenie sieci wirtualnej

Utwórz sieć wirtualną przy użyciu polecenia New-AzVirtualNetwork. Poniższy przykład tworzy sieć wirtualną o nazwie myVirtualNetwork:

$virtualNetwork = New-AzVirtualNetwork `
  -ResourceGroupName myResourceGroup `
  -Location EastUS `
  -Name myVirtualNetwork `
  -AddressPrefix 10.0.0.0/16

Utwórz konfigurację podsieci za pomocą polecenia New-AzVirtualNetworkSubnetConfig, a następnie zapisz konfigurację podsieci w sieci wirtualnej za pomocą polecenia Set-AzVirtualNetwork. Poniższy przykład dodaje podsieć o nazwie mySubnet do sieci wirtualnej i kojarzy z nią sieciową grupę zabezpieczeń myNsg:

Add-AzVirtualNetworkSubnetConfig `
  -Name mySubnet `
  -VirtualNetwork $virtualNetwork `
  -AddressPrefix "10.0.2.0/24" `
  -NetworkSecurityGroup $nsg
$virtualNetwork | Set-AzVirtualNetwork

Tworzenie maszyn wirtualnych

Przed utworzeniem maszyn wirtualnych pobierz obiekt sieci wirtualnej z podsiecią za pomocą polecenia Get-AzVirtualNetwork:

$virtualNetwork = Get-AzVirtualNetwork `
 -Name myVirtualNetwork `
 -Resourcegroupname myResourceGroup

Utwórz publiczny adres IP dla każdej maszyny wirtualnej przy użyciu polecenia New-AzPublicIpAddress:

$publicIpWeb = New-AzPublicIpAddress `
  -AllocationMethod Dynamic `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -Name myVmWeb

$publicIpMgmt = New-AzPublicIpAddress `
  -AllocationMethod Dynamic `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -Name myVmMgmt

Utwórz dwa interfejsy sieciowe za pomocą polecenia New-AzNetworkInterface i przypisz publiczny adres IP do interfejsu sieciowego. Poniższy przykład tworzy interfejs sieciowy, przypisuje do niego publiczny adres IP myVmWeb oraz ustawia go jako element członkowski grupy zabezpieczeń aplikacji myAsgWebServers:

$webNic = New-AzNetworkInterface `
  -Location eastus `
  -Name myVmWeb `
  -ResourceGroupName myResourceGroup `
  -SubnetId $virtualNetwork.Subnets[0].Id `
  -ApplicationSecurityGroupId $webAsg.Id `
  -PublicIpAddressId $publicIpWeb.Id

Poniższy przykład tworzy interfejs sieciowy, przypisuje do niego publiczny adres IP myVmMgmt oraz ustawia go jako element członkowski grupy zabezpieczeń aplikacji myAsgMgmtServers:

$mgmtNic = New-AzNetworkInterface `
  -Location eastus `
  -Name myVmMgmt `
  -ResourceGroupName myResourceGroup `
  -SubnetId $virtualNetwork.Subnets[0].Id `
  -ApplicationSecurityGroupId $mgmtAsg.Id `
  -PublicIpAddressId $publicIpMgmt.Id

Utwórz dwie maszyny wirtualne w sieci wirtualnej, aby umożliwić weryfikację filtrowania ruchu w kolejnym kroku.

Utwórz konfigurację maszyny wirtualnej za pomocą polecenia New-AzVMConfig, a następnie utwórz maszynę wirtualną za pomocą polecenia New-AzVM. Poniższy przykład tworzy maszynę wirtualną, która będzie służyć jako serwer internetowy. Opcja -AsJob tworzy maszynę wirtualną w tle, dzięki czemu można przejść do następnego kroku:

# Create user object
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."

$webVmConfig = New-AzVMConfig `
  -VMName myVmWeb `
  -VMSize Standard_DS1_V2 | `
Set-AzVMOperatingSystem -Windows `
  -ComputerName myVmWeb `
  -Credential $cred | `
Set-AzVMSourceImage `
  -PublisherName MicrosoftWindowsServer `
  -Offer WindowsServer `
  -Skus 2016-Datacenter `
  -Version latest | `
Add-AzVMNetworkInterface `
  -Id $webNic.Id
New-AzVM `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -VM $webVmConfig `
  -AsJob

Utwórz maszynę wirtualną, która będzie służyć jako serwer zarządzania:

# Create user object
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."

# Create the web server virtual machine configuration and virtual machine.
$mgmtVmConfig = New-AzVMConfig `
  -VMName myVmMgmt `
  -VMSize Standard_DS1_V2 | `
Set-AzVMOperatingSystem -Windows `
  -ComputerName myVmMgmt `
  -Credential $cred | `
Set-AzVMSourceImage `
  -PublisherName MicrosoftWindowsServer `
  -Offer WindowsServer `
  -Skus 2016-Datacenter `
  -Version latest | `
Add-AzVMNetworkInterface `
  -Id $mgmtNic.Id
New-AzVM `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -VM $mgmtVmConfig

Tworzenie maszyny wirtualnej zajmuje kilka minut. Nie przechodź do następnego kroku, dopóki platforma Azure nie ukończy tworzenia maszyny wirtualnej.

Testowanie filtrów ruchu

Użyj polecenia Get-AzPublicIpAddress, aby uzyskać publiczny adres IP maszyny wirtualnej. W poniższym przykładzie zwracany jest publiczny adres IP maszyny wirtualnej o nazwie myVmMgmt:

Get-AzPublicIpAddress `
  -Name myVmMgmt `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

Użyj następującego polecenia, aby utworzyć sesję usług pulpitu zdalnego z maszyną wirtualną myVmMgmt z komputera lokalnego. Zastąp ciąg <publicIpAddress> adresem IP zwróconym w poprzednim poleceniu.

mstsc /v:<publicIpAddress>

Otwórz pobrany plik RDP. Po wyświetleniu monitu wybierz pozycję Połącz.

Wprowadź nazwę użytkownika i hasło określone podczas tworzenia maszyny wirtualnej (może okazać się konieczne wybranie pozycji Więcej opcji oraz Użyj innego konta, aby określić poświadczenia wprowadzone podczas tworzenia maszyny wirtualnej), a następnie wybierz przycisk OK. Podczas procesu logowania może pojawić się ostrzeżenie o certyfikacie. Wybierz pozycję Tak, aby nawiązać połączenie.

Połączenie powiedzie się, ponieważ port 3389 zezwala na ruch przychodzący z Internetu do grupy zabezpieczeń aplikacji myAsgMgmtServers, w której znajduje się interfejs sieciowy dołączony do maszyny wirtualnej myVmMgmt.

Użyj następującego polecenia, aby utworzyć połączenie pulpitu zdalnego z maszyną wirtualną myVmWeb z maszyny wirtualnej myVmMgmt, korzystając z następującego polecenia w programie PowerShell:

mstsc /v:myvmWeb

Połączenie powiedzie się, ponieważ domyślne reguły zabezpieczeń w każdej sieciowej grupie zabezpieczeń zezwalają na ruch na wszystkich portach pomiędzy wszystkimi adresami IP w sieci wirtualnej. Nie możesz utworzyć połączenia pulpitu zdalnego z maszyną wirtualną myVmWeb z Internetu, ponieważ reguły zabezpieczeń myAsgWebServers nie zezwalają na ruch przychodzący z Internetu przez port 3389.

Użyj następującego polecenia, aby zainstalować usługi Microsoft IIS na maszynie wirtualnej myVmWeb z poziomu programu PowerShell:

Install-WindowsFeature -name Web-Server -IncludeManagementTools

Po zakończeniu instalacji usług IIS odłącz się od maszyny wirtualnej myVmWeb, co spowoduje pozostanie w połączeniu pulpitu zdalnego z maszyną wirtualną myVmMgmt. Aby wyświetlić ekran powitalny usług IIS, otwórz przeglądarkę internetową i przejdź do http://myVmWeb.

Odłącz się od maszyny wirtualnej myVmMgmt.

Na komputerze wprowadź następujące polecenie w programie PowerShell, aby pobrać publiczny adres IP serwera myVmWeb:

Get-AzPublicIpAddress `
  -Name myVmWeb `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

Aby potwierdzić, że możesz uzyskać dostęp do serwera internetowego myVmWeb spoza platformy Azure, otwórz przeglądarkę internetową na komputerze i przejdź do adresu http://<public-ip-address-from-previous-step>. Połączenie powiedzie się, ponieważ port 80 zezwala na ruch przychodzący z Internetu do grupy zabezpieczeń aplikacji myAsgWebServers, w której znajduje się interfejs sieciowy dołączony do maszyny wirtualnej myVmWeb.

Czyszczenie zasobów

Gdy grupa zasobów nie jest już potrzebna, możesz użyć polecenia Remove-AzResourceGroup , aby usunąć grupę zasobów i wszystkie zawarte w niej zasoby:

Remove-AzResourceGroup -Name myResourceGroup -Force

Następne kroki

W tym artykule utworzono sieciową grupę zabezpieczeń i skojarzyliśmy ją z podsiecią sieci wirtualnej. Aby dowiedzieć się więcej na temat sieciowych grup zabezpieczeń, zobacz Network security groups overview (Omówienie sieciowych grup zabezpieczeń) oraz Manage a network security group (Zarządzanie sieciową grupą zabezpieczeń).

Platforma Azure domyślnie kieruje ruch pomiędzy podsieciami. Zamiast tego możesz przykładowo skierować ruch pomiędzy podsieciami przez maszynę wirtualną, która będzie służyć jako zapora. Aby dowiedzieć się, jak to zrobić, zobacz Tworzenie tabeli tras.