Filtrowanie ruchu sieciowego przy użyciu sieciowej grupy zabezpieczeń przy użyciu interfejsu wiersza polecenia platformy Azure

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 platformy Azure.

Wymagania wstępne

  • Ten artykuł wymaga wersji 2.0.28 lub nowszej interfejsu wiersza polecenia platformy Azure. W przypadku korzystania z usługi Azure Cloud Shell najnowsza wersja jest już zainstalowana.

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 az group create. Poniższy przykład obejmuje tworzenie grupy zasobów w lokalizacji eastus:

az group create \
  --name myResourceGroup \
  --location eastus

Utwórz grupę zabezpieczeń aplikacji za pomocą polecenia az network asg create. 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.

az network asg create \
  --resource-group myResourceGroup \
  --name myAsgWebServers \
  --location eastus

az network asg create \
  --resource-group myResourceGroup \
  --name myAsgMgmtServers \
  --location eastus

Tworzenie sieciowej grupy zabezpieczeń

Utwórz sieciową grupę zabezpieczeń za pomocą polecenia az network nsg create. Poniższy przykład tworzy sieciową grupę zabezpieczeń o nazwie myNsg:

# Create a network security group
az network nsg create \
  --resource-group myResourceGroup \
  --name myNsg

Tworzenie reguł zabezpieczeń

Utwórz regułę zabezpieczeń za pomocą polecenia az network nsg rule create. 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:

az network nsg rule create \
  --resource-group myResourceGroup \
  --nsg-name myNsg \
  --name Allow-Web-All \
  --access Allow \
  --protocol Tcp \
  --direction Inbound \
  --priority 100 \
  --source-address-prefix Internet \
  --source-port-range "*" \
  --destination-asgs "myAsgWebServers" \
  --destination-port-range 80 443

Poniższy przykład tworzy regułę zezwalającą na ruch przychodzący z Internetu do grupy zabezpieczeń aplikacji myMgmtServers przez port 22:

az network nsg rule create \
  --resource-group myResourceGroup \
  --nsg-name myNsg \
  --name Allow-SSH-All \
  --access Allow \
  --protocol Tcp \
  --direction Inbound \
  --priority 110 \
  --source-address-prefix Internet \
  --source-port-range "*" \
  --destination-asgs "myAsgMgmtServers" \
  --destination-port-range 22

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

Tworzenie sieci wirtualnej

Utwórz sieć wirtualną za pomocą polecenia az network vnet create. Poniższy przykład tworzy sieć wirtualną o nazwie myVirtualNetwork:

az network vnet create \
  --name myVirtualNetwork \
  --resource-group myResourceGroup \
  --address-prefixes 10.0.0.0/16

Dodaj podsieć do sieci wirtualnej za pomocą polecenia az network vnet subnet create. Poniższy przykład dodaje podsieć o nazwie mySubnet do sieci wirtualnej i kojarzy z nią sieciową grupę zabezpieczeń myNsg:

az network vnet subnet create \
  --vnet-name myVirtualNetwork \
  --resource-group myResourceGroup \
  --name mySubnet \
  --address-prefix 10.0.0.0/24 \
  --network-security-group myNsg

Tworzenie maszyn wirtualnych

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

Utwórz maszynę wirtualną za pomocą polecenia az vm create. Poniższy przykład tworzy maszynę wirtualną, która będzie służyć jako serwer internetowy. Opcja --asgs myAsgWebServers powoduje, że platforma Azure utworzy interfejs sieciowy dla maszyny wirtualnej jako element członkowski grupy zabezpieczeń aplikacji myAsgWebServers .

Określono --nsg "" opcję uniemożliwiającą platformie Azure utworzenie domyślnej sieciowej grupy zabezpieczeń dla interfejsu sieciowego tworzonego przez platformę Azure podczas tworzenia maszyny wirtualnej. Aby usprawnić ten artykuł, używane jest hasło. Klucze są zwykle używane we wdrożeniach produkcyjnych. Jeśli używasz kluczy, musisz również skonfigurować przekazywanie agenta SSH dla pozostałych kroków. Aby uzyskać więcej informacji, zobacz dokumentację klienta SSH. Zastąp <replace-with-your-password> ciąg w poniższym poleceniu wybranym hasłem.

adminPassword="<replace-with-your-password>"

az vm create \
  --resource-group myResourceGroup \
  --name myVmWeb \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork \
  --subnet mySubnet \
  --nsg "" \
  --asgs myAsgWebServers \
  --admin-username azureuser \
  --admin-password $adminPassword

W ciągu kilku minut zostanie utworzona maszyna wirtualna. Po utworzeniu maszyny wirtualnej zwracane są dane wyjściowe podobne do następującego przykładu:

{
  "fqdns": "",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVmWeb",
  "location": "eastus",
  "macAddress": "00-0D-3A-23-9A-49",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.4",
  "publicIpAddress": "13.90.242.231",
  "resourceGroup": "myResourceGroup"
}

Zanotuj wartość adresu publicIpAddress. Ten adres jest używany do uzyskiwania dostępu do maszyny wirtualnej z Internetu w późniejszym kroku. Utwórz maszynę wirtualną, która będzie służyć jako serwer zarządzania:

az vm create \
  --resource-group myResourceGroup \
  --name myVmMgmt \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork \
  --subnet mySubnet \
  --nsg "" \
  --asgs myAsgMgmtServers \
  --admin-username azureuser \
  --admin-password $adminPassword

W ciągu kilku minut zostanie utworzona maszyna wirtualna. Po utworzeniu maszyny wirtualnej zanotuj wartość publicIpAddress w zwróconych danych wyjściowych. Ten adres jest używany do uzyskiwania dostępu do maszyny wirtualnej w następnym kroku. Nie przechodź do następnego kroku, dopóki platforma Azure nie ukończy tworzenia maszyny wirtualnej.

Testowanie filtrów ruchu

Użyj poniższego polecenia, aby utworzyć sesję SSH z maszyną wirtualną myVmMgmt . Zastąp <ciąg publicIpAddress> publicznym adresem IP maszyny wirtualnej. W powyższym przykładzie adres IP to 13.90.242.231.

ssh azureuser@<publicIpAddress>

Po wyświetleniu monitu o hasło wprowadź hasło wprowadzone w obszarze Tworzenie maszyn wirtualnych.

Połączenie powiedzie się, ponieważ port 22 jest dozwolony dla ruchu przychodzącego z Internetu do grupy zabezpieczeń aplikacji myAsgMgmtServers dołączonej do maszyny wirtualnej myVmMgmt .

Użyj następującego polecenia, aby za pomocą protokołu SSH połączyć się z maszyną wirtualną myVmWeb z maszyny wirtualnej myVmMgmt :

ssh azureuser@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żna połączyć protokołu SSH z maszyną wirtualną myVmWeb z Internetu, ponieważ reguła zabezpieczeń myAsgWebServers nie zezwala na ruch przychodzący z Internetu przez port 22.

Użyj następujących poleceń, aby zainstalować serwer internetowy nginx na maszynie wirtualnej myVmWeb :

# Update package source
sudo apt-get -y update

# Install NGINX
sudo apt-get -y install nginx

Maszyna wirtualna myVmWeb jest dozwolona dla ruchu wychodzącego do Internetu w celu pobrania serwera nginx, ponieważ domyślna reguła zabezpieczeń zezwala na cały ruch wychodzący do Internetu. Zamknij sesję myVmWeb SSH, która pozostawi Cię w username@myVmMgmt:~$ wierszu polecenia maszyny wirtualnej myVmMgmt . Aby pobrać ekran powitalny serwera nginx z maszyny wirtualnej myVmWeb , wprowadź następujące polecenie:

curl myVmWeb

Wylogowywanie maszyny wirtualnej myVmMgmt . Aby potwierdzić, że możesz uzyskać dostęp do serwera internetowego myVmWeb spoza platformy Azure, wprowadź curl <publicIpAddress> z własnego komputera. Połączenie powiedzie się, ponieważ port 80 jest dozwolony dla ruchu przychodzącego z Internetu do grupy zabezpieczeń aplikacji myAsgWebServers dołączonej do maszyny wirtualnej myVmWeb .

Czyszczenie zasobów

Gdy grupa zasobów nie jest już potrzebna, użyj polecenia az group delete , aby usunąć grupę zasobów i wszystkie zawarte w niej zasoby.

az group delete --name myResourceGroup --yes

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.