Sanal makine ağ trafiği filtreleme sorununu tanılama

Bu makalede, bir sanal makine (VM) için etkili olan ağ güvenlik grubu (NSG) güvenlik kurallarını görüntüleyerek bir ağ trafiği filtresi sorununu tanılamayı öğreneceksiniz.

NSG'ler, vm'ye gelen ve giden trafik türlerini denetlemenize olanak tanır. Bir NSG'yi Azure sanal ağındaki bir alt ağ, vm'ye bağlı bir ağ arabirimi veya her ikisi ile ilişkilendirebilirsiniz. Bir ağ arabirimine uygulanan etkili güvenlik kuralları, ağ arabirimiyle ilişkilendirilmiş NSG'de ve ağ arabiriminin bulunduğu alt ağda bulunan kuralların bir toplamıdır. Farklı NSG'lerdeki kurallar bazen birbiriyle çakışabilir ve bir VM'nin ağ bağlantısını etkileyebilir. VM'nizin ağ arabirimlerine uygulanan NSG'lerden tüm etkili güvenlik kurallarını görüntüleyebilirsiniz. Sanal ağ, ağ arabirimi veya NSG kavramları hakkında bilginiz yoksa bkz. Sanal ağa genel bakış, Ağ arabirimi ve Ağ güvenlik gruplarına genel bakış.

Senaryo

İnternet'ten 80 numaralı bağlantı noktası üzerinden bir VM'ye bağlanmayı denersiniz, ancak bağlantı başarısız olur. 80 numaralı bağlantı noktasına neden İnternet'ten erişemediğini belirlemek için Azure portalını, PowerShell'i veya Azure CLI'yı kullanarak ağ arabirimi için geçerli güvenlik kurallarını görüntüleyebilirsiniz.

İzleyen adımlarda, geçerli güvenlik kurallarını görüntülemek için mevcut bir VM'niz olduğu varsayılır. Mevcut bir VM'niz yoksa, bu makaledeki görevleri tamamlamak için önce bir Linux veya Windows VM dağıtın. Bu makaledeki örnekler , myVMVMNic adlı ağ arabirimine sahip myVM adlı bir VM'ye yöneliktir. VM ve ağ arabirimi myResourceGroup adlı bir kaynak grubunda ve Doğu ABD bölgesindedir. Sorunu tanılamak istediğiniz VM için adımlardaki değerleri uygun şekilde değiştirin.

Azure portal kullanarak tanılama

  1. Gerekli izinlere sahip bir Azure hesabıyla Azure portalında oturum açın.

  2. Azure portal üst kısmında, arama kutusuna VM'nin adını girin. Arama sonuçlarında VM'nin adı göründüğünde seçin.

  3. Ayarlar'ın altında, aşağıdaki resimde gösterildiği gibi Ağ'ı seçin:

    Ekran görüntüsü, V M V M Nic'imin Ağ ayarlarını içeren Azure portal gösterir.

    Önceki resimde listelenen kurallar myVMVMNic adlı bir ağ arabirimine yöneliktir. İki farklı ağ güvenlik grubundan ağ arabirimi için GELEN BAĞLANTI NOKTASI KURALLARI olduğunu görürsünüz:

    • mySubnetNSG: Ağ arabiriminin içinde olduğu alt ağ ile ilişkilendirilir.
    • myVMNSG: myVMVMNic adlı VM'deki ağ arabirimiyle ilişkilendirilir.

    DenyAllInBound adlı kural, senaryoda açıklandığı gibi İnternet'ten 80 numaralı bağlantı noktası üzerinden VM'ye gelen iletişimi engelleyen kuraldır. Kural, İnternet'i içeren SOURCE için 0.0.0.0/0'ı listeler. Daha yüksek önceliğe (daha düşük sayıya) sahip başka bir kural 80 numaralı gelen bağlantı noktasına izin verir. İnternet'ten VM'ye gelen 80 numaralı bağlantı noktasına izin vermek için bkz. Sorunu çözme. Güvenlik kuralları ve Azure'ın bunları nasıl uyguladığı hakkında daha fazla bilgi edinmek için bkz. Ağ güvenlik grupları.

    Resmin en altında GIDEN BAĞLANTI NOKTASI KURALLARI'nı da görürsünüz. Bunun altında, ağ arabirimi için giden bağlantı noktası kuralları yer alır. Resimde her NSG için yalnızca dört gelen kural gösterse de, NSG'lerinizin dörtten fazla kuralı olabilir. Resimde, SOURCE ve DESTINATION altında VirtualNetwork ve SOURCE altındaAzureLoadBalancer'ı görürsünüz. VirtualNetwork ve AzureLoadBalancerhizmet etiketleridir. Hizmet etiketleri, güvenlik kuralı oluşturma karmaşıklığını en aza indirmeye yardımcı olmak için bir grup IP adresi ön ekini temsil eder.

  4. Vm'nin çalışır durumda olduğundan emin olun ve aşağıdaki resimde gösterilen geçerli güvenlik kurallarını görmek için önceki resimde gösterildiği gibi Geçerli güvenlik kuralları'nı seçin:

    İndir'in seçili ve AllowAzureLoadBalancerInbound Gelen kuralının seçili olduğu Etkin güvenlik kuralları bölmesini gösteren ekran görüntüsü.

    Listelenen kurallar 3. adımda gördüğünüz kurallarla aynıdır, ancak ağ arabirimi ve alt ağ ile ilişkili NSG için farklı sekmeler vardır. Resimde görebileceğiniz gibi, yalnızca ilk 50 kural gösterilir. Tüm kuralları içeren bir .csv dosyası indirmek için İndir'i seçin.

    Her hizmet etiketinin hangi ön ekleri temsil ettiğini görmek için AllowAzureLoadBalancerInbound adlı kural gibi bir kural seçin. Aşağıdaki resimde AzureLoadBalancer hizmet etiketinin ön ekleri gösterilmektedir:

    Girilen AllowAzureLoadBalancerInbound için Adres ön eklerini gösteren ekran görüntüsü.

    AzureLoadBalancer hizmet etiketi yalnızca bir ön eki temsil etse de, diğer hizmet etiketleri birkaç ön eki temsil eder.

  5. Önceki adımlarda myVMVMNic adlı bir ağ arabiriminin güvenlik kuralları gösterildi, ancak önceki resimlerin bazılarında myVMVMNic2 adlı bir ağ arabirimi de gördünüz. Bu örnekteki VM'ye bağlı iki ağ arabirimi vardır. Geçerli güvenlik kuralları her ağ arabirimi için farklı olabilir.

    myVMVMNic2 ağ arabirimi kurallarını görmek için seçin. Aşağıdaki resimde gösterildiği gibi, her iki ağ arabirimi de aynı alt ağda olduğundan, ağ arabiriminin alt ağıyla ilişkilendirilmiş olan kurallar myVMVMNic ağ arabirimiyle aynıdır. Bir NSG'yi bir alt ağ ile ilişkilendirdiğinizde, kuralları alt ağdaki tüm ağ arabirimlerine uygulanır.

    V M V M Nic 2'm için ağ ayarlarını içeren Azure portal gösteren ekran görüntüsü.

    myVMVMNic ağ arabiriminden farklı olarak, myVMVMNic2 ağ arabiriminin kendisiyle ilişkilendirilmiş bir ağ güvenlik grubu yoktur. Her ağ arabirimi ve alt ağ ile ilişkilendirilmiş sıfır veya bir NSG olabilir. Her ağ arabirimi veya alt ağ ile ilişkili NSG aynı veya farklı olabilir. Aynı ağ güvenlik grubunu seçtiğiniz sayıda ağ arabirimi ve alt ağ ile ilişkilendirebilirsiniz.

Etkili güvenlik kuralları VM aracılığıyla görüntülense de, geçerli güvenlik kurallarını bir kişi aracılığıyla da görüntüleyebilirsiniz:

PowerShell kullanarak tanılama

Not

Azure ile etkileşime geçmek için Azure Az PowerShell modülünü kullanmanızı öneririz. Başlamak için bkz. Azure PowerShell'i yükleme. Az PowerShell modülüne nasıl geçeceğinizi öğrenmek için bkz. Azure PowerShell’i AzureRM’den Az’ye geçirme.

Aşağıdaki komutları Azure Cloud Shell veya bilgisayarınızdan PowerShell çalıştırarak çalıştırabilirsiniz. Azure Cloud Shell ücretsiz etkileşimli bir kabuk. Yaygın Azure araçları, kabuğa önceden yüklenmiştir ve kabuk, hesabınızla birlikte kullanılacak şekilde yapılandırılmıştır. PowerShell'i bilgisayarınızdan çalıştırıyorsanız Azure PowerShell modülüne (sürüm 1.0.0 veya üzeri) ihtiyacınız vardır. Yüklü sürümü bulmak için bilgisayarınızda komutunu çalıştırın Get-Module -ListAvailable Az . Yükseltmeniz gerekirse, bkz. Azure PowerShell modülünü yükleme. PowerShell'i yerel olarak çalıştırıyorsanız, Azure'da gerekli izinlere sahip bir hesapla oturum açmak için de komutunu çalıştırmanız Connect-AzAccount gerekir].

Get-AzEffectiveNetworkSecurityGroup ile bir ağ arabirimi için geçerli güvenlik kurallarını alın. Aşağıdaki örnek, myResourceGroup adlı bir kaynak grubunda yer alan myVMVMNic adlı ağ arabirimi için geçerli güvenlik kurallarını alır:

Get-AzEffectiveNetworkSecurityGroup `
  -NetworkInterfaceName myVMVMNic `
  -ResourceGroupName myResourceGroup

Çıkış json biçiminde döndürülür. Çıkışı anlamak için bkz. komut çıkışını yorumlama. Çıkış yalnızca bir NSG ağ arabirimiyle, ağ arabiriminin içinde olduğu alt ağ veya her ikisiyle ilişkiliyse döndürülür. VM çalışır durumda olmalıdır. Bir VM'de farklı NSG'lerin uygulandığı birden çok ağ arabirimi olabilir. Sorun giderirken, her ağ arabirimi için komutunu çalıştırın.

Hala bağlantı sorunu yaşıyorsanız ek tanılama vedikkat edilmesi gerekenler bölümüne bakın.

Ağ arabiriminin adını bilmiyorsanız ancak ağ arabiriminin eklendiği VM'nin adını biliyorsanız, aşağıdaki komutlar bir VM'ye bağlı tüm ağ arabirimlerinin kimliklerini döndürür:

$VM = Get-AzVM -Name myVM -ResourceGroupName myResourceGroup
$VM.NetworkProfile

Aşağıdaki örneğe benzer bir çıktı alırsınız:

NetworkInterfaces
-----------------
{/subscriptions/<ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myVMVMNic

Önceki çıkışta ağ arabirimi adı myVMVMNic şeklindedir.

Azure CLI kullanarak tanılama

Bu makaledeki görevleri tamamlamak için Azure CLI komutlarını kullanıyorsanız, Azure Cloud Shell'da veya Azure CLI'yi bilgisayarınızdan çalıştırarak komutları çalıştırın. Bu makale, Azure CLI 2.0.32 veya sonraki bir sürümünü gerektirir. Yüklü sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme. Azure CLI'yı yerel olarak çalıştırıyorsanız, gerekli izinlere sahip bir hesapla Azure'da da çalıştırmanız az login ve oturum açmanız gerekir.

az network nic list-effective-nsg ile bir ağ arabirimi için etkili güvenlik kurallarını alın. Aşağıdaki örnek, myResourceGroup adlı bir kaynak grubunda yer alan myVMVMNic adlı ağ arabirimi için geçerli güvenlik kurallarını alır:

az network nic list-effective-nsg \
  --name myVMVMNic \
  --resource-group myResourceGroup

Çıkış json biçiminde döndürülür. Çıkışı anlamak için bkz. komut çıkışını yorumlama. Çıkış yalnızca bir NSG ağ arabirimiyle, ağ arabiriminin içinde olduğu alt ağ veya her ikisiyle ilişkiliyse döndürülür. VM çalışır durumda olmalıdır. Bir VM'de farklı NSG'lerin uygulandığı birden çok ağ arabirimi olabilir. Sorun giderirken, her ağ arabirimi için komutunu çalıştırın.

Hala bağlantı sorunu yaşıyorsanız ek tanılama vedikkat edilmesi gerekenler bölümüne bakın.

Ağ arabiriminin adını bilmiyorsanız ancak ağ arabiriminin eklendiği VM'nin adını biliyorsanız, aşağıdaki komutlar bir VM'ye bağlı tüm ağ arabirimlerinin kimliklerini döndürür:

az vm show \
  --name myVM \
  --resource-group myResourceGroup

Döndürülen çıktının içinde aşağıdaki örneğe benzer bilgiler görürsünüz:

"networkProfile": {
    "additionalProperties": {},
    "networkInterfaces": [
      {
        "additionalProperties": {},
        "id": "/subscriptions/<ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myVMVMNic",
        "primary": true,
        "resourceGroup": "myResourceGroup"
      },

Önceki çıkışta ağ arabirimi adı myVMVMNic arabirimidir.

Komut çıkışını yorumlama

Sorunu tanılamak için PowerShell'i veya Azure CLI'yı kullanıp kullanmadığınıza bakılmaksızın, aşağıdaki bilgileri içeren bir çıkış alırsınız:

  • NetworkSecurityGroup: Ağ güvenlik grubunun kimliği.
  • İlişkilendirme: Ağ güvenlik grubunun bir NetworkInterface veya Alt Ağ ile ilişkili olup olmadığı. Bir NSG her ikisiyle de ilişkiliyse, her NSG için NetworkSecurityGroup, Association ve EffectiveSecurityRules ile çıkış döndürülür. Etkin güvenlik kurallarını görüntülemek için komutu çalıştırmadan hemen önce NSG ilişkilendirilir veya ilişkisi kaldırılırsa, değişikliğin komut çıkışına yansıtılması için birkaç saniye beklemeniz gerekebilir.
  • EffectiveSecurityRules: Güvenlik kuralı oluşturma bölümünde her özelliğin açıklaması ayrıntılı olarak açıklandı. DefaultSecurityRules/ ile önceden oluşturulmuş kural adları, her NSG'de bulunan varsayılan güvenlik kurallarıdır. securityRules/ ile önceden oluşturulmuş kural adları, oluşturduğunuz kurallardır. destinationAddressPrefix veya sourceAddressPrefix özellikleri için Internet, VirtualNetwork ve AzureLoadBalancer gibi bir hizmet etiketi belirten kurallar da expandedDestinationAddressPrefix özelliği için değerlere sahiptir. expandedDestinationAddressPrefix özelliği, hizmet etiketiyle temsil edilen tüm adres ön eklerini listeler.

Çıktıda yinelenen kuralların listelendiğini görüyorsanız bunun nedeni NSG'nin hem ağ arabirimi hem de alt ağ ile ilişkili olmasıdır. Her iki NSG'de de aynı olan kendi kurallarınızı oluşturduysanız, her iki NSG'nin de aynı varsayılan kuralları vardır ve ek yinelenen kuralları olabilir.

Senaryoda açıklandığı gibi defaultSecurityRules/DenyAllInBound adlı kural, sanal makineye 80 numaralı bağlantı noktası üzerinden İnternet'ten gelen iletişimi engelleyen kuraldır. Daha yüksek önceliğe (daha düşük sayıya) sahip başka hiçbir kural İnternet'ten gelen 80 numaralı bağlantı noktasına izin verir.

Bir sorunu çözme

Bu makaledeki senaryoda sunulan sorunu tanılamak için Azure portalını, PowerShell'i veya Azure CLI'yı kullanmanız farketmeksizin, çözüm aşağıdaki özelliklere sahip bir ağ güvenlik kuralı oluşturmaktır:

Özellik Değer
Kaynak Herhangi bir
Kaynak bağlantı noktası aralıkları Herhangi biri
Hedef VM'nin IP adresi, bir IP adresi aralığı veya alt ağdaki tüm adresler.
Hedef bağlantı noktası aralıkları 80
Protokol TCP
Eylem İzin Ver
Öncelik 100
Ad Tümüne HTTP'ye İzin Ver

Kuralı oluşturduktan sonra, kuralın önceliği DenyAllInBound adlı ve trafiği reddeden varsayılan güvenlik kuralından daha yüksek olduğundan 80 numaralı bağlantı noktasına İnternet'ten gelen izin verilir. Güvenlik kuralı oluşturmayı öğrenin. Hem ağ arabirimi hem de alt ağ ile farklı NSG'ler ilişkiliyse, her iki NSG'de de aynı kuralı oluşturmanız gerekir.

Azure gelen trafiği işlediğinde, alt ağ ile ilişkili NSG'deki kuralları işler (ilişkili bir NSG varsa) ve ardından ağ arabirimiyle ilişkili NSG'deki kuralları işler. Ağ arabirimi ve alt ağ ile ilişkilendirilmiş bir NSG varsa, trafiğin VM'ye ulaşması için bağlantı noktasının her iki NSG'de de açık olması gerekir. Yönetim ve iletişim sorunlarını kolaylaştırmak için bir NSG'yi tek tek ağ arabirimleri yerine bir alt ağ ile ilişkilendirmenizi öneririz. Alt ağ içindeki VM'ler farklı güvenlik kurallarına ihtiyaç duyuyorsa, ağ arabirimlerini bir uygulama güvenlik grubunun (ASG) üyeleri yapabilir ve güvenlik kuralının kaynağı ve hedefi olarak bir ASG belirtebilirsiniz. Uygulama güvenlik grupları hakkında daha fazla bilgi edinin.

İletişim sorunları yaşamaya devam ediyorsanız bkz . Dikkat edilmesi gerekenler ve Ek tanılama.

Dikkat edilmesi gerekenler

Bağlantı sorunlarını giderirken aşağıdaki noktaları göz önünde bulundurun:

  • Varsayılan güvenlik kuralları İnternet'ten gelen erişimi engeller ve yalnızca sanal ağdan gelen trafiğe izin verir. İnternet'ten gelen trafiğe izin vermek için, varsayılan kurallardan daha yüksek öncelikli güvenlik kuralları ekleyin. Varsayılan güvenlik kuralları veya güvenlikkuralı ekleme hakkında daha fazla bilgi edinin.
  • Eşlenmiş sanal ağlarınız varsa, varsayılan olarak VIRTUAL_NETWORK hizmet etiketi eşlenmiş sanal ağlar için ön ekleri içerecek şekilde otomatik olarak genişler. Sanal ağ eşlemesi ile ilgili sorunları gidermek için , ExpandedAddressPrefix listesinde ön ekleri görüntüleyebilirsiniz. Sanal ağ eşlemesi ve hizmet etiketleri hakkında daha fazla bilgi edinin.
  • Geçerli güvenlik kuralları yalnızca vm'nin ağ arabirimi ve veya alt ağıyla ilişkili bir NSG varsa ve VM çalışır durumdaysa ağ arabirimi için gösterilir.
  • Ağ arabirimi veya alt ağ ile ilişkilendirilmiş NSG'ler yoksa ve vm'ye atanmış bir genel IP adresiniz varsa, tüm bağlantı noktaları her yerden gelen ve giden erişim için açıktır. VM'nin genel IP adresi varsa, ağ arabirimi alt ağına bir NSG uygulamanızı öneririz.

Ek tanılama

  • Vm'ye giden veya vm'den gelen trafiğe izin verilip verilmediğini belirlemek üzere hızlı bir test çalıştırmak için Azure Ağ İzleyicisi IP akışı doğrulama özelliğini kullanın. IP akışı doğrulama, trafiğe izin verilip verilmediğini belirtir. Reddedilirse, IP akışı doğrulama size trafiği reddeden güvenlik kuralını bildirir.
  • Vm'nin ağ bağlantısının başarısız olmasına neden olan bir güvenlik kuralı yoksa, sorun şunlardan kaynaklanıyor olabilir:
    • VM'nin işletim sisteminde çalışan güvenlik duvarı yazılımı
    • Sanal gereçler veya şirket içi trafik için yapılandırılan yollar. İnternet trafiği zorlamalı tünel aracılığıyla şirket içi ağınıza yönlendirilebilir. İnternet trafiğini bir sanal gereci veya şirket içinde zorlamanız durumunda sanal makineye İnternet'ten bağlanamayabilirsiniz. SANAL makineden giden trafik akışını engelleyebilecek yol sorunlarını tanılamayı öğrenmek için bkz. Sanal makine ağ trafiği yönlendirme sorununu tanılama.

Sonraki adımlar