Aracılığıyla paylaş


Trafik analizinde sorguları kullanma

Bu makalede, trafik analizi verilerini etkili bir şekilde çözümlemenize yardımcı olacak örnek Kusto Sorgu Dili (KQL) sorguları sağlanmaktadır. Trafik analizi, ağ trafiği desenleri, güvenlik olayları ve performans ölçümleri hakkında ayrıntılı içgörüler sağlamak için sanal ağ (VNet) akış günlüklerini ve ağ güvenlik grubu (NSG) akış günlüklerini işler.

Şu sorguları kullanarak:

  • Ağ trafiği desenlerini ve en çok iletişimde olan uç noktaları belirleme
  • Güvenlik olaylarını izleme ve olası tehditleri analiz etme
  • Ağ bağlantısı sorunlarını giderme
  • Ağ performansını ve kaynak kullanımını iyileştirme

Önkoşullar

NTANetAnalytics sorguları

Bu bölümde, Sanal Ağ trafik analizi verilerinizi analiz etmek için kullanabileceğiniz NTANetAnalytics tablosu için örnek sorgular sağlanır. NTANetAnalytics tablosu, gelişmiş ağ analizi bilgilerine sahip toplu akış günlüğü verileri içerir. Tablo şeması ve kullanılabilir alanlar hakkında daha fazla bilgi için bkz. NTANetAnalytics.

Genel IP'lerle etkileşim kuran alt ağları listeleme

Son 30 gün içinde Azure dışı genel IP'lerle etkileşim kuran tüm alt ağları listelemek için aşağıdaki sorguyu kullanın.

NTANetAnalytics
| where SubType == "FlowLog" and FlowStartTime > ago(30d) and FlowType == "ExternalPublic"
| project SrcSubnet, DestSubnet

Birbirleriyle etkileşim kuran alt ağları listeleme

Son 30 gün içinde birbiriyle trafik alışverişinde bulunan tüm alt ağları ve değiştirilen toplam baytları listelemek için aşağıdaki sorguyu kullanın.

NTANetAnalytics
| where SubType == 'FlowLog' and FaSchemaVersion == '3' and TimeGenerated > ago(30d)
| where isnotempty(SrcSubnet) and isnotempty(DestSubnet)
| summarize TotalBytes=sum(BytesSrcToDest + BytesDestToSrc) by SrcSubnet, DestSubnet,L4Protocol,DestPort

Bölgeler arası trafiği görüntüleme

Son 30 gün içindeki bölgesel ve bölgesel trafiği görüntülemek için aşağıdaki sorguyu kullanın.

NTANetAnalytics
| where TimeGenerated > ago(30d)
| project SrcRegion, DestRegion, BytesDestToSrc, BytesSrcToDest
| where isnotempty(SrcRegion) and isnotempty(DestRegion)
| summarize TransferredBytes=sum(BytesDestToSrc+BytesSrcToDest) by SrcRegion, DestRegion

Aboneliğe göre trafiği görüntüleme

Son 30 gün içindeki aboneliklere göre gruplandırılmış Azure trafiğini görüntülemek için aşağıdaki sorguyu kullanın.

NTANetAnalytics
| where TimeGenerated > ago(30d)
| project SrcSubscription, DestSubscription, BytesDestToSrc, BytesSrcToDest
| where isnotempty(SrcSubscription) and isnotempty(DestSubscription)
| summarize TransferredBytes=sum(BytesDestToSrc+BytesSrcToDest) by SrcSubscription, DestSubscription

Şirket içi trafiğin çoğunu alan sanal makineleri listeleme

Hangi sanal makinelerin şirket içi trafiği en çok aldığını denetlemek için aşağıdaki sorguyu kullanın.

NTANetAnalytics 
| where SubType == "FlowLog" and FlowType == "S2S"  
| where <Scoping condition> 
| mvexpand vm = pack_array(SrcVm, DestVm) to typeof(string) 
| where isnotempty(vm)  
| extend traffic = AllowedInFlows + DeniedInFlows + AllowedOutFlows + DeniedOutFlows // For bytes use: | extend traffic = InboundBytes + OutboundBytes
| make-series TotalTraffic = sum(traffic) default = 0 on FlowStartTime from datetime(<time>) to datetime(<time>) step 1m by vm 
| render timechart

Şirket içi trafiğin çoğunu alan IP'leri listeleme

Şirket içi trafiğin en çok hangi IP'leri aldığını denetlemek için aşağıdaki sorguyu kullanın.

NTANetAnalytics 
| where SubType == "FlowLog" and FlowType == "S2S"  
| where <Scoping condition> 
| mvexpand vm = pack_array(SrcIp, DestIp) to typeof(string) 
| where isnotempty(vm)  
| extend traffic = AllowedInFlows + DeniedInFlows + AllowedOutFlows + DeniedOutFlows // For bytes use: | extend traffic = InboundBytes + OutboundBytes
| make-series TotalTraffic = sum(traffic) default = 0 on FlowStartTime from datetime(<time>) to datetime(<time>) step 1m by vm 
| render timechart

Sanal makineye gelen veya sanal makineden trafik gönderen veya alan IP'leri listeleme

Son 30 gün içinde IP adresini kullanarak bir sanal makineyle veri alışverişinde bulunan tüm IP'leri listelemek için aşağıdaki sorguyu kullanın.

NTANetAnalytics
| where TimeGenerated > ago(30d)
| where SrcIp == "10.1.1.8" and strlen(DestIp)>0
| summarize TotalBytes=sum(BytesDestToSrc+BytesSrcToDest) by SrcIp, DestIp

ExpressRoute trafiğini görüntüleme

Son 30 gün içinde ExpressRoute bağlantıları üzerinden trafiği görüntülemek için aşağıdaki sorguyu kullanın.

NTANetAnalytics
| where SubType == 'FlowLog' and TimeGenerated > ago(30d)
| where isnotnull(SrcExpressRouteCircuit) or isnotnull(DestExpressRouteCircuit)
| extend TargetResourceName = tostring(split(TargetResourceId, "/")[2])
| summarize TotalBytes=sum(BytesSrcToDest + BytesDestToSrc) by TargetResourceName, bin(TimeGenerated, 1d)
| render columnchart

Yük dengeleyici trafik dağıtımlarını görüntüleme

Önünde yük dengeleyici bulunan uygulamanızın trafik dağıtımını görüntülemek için aşağıdaki sorguyu kullanın.

NTANetAnalytics
| where SubType == 'FlowLog' and TimeGenerated > ago(30d)
| where SrcLoadBalancer contains 'web' or DestLoadBalancer contains 'web'
| summarize TotalBytes = sum(BytesSrcToDest + BytesDestToSrc) by tostring(SrcIp)
| render piechart

Sanal makineler tarafından alınan trafikte standart sapması denetleyin

Şirket içi makinelerden sanal makineler tarafından alınan trafikte standart sapması denetlemek için aşağıdaki sorguyu kullanın.

NTANetAnalytics 
| where SubType == "FlowLog" and FlowType == "S2S"  
| where <Scoping condition> 
| mvexpand vm = pack_array(SrcVm, DestVm) to typeof(string) 
| where isnotempty(vm)  
| extend traffic = AllowedInFlows + DeniedInFlows + AllowedOutFlows + DeniedOutFlows // For bytes use: | extend traffic = InboundBytes + OutboundBytes
summarize deviation = stdev(traffic) by vm

IP'ler tarafından alınan trafikte standart sapması denetleyin

Şirket içi makinelerden IP'ler tarafından alınan trafikte standart sapması denetlemek için aşağıdaki sorguyu kullanın.

NTANetAnalytics 
| where SubType == "FlowLog" and FlowType == "S2S"  
| where <Scoping condition> 
| mvexpand vm = pack_array(SrcIp, DestIp) to typeof(string) 
| where isnotempty(vm)  
| extend traffic = AllowedInFlows + DeniedInFlows + AllowedOutFlows + DeniedOutFlows // For bytes use: | extend traffic = InboundBytes + OutboundBytes
| summarize deviation = stdev(traffic) by IP

NTAIpDetails sorguları

Bu bölümde, trafik analizi verilerinizdeki IP'ye özgü bilgileri analiz etmek için kullanabileceğiniz NTAIpDetails tablosu için örnek sorgular sağlanır. Daha fazla bilgi için bkz. NTAIpDetails.

Akış türlerini ve genel IP konumlarını görüntüleme

Akış türleri ve trafik analizi verilerinizdeki genel IP'lerin konumu hakkında bilgi edinmek için aşağıdaki sorguyu kullanın.

NTAIpDetails
| distinct FlowType, PublicIpDetails, Location

Kötü amaçlı akış türlerini görüntüleme

Kötü amaçlı akışlardaki iş parçacığı türlerini görüntülemek için aşağıdaki sorguyu kullanın.

NTAIpDetails
| where TimeGenerated > ago(30d)
| where FlowType == "MaliciousFlow"
| summarize count() by ThreatType
| render piechart

sorguları AzureNetworkAnalytics_CL

Bu bölümde, trafik analizi NSG akış günlükleri verilerinizi analiz etmek için kullanabileceğiniz AzureNetworkAnalytics_CL sorguları tablosu için örnek sorgular sağlanır.

Genel IP'lerle etkileşim kuran tüm alt ağları listeleme

Son 30 gün içinde Azure dışı genel IP'lerle etkileşim kuran tüm alt ağları listelemek için aşağıdaki sorguyu kullanın.

AzureNetworkAnalytics_CL
| where SubType_s == "FlowLog" and FlowStartTime_t >= ago(30d) and FlowType_s == "ExternalPublic"
| project Subnet1_s, Subnet2_s  

Genel IP'lerle etkileşim kuran akışların blob yolunu görüntüleme

Önceki sorgudaki akışların blob yolunu görüntülemek için aşağıdaki sorguyu kullanın.

let TableWithBlobId =
(AzureNetworkAnalytics_CL
   | where SubType_s == "Topology" and ResourceType == "NetworkSecurityGroup" and DiscoveryRegion_s == Region_s and IsFlowEnabled_b
   | extend binTime = bin(TimeProcessed_t, 6h),
            nsgId = strcat(Subscription_g, "/", Name_s),
            saNameSplit = split(FlowLogStorageAccount_s, "/")
   | extend saName = iif(arraylength(saNameSplit) == 3, saNameSplit[2], '')
   | distinct nsgId, saName, binTime)
| join kind = rightouter (
   AzureNetworkAnalytics_CL
   | where SubType_s == "FlowLog"  
   | extend binTime = bin(FlowEndTime_t, 6h)
) on binTime, $left.nsgId == $right.NSGList_s  
| extend blobTime = format_datetime(todatetime(FlowIntervalStartTime_t), "yyyy MM dd hh")
| extend nsgComponents = split(toupper(NSGList_s), "/"), dateTimeComponents = split(blobTime, " ")
| extend BlobPath = strcat("https://", saName,
                        "@insights-logs-networksecuritygroupflowevent/resoureId=/SUBSCRIPTIONS/", nsgComponents[0],
                        "/RESOURCEGROUPS/", nsgComponents[1],
                        "/PROVIDERS/MICROSOFT.NETWORK/NETWORKSECURITYGROUPS/", nsgComponents[2],
                        "/y=", dateTimeComponents[0], "/m=", dateTimeComponents[1], "/d=", dateTimeComponents[2], "/h=", dateTimeComponents[3],
                        "/m=00/macAddress=", replace(@"-", "", MACAddress_s),
                        "/PT1H.json")
| project-away nsgId, saName, binTime, blobTime, nsgComponents, dateTimeComponents;

TableWithBlobId
| where SubType_s == "FlowLog" and FlowStartTime_t >= ago(30d) and FlowType_s == "ExternalPublic"
| project Subnet_s , BlobPath

Önceki sorgu bloba doğrudan erişmek için aşağıdaki gibi bir URL oluşturur:

https://{storageAccountName}@insights-logs-networksecuritygroupflowevent/resoureId=/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroup}/PROVIDERS/MICROSOFT.NETWORK/NETWORKSECURITYGROUPS/{networkSecurityGroupName}/y={year}/m={month}/d={day}/h={hour}/m=00/macAddress={macAddress}/PT1H.json

Şirket içi trafiğin çoğunu alan sanal makineleri listeleme

Hangi sanal makinelerin şirket içi trafiği en çok aldığını denetlemek için aşağıdaki sorguyu kullanın.

AzureNetworkAnalytics_CL
| where SubType_s == "FlowLog" and FlowType_s == "S2S" 
| where <Scoping condition>
| mvexpand vm = pack_array(VM1_s, VM2_s) to typeof(string)
| where isnotempty(vm) 
| extend traffic = AllowedInFlows_d + DeniedInFlows_d + AllowedOutFlows_d + DeniedOutFlows_d // For bytes use: | extend traffic = InboundBytes_d + OutboundBytes_d 
| make-series TotalTraffic = sum(traffic) default = 0 on FlowStartTime_t from datetime(<time>) to datetime(<time>) step 1 m by vm
| render timechart

Şirket içi trafiğin çoğunu alan IP'leri listeleme

Şirket içi trafiğin en çok hangi IP'leri aldığını denetlemek için aşağıdaki sorguyu kullanın.

AzureNetworkAnalytics_CL
| where SubType_s == "FlowLog" and FlowType_s == "S2S" 
//| where <Scoping condition>
| mvexpand IP = pack_array(SrcIP_s, DestIP_s) to typeof(string)
| where isnotempty(IP) 
| extend traffic = AllowedInFlows_d + DeniedInFlows_d + AllowedOutFlows_d + DeniedOutFlows_d // For bytes use: | extend traffic = InboundBytes_d + OutboundBytes_d 
| make-series TotalTraffic = sum(traffic) default = 0 on FlowStartTime_t from datetime(<time>) to datetime(<time>) step 1 m by IP
| render timechart

Sanal makineler tarafından alınan trafikte standart sapması denetleyin

Şirket içi makinelerden sanal makineler tarafından alınan trafikte standart sapması denetlemek için aşağıdaki sorguyu kullanın.

AzureNetworkAnalytics_CL
| where SubType_s == "FlowLog" and FlowType_s == "S2S" 
//| where <Scoping condition>
| mvexpand vm = pack_array(VM1_s, VM2_s) to typeof(string)
| where isnotempty(vm) 
| extend traffic = AllowedInFlows_d + DeniedInFlows_d + AllowedOutFlows_d + DeniedOutFlows_d // For bytes use: | extend traffic = InboundBytes_d + utboundBytes_d
| summarize deviation = stdev(traffic) by vm

IP'ler tarafından alınan trafikte standart sapması denetleyin

Şirket içi makinelerden IP'ler tarafından alınan trafikte standart sapması denetlemek için aşağıdaki sorguyu kullanın.

AzureNetworkAnalytics_CL
| where SubType_s == "FlowLog" and FlowType_s == "S2S" 
//| where <Scoping condition>
| mvexpand IP = pack_array(SrcIP_s, DestIP_s) to typeof(string)
| where isnotempty(IP) 
| extend traffic = AllowedInFlows_d + DeniedInFlows_d + AllowedOutFlows_d + DeniedOutFlows_d // For bytes use: | extend traffic = InboundBytes_d + OutboundBytes_d
| summarize deviation = stdev(traffic) by IP

NSG kurallarıyla IP çiftleri arasında erişilebilen veya engellenen bağlantı noktalarını denetleyin

NSG kurallarıyla IP çiftleri arasında erişilebilen (veya engellenen) bağlantı noktalarını denetlemek için aşağıdaki sorguyu kullanın.

AzureNetworkAnalytics_CL
| where SubType_s == "FlowLog" and TimeGenerated between (startTime .. endTime)
| extend sourceIPs = iif(isempty(SrcIP_s), split(SrcPublicIPs_s," "), pack_array(SrcIP_s)),
destIPs = iif(isempty(DestIP_s), split(DestPublicIPs_s," "), pack_array(DestIP_s))
| mvexpand SourceIp = sourceIPs to typeof(string)
| mvexpand DestIp = destIPs to typeof(string)
| project SourceIp = tostring(split(SourceIp, "|")[0]), DestIp = tostring(split(DestIp, "|")[0]), NSGList_s, NSGRule_s, DestPort_d, L4Protocol_s, FlowStatus_s 
| summarize DestPorts= makeset(DestPort_d) by SourceIp, DestIp, NSGList_s, NSGRule_s, L4Protocol_s, FlowStatus_s

Yinelenen kayıtları engelleme

Bir bağlantının her iki tarafında akış günlüğü etkinleştirildiyse, bir akış birden çok cihazda yakalanabilir. Sonuç olarak, tüm akış günlükleri aynı Log Analytics çalışma alanında toplanıyorsa yinelenen veriler görüntülenebilir. Yinelenenleri eklemek FlowDirection veya MACAddress önlemek ve kayıtlar arasında ayrım yapmak gerekir.

Akışta/bağlantıda:

  • MacAddress akışın yakalandığı cihazın MAC'ini belirtir.
  • SrcIp bağlantının başlatıldığı cihazın IP adresini belirtir.
  • DestIp bağlantının yapıldığı cihazın IP adresini belirtir.
  • FlowDirection bağlantının cihaza göre yönünü belirtir. Örneğin, VM1'den (IP: 10.0.0.4 ve MAC: A1:B1:C1:D1:E1:F1) VM2'ye (IP: 10.0.0.5 ve MAC: A2:B2:C2:D2:E2:F2) bağlantı yapıldığında, akış VM1'deFlowDirection yakalanırsa, bu akış Outboundiçin ve VM2'deFlowDirection akış yakalanırsa bu akış olur Inbound.
  • BytesSrcToDest / PacketsSrcToDest nerede yakalandıklarından bağımsız olarak kaynaktan hedefe gönderilen baytları veya paketleri belirtir.
  • BytesDestToSrc / PacketsDestToSrc yakalandıkları yerden bağımsız olarak hedeften kaynağa gönderilen baytları veya paketleri belirtir.

Örneğin, aşağıdaki alanlarla VM1'denVM2'ye bir bağlantı yapılırsa.

VM SrcIp DestIp MAC BytesSrcToDest BytesDestToSrc FlowDirection
VM1 10.0.0.4 10.0.0.5 A1-B1-C1-D1-E1-F1 100 200 Outbound
VM2 10.0.0.4 10.0.0.5 A2-B2-C2-D2-E2-F2 100 200 Gelen

Bu cihaz tarafından başlatılan bağlantılarda IP adresi ve MAC adresi 10.0.0.4A1:B1:C1:D1:E1:F1olan bir cihazın toplam giden baytlarını hesaplamak için aşağıdaki sorgulardan herhangi birini kullanabilirsiniz.

NTANetAnalytics
| where SubType == "FlowLog"
| where SrcIp == "10.0.0.4" and MacAddress == "A1:B1:C1:D1:E1:F1" and FlowDirection == "Outbound"
| summarize totalIniBytes = sum(BytesSrcToDest);
NTANetAnalytics
| where SubType == "FlowLog"
| where SrcIp == "10.0.0.4" and FlowDirection == "Outbound"
| summarize totalIniBytes = sum(BytesSrcToDest);
NTANetAnalytics
| where SubType == "FlowLog"
| where SrcIp == "10.0.0.4" and MacAddress == "A1:B1:C1:D1:E1:F1"
| summarize totalIniBytes = sum(BytesSrcToDest);

Benzer şekilde, başka bir cihaz tarafından bu cihaza başlatılan bağlantılar için IP adresi ve MAC adresi 10.0.0.4A1:B1:C1:D1:E1:F1olan bir cihazın toplam giden baytlarını hesaplamak için aşağıdaki sorgulardan herhangi birini kullanabilirsiniz.

NTANetAnalytics
| where DestIp == "10.0.0.4" and MacAddress == "A1:B1:C1:D1:E1:F1" and FlowDirection == "Inbound"
| summarize totalNoniniBytes = sum(BytesDestToSrc)
NTANetAnalytics
| where DestIp == "10.0.0.4" and FlowDirection == "Inbound"
| summarize totalNoniniBytes = sum(BytesDestToSrc)
NTANetAnalytics
| where DestIp == "10.0.0.4" and MacAddress == "A1:B1:C1:D1:E1:F1"
| summarize totalNoniniBytes = sum(BytesDestToSrc)

Aşağıdaki sorguyu kullanarak bir cihaz için toplam giden baytları hesaplayabilirsiniz:

let InitiatedByVM = NTANetAnalytics
| where SubType == "FlowLog"
| where SrcIp == "10.0.0.4" and MacAddress == "A1:B1:C1:D1:E1:F1" and FlowDirection == "Outbound"
| summarize totalIniBytes = sum(BytesSrcToDest);
let NotInitiatedByVM = NTANetAnalytics
| where DestIp == "10.0.0.4" and MacAddress == "A1:B1:C1:D1:E1:F1" and FlowDirection == "Inbound"
| summarize totalNoniniBytes = sum(BytesDestToSrc);
InitiatedByVM
| join kind=fullouter NotInitiatedByVM on FlowEndTime
| extend Time = iff(isnotnull(FlowEndTime), FlowEndTime, FlowEndTime1)
| summarize totalMB = (sum(totalIniBytes) + sum(totalNoniniBytes)) / 1024.0 /1024.0;