# Az - Rete Azure

{{#include ../../../../banners/hacktricks-training.md}}

## Informazioni di base

Azure fornisce **reti virtuali (VNet)** che permettono agli utenti di creare **reti** **isolate** all'interno del cloud Azure. All'interno di queste VNet, risorse come macchine virtuali, applicazioni, database... possono essere ospitate e gestite in modo sicuro. Il networking in Azure supporta sia la comunicazione all'interno del cloud (tra servizi Azure) sia la connessione a reti esterne e a internet.\  
Inoltre, è possibile **connettere** le VNet con altre VNet e con reti on-premise.

## Virtual Network (VNET) & Subnets

Una Azure Virtual Network (VNet) è la rappresentazione della tua rete nel cloud, fornendo **isolamento logico** all'interno dell'ambiente Azure dedicato alla tua sottoscrizione. Le VNet permettono di creare e gestire virtual private networks (VPNs) in Azure, ospitando risorse come macchine virtuali (VMs), database e servizi applicativi. Offrono il **controllo completo sulle impostazioni di rete**, inclusi gli intervalli di indirizzi IP, la creazione di subnet, le tabelle di routing e i gateway di rete.

**Subnet** sono suddivisioni all'interno di una VNet, definite da specifici **intervalli di indirizzi IP**. Segmentando una VNet in più subnet, puoi organizzare e proteggere le risorse secondo la tua architettura di rete.\  
Per impostazione predefinita tutte le subnet all'interno della stessa Azure Virtual Network (VNet) **possono comunicare tra di loro** senza alcuna restrizione.

**Esempio:**

- `MyVNet` con un intervallo di indirizzi IP 10.0.0.0/16.
- **Subnet-1:** 10.0.0.0/24 per server web.
- **Subnet-2:** 10.0.1.0/24 per server database.

### Enumerazione

Per elencare tutte le VNet e le subnet in un account Azure, puoi usare Azure Command-Line Interface (CLI). Ecco i passaggi:

{{#tabs }}
{{#tab name="az cli" }}
```bash
# List VNets
az network vnet list --query "[].{name:name, location:location, addressSpace:addressSpace}"

# List subnets of a VNet
az network vnet subnet list --resource-group <ResourceGroupName> --vnet-name <VNetName> --query "[].{name:name, addressPrefix:addressPrefix}" -o table
```
{{#endtab }}
{{#tab name="PowerShell" }}
```bash
# List VNets
Get-AzVirtualNetwork | Select-Object Name, Location, @{Name="AddressSpace"; Expression={$_.AddressSpace.AddressPrefixes}}

# List subnets of a VNet
Get-AzVirtualNetwork -ResourceGroupName <ResourceGroupName> -Name <VNetName> |
Select-Object -ExpandProperty Subnets |
Select-Object Name, AddressPrefix
```
{{#endtab }}
{{#endtabs }}

## Network Security Groups (NSG)

Un **Network Security Group (NSG)** filtra il traffico di rete sia in entrata che in uscita dalle risorse Azure all'interno di una Azure Virtual Network (VNet). Contiene un insieme di **regole di sicurezza** che possono indicare **quali porte aprire per il traffico in ingresso e in uscita** per porta sorgente, IP sorgente, porta di destinazione ed è possibile assegnare una priorità (più basso è il numero di priorità, maggiore è la priorità).

Gli NSG possono essere associati a **subnet e NIC.**

**Esempi di regole:**

- Una regola in ingresso che permette traffico HTTP (porta 80) da qualsiasi sorgente verso i tuoi web server.
- Una regola in uscita che consente solo traffico SQL (porta 1433) verso un intervallo specifico di indirizzi IP di destinazione.

### Enumerazione

{{#tabs }}
{{#tab name="az cli" }}
```bash
# List NSGs
az network nsg list --query "[].{name:name, location:location}" -o table
az network nsg show --name <nsg-name>

# Get NSG rules
az network nsg rule list --nsg-name <NSGName> --resource-group <ResourceGroupName> --query "[].{name:name, priority:priority, direction:direction, access:access, protocol:protocol, sourceAddressPrefix:sourceAddressPrefix, destinationAddressPrefix:destinationAddressPrefix, sourcePortRange:sourcePortRange, destinationPortRange:destinationPortRange}" -o table

# Get NICs and subnets using this NSG
az network nsg show --name <NSGName> --resource-group <ResourceGroupName> --query "{subnets: subnets, networkInterfaces: networkInterfaces}"
```
{{#endtab }}
{{#tab name="PowerShell" }}
```bash
# List NSGs
Get-AzNetworkSecurityGroup | Select-Object Name, Location
Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName>

# Get NSG rules
Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName> |
Select-Object -ExpandProperty SecurityRules |
Select-Object Name, Priority, Direction, Access, Protocol, SourceAddressPrefix, DestinationAddressPrefix, SourcePortRange, DestinationPortRange

# Get NICs and subnets using this NSG
(Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName>).Subnets
(Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName>).NetworkInterfaces
```
{{#endtab }}
{{#endtabs }}

## Azure Firewall

Azure Firewall è un **firewall gestito e con stato** che filtra il traffico (L3–L7) per flussi est-ovest e nord-sud. Distribuito a livello di **VNet**, centralizza l'ispezione per tutte le subnet e si ridimensiona automaticamente per garantire la disponibilità.

SKU disponibili: **Basic**, **Standard** e **Premium**:

| Criteria/Feature	             | Option 1	                                         | Option 2                                    | Option 3                                                  |
| ------------------------------ | ------------------------------------------------- | ------------------------------------------- | --------------------------------------------------------- |
| **Caso d'uso consigliato**     | Piccole/Medie imprese (SMBs) con esigenze limitate | Uso aziendale generale, filtraggio Layer 3–7 | Ambienti altamente sensibili (es. elaborazione pagamenti) |
| **Prestazioni**                | Fino a 250 Mbps di throughput                     | Fino a 30 Gbps di throughput                | Fino a 100 Gbps di throughput                             |
| **Intelligence sulle minacce** | Solo avvisi                                       | Avvisi e blocco (IP/domini malevoli)       | Avvisi e blocco (intelligence avanzata sulle minacce)    |
| **Filtraggio L3–L7**           | Filtraggio di base                                | Filtraggio stateful attraverso i protocolli | Filtraggio stateful con ispezione avanzata               |
| **Protezione avanzata dalle minacce** | Non disponibile                             | Filtraggio basato su intelligence sulle minacce | Include un sistema di rilevamento e prevenzione delle intrusioni (IDPS) |
| **Ispezione TLS**              | Non disponibile                                   | Non disponibile                             | Supporta la terminazione TLS in ingresso e in uscita     |
| **Disponibilità**              | Backend fisso (2 VM)                              | Ridimensionamento automatico                | Ridimensionamento automatico                              |
| **Facilità di gestione**       | Controlli base                                    | Gestito tramite Firewall Manager            | Gestito tramite Firewall Manager                          |

### Enumerazione

{{#tabs }}
{{#tab name="az cli" }}
```bash
# List Azure Firewalls
az network firewall list --query "[].{name:name, location:location, subnet:subnet, publicIp:publicIp}" -o table

# Get network rules of a firewall
az network firewall network-rule collection list --firewall-name <FirewallName> --resource-group <ResourceGroupName> --query "[].{name:name, rules:rules}" -o table

# Get application rules of a firewall
az network firewall application-rule collection list --firewall-name <FirewallName> --resource-group <ResourceGroupName> --query "[].{name:name, rules:rules}" -o table

# Get nat rules of a firewall
az network firewall nat-rule collection list --firewall-name <FirewallName> --resource-group <ResourceGroupName> --query "[].{name:name, rules:rules}" -o table
```
{{#endtab }}
{{#tab name="PowerShell" }}
```bash
# List Azure Firewalls
Get-AzFirewall

# Get network rules of a firewall
(Get-AzFirewall -Name <FirewallName> -ResourceGroupName <ResourceGroupName>).NetworkRuleCollections

# Get application rules of a firewall
(Get-AzFirewall -Name <FirewallName> -ResourceGroupName <ResourceGroupName>).ApplicationRuleCollections

# Get nat rules of a firewall
(Get-AzFirewall -Name <FirewallName> -ResourceGroupName <ResourceGroupName>).NatRuleCollections
```
{{#endtab }}
{{#endtabs }}

## Tabelle di routing di Azure

Azure **Route Tables (UDR)** consentono di sovrascrivere il routing di default definendo prefissi di destinazione (es., `10.0.0.0/16` o `0.0.0.0/0`) e un next hop (Virtual Network, Internet, Virtual Network Gateway, or Virtual Appliance).

> Le route si applicano a livello di subnet; tutte le VM in quella subnet seguono la tabella.

**Esempio:**

- Per il traffico verso Internet, usa il default `0.0.0.0/0` con **Internet** come next hop.
- Per ispezionare il traffico in uscita, instrada `0.0.0.0/0` verso l'IP di una Network Virtual Appliance (NVA).

### **Enumerazione**

{{#tabs }}
{{#tab name="az cli" }}
```bash
# List Route Tables
az network route-table list --query "[].{name:name, resourceGroup:resourceGroup, location:location}" -o table

# List routes for a table (summary)
az network route-table route list --resource-group <ResourceGroupName> --route-table-name <RouteTableName> --query "[].{name:name, addressPrefix:addressPrefix, nextHopType:nextHopType, nextHopIpAddress:nextHopIpAddress}" -o table

# List routes for a table (full)
az network route-table route list --resource-group <ResourceGroupName> --route-table-name <RouteTableName>
```
{{#endtab }}
{{#tab name="PowerShell" }}
```bash
# List Route Tables
Get-AzRouteTable

# List routes for a table
(Get-AzRouteTable -Name <RouteTableName> -ResourceGroupName <ResourceGroupName>).Routes
```
{{#endtab }}
{{#endtabs }}

## Azure Private Link

Azure Private Link è un servizio di Azure che **consente l'accesso privato ai servizi Azure** garantendo che **il traffico tra la tua virtual network (VNet) di Azure e il servizio transiti interamente nel backbone di Azure di Microsoft**. Porta di fatto il servizio nella tua VNet. Questa configurazione migliora la sicurezza evitando di esporre i dati a Internet pubblico.

Private Link può essere utilizzato con vari servizi Azure, come Azure Storage, Azure SQL Database e servizi personalizzati condivisi tramite Private Link. Fornisce un modo sicuro per fruire dei servizi dalla tua VNet o anche da diverse sottoscrizioni Azure.

> [!CAUTION]
> NSGs do not apply to private endpoints, which clearly means that associating an NSG with a subnet that contains the Private Link will have no effect.

**Esempio:**

Considera uno scenario in cui hai un **Azure SQL Database che vuoi accedere in modo sicuro dalla tua VNet**. Normalmente questo potrebbe implicare il transito su Internet pubblico. Con Private Link puoi creare un **private endpoint nella tua VNet** che si connette direttamente al servizio Azure SQL Database. Questo endpoint fa apparire il database come se fosse parte della tua VNet, accessibile tramite un indirizzo IP privato, garantendo così un accesso sicuro e privato.

### **Enumerazione**

{{#tabs }}
{{#tab name="az cli" }}
```bash
# List Private Link Services
az network private-link-service list --query "[].{name:name, location:location, resourceGroup:resourceGroup}" -o table

# List Private Endpoints
az network private-endpoint list --query "[].{name:name, location:location, resourceGroup:resourceGroup, privateLinkServiceConnections:privateLinkServiceConnections}" -o table
```
{{#endtab }}
{{#tab name="PowerShell" }}
```bash
# List Private Link Services
Get-AzPrivateLinkService | Select-Object Name, Location, ResourceGroupName

# List Private Endpoints
Get-AzPrivateEndpoint | Select-Object Name, Location, ResourceGroupName, PrivateEndpointConnections
```
{{#endtab }}
{{#endtabs }}

### DNS OverDoS tramite service Private DNS zone links

Quando una VNet ha una **Virtual Network Link** verso una **service Private DNS zone** (es., `privatelink.blob.core.windows.net`), Azure **forza la risoluzione dei nomi host** per le risorse registrate con Private Link di quel tipo di servizio attraverso la zona. Se la zona **manca del `A` record richiesto** per una risorsa a cui i carichi di lavoro accedono ancora tramite il suo endpoint pubblico, la risoluzione DNS restituisce **NXDOMAIN** e i client non raggiungono mai l'IP pubblico, causando un **availability DoS** senza toccare direttamente la risorsa.

**Abuse flow (control-plane DoS):**

1. Ottenere RBAC che consenta di creare **Private Endpoints** o modificare i **Private DNS zone links**.
2. Creare un Private Endpoint per lo stesso tipo di servizio in un altro VNet (Azure crea automaticamente la service Private DNS zone e la collega a quel VNet).
3. Collegare quella **service Private DNS zone** al VNet vittima.
4. Poiché il VNet vittima ora **forza la risoluzione tramite la Private DNS zone** e non esiste alcun `A` record per la risorsa target in quella zona, la risoluzione dei nomi fallisce e il carico di lavoro non può raggiungere l'endpoint (ancora pubblico). Questo vale per qualsiasi servizio supportato da Private Link (storage, Key Vault, ACR, Cosmos DB, Function Apps, OpenAI, ecc.).

**Discovery at scale (Azure Resource Graph):**

- VNETs collegati alla blob Private DNS zone (risoluzione forzata per endpoint blob registrati con PL):
```kusto
resources
| where type == "microsoft.network/privatednszones/virtualnetworklinks"
| extend
zone = tostring(split(id, "/virtualNetworkLinks")[0]),
vnetId = tostring(properties.virtualNetwork.id)
| join kind=inner (
resources
| where type == "microsoft.network/privatednszones"
| where name == "privatelink.blob.core.windows.net"
| project zoneId = id
) on $left.zone == $right.zoneId
| project vnetId
```
- Storage accounts raggiungibili tramite endpoint pubblico ma **senza** connessioni Private Endpoint (probabilmente si romperà se il link sopra viene aggiunto):
```kusto
Resources
| where type == "microsoft.storage/storageaccounts"
| extend publicNetworkAccess = properties.publicNetworkAccess
| extend defaultAction = properties.networkAcls.defaultAction
| extend vnetRules = properties.networkAcls.virtualNetworkRules
| extend ipRules = properties.networkAcls.ipRules
| extend privateEndpoints = properties.privateEndpointConnections
| where publicNetworkAccess == "Enabled"
| where defaultAction == "Deny"
| where (isnull(privateEndpoints) or array_length(privateEndpoints) == 0)
| extend allowedVnets = iif(isnull(vnetRules), 0, array_length(vnetRules))
| extend allowedIps = iif(isnull(ipRules), 0, array_length(ipRules))
| where allowedVnets > 0 or allowedIps > 0
| project id, name, vnetRules, ipRules
```
## Azure Service Endpoints

Azure Service Endpoints estendono lo spazio di indirizzi privati della tua virtual network e l'identità della tua VNet ai servizi Azure tramite una connessione diretta. Abilitando i service endpoints, **le risorse nella tua VNet possono connettersi in modo sicuro ai servizi Azure**, come Azure Storage e Azure SQL Database, sulla rete backbone di Azure. Questo è particolarmente utile se combinato con Network Security Groups (NSGs) per un controllo granulare del traffico.

**Esempio:**

- Con **Storage** Account e Service Endpoint **abilitato** in una VNET, è possibile consentire il traffico in ingresso **solo da una VNET nel firewall dell'account di storage**, imponendo una **connessione sicura** senza necessità di accesso tramite public IP per il servizio di storage.

Service Endpoints **non richiedono indirizzi IP privati** per i servizi e si appoggiano invece al backbone di Azure per la connettività sicura. Sono **più facili da configurare** rispetto ai Private Links ma **non offrono lo stesso livello di isolamento e granularità** dei Private Links.

### **Enumerazione**

{{#tabs }}
{{#tab name="az cli" }}
```bash
# List Virtual Networks with Service Endpoints
az network vnet list --query "[].{name:name, location:location, serviceEndpoints:serviceEndpoints}" -o table

# List Subnets with Service Endpoints
az network vnet subnet list --resource-group <ResourceGroupName> --vnet-name <VNetName> --query "[].{name:name, serviceEndpoints:serviceEndpoints}"

# List Service Endpoints for a Subnet
az network vnet subnet show --resource-group <ResourceGroupName> --vnet-name <VNetName> --name <SubnetName> --query "serviceEndpoints"
```
{{#endtab }}
{{#tab name="PowerShell" }}
```bash
# List Virtual Networks with Service Endpoints
Get-AzVirtualNetwork

# List Subnets with Service Endpoints
(Get-AzVirtualNetwork -ResourceGroupName <ResourceGroupName> -Name <VNetName>).Subnets
```
{{#endtab }}
{{#endtabs }}

### Differenze tra Service Endpoints e Private Links

Microsoft consiglia di utilizzare Private Links nella [**docs**](https://learn.microsoft.com/en-us/azure/virtual-network/vnet-integration-for-azure-services#compare-private-endpoints-and-service-endpoints):

<figure><img src="../../../../images/image (25).png" alt=""><figcaption></figcaption></figure>

**Service Endpoints:**

- Il traffico dalla tua VNet verso il servizio Azure viaggia sulla rete backbone di Microsoft Azure, evitando l'internet pubblico.
- L'endpoint è una connessione diretta al servizio Azure e non fornisce un private IP per il servizio all'interno della VNet.
- Il servizio è comunque accessibile tramite il suo public endpoint dall'esterno della tua VNet, a meno che tu non configuri il service firewall per bloccare tale traffico.
- È una relazione one-to-one tra la subnet e il servizio Azure.
- Meno costoso rispetto a Private Links.

**Private Links:**

- Private Link mappa i servizi Azure nella tua VNet tramite un private endpoint, che è un'interfaccia di rete con un private IP all'interno della tua VNet.
- Il servizio Azure viene raggiunto usando questo private IP, facendo apparire il servizio come parte della tua rete.
- I servizi connessi tramite Private Link possono essere raggiunti solo dalla tua VNet o dalle reti connesse; non c'è accesso dall'internet pubblico al servizio.
- Permette una connessione sicura ai servizi Azure o ai tuoi servizi ospitati in Azure, così come una connessione ai servizi condivisi da altri.
- Fornisce un controllo accessi più granulare tramite un private endpoint nella tua VNet, a differenza di un controllo più ampio a livello di subnet con service endpoints.

In sintesi, mentre sia Service Endpoints che Private Links offrono connettività sicura ai servizi Azure, **Private Links offrono un livello maggiore di isolamento e sicurezza assicurando che i servizi siano accessibili privatamente senza esporli all'internet pubblico**. Service Endpoints, d'altro canto, sono più facili da configurare per casi generali in cui è richiesto un accesso semplice e sicuro ai servizi Azure senza la necessità di un private IP nella VNet.

## Azure Front Door (AFD) & AFD WAF

**Azure Front Door** è un punto di ingresso scalabile e sicuro per la **consegna veloce** delle tue applicazioni web globali. Combina vari servizi come **accelerazione delle applicazioni, SSL offloading e security a livello applicativo** (tramite Web Application Firewall - WAF). È costruito sul concetto di edge POP (Point of Presence) distribuiti nel mondo per avvicinare le tue applicazioni ai tuoi utenti.

> Azure Front Door fornisce una rete globalmente distribuita di edge locations per **instradare e accelerare** il traffico in ingresso verso le tue applicazioni web (in Azure o altrove), migliorare le prestazioni e aumentare la sicurezza.

**Esempio:**

- Per una piattaforma e-commerce globale con utenti in tutto il mondo, **Azure Front Door può memorizzare nella cache i contenuti statici nelle edge locations** e offrire **SSL offloading**, riducendo la latenza e fornendo un'esperienza utente più reattiva. Inoltre, fornisce **WAF** per proteggere le tue applicazioni dalle comuni vulnerabilità web (come SQL injection o XSS).

Azure Front Door offre anche un **bilanciamento intelligente del carico** instradando il traffico verso il backend disponibile più vicino basandosi su health probes e latenza, garantendo prestazioni e disponibilità costanti. Integrando **WAF**, aiuta a proteggere contro le comuni minacce web.

### **Enumeration**

{{#tabs }}
{{#tab name="az cli" }}
```bash
# List Azure Front Door profiles
az afd profile list --query "[].{name:name, location:location, resourceGroup:resourceGroup}" -o table

# List AFD endpoints
az afd endpoint list --profile-name <ProfileName> --resource-group <ResourceGroupName> --query "[].{name:name, hostName:hostName, state:resourceState}" -o table

# Classic Azure Front Door (v1) profiles
az network front-door list --query "[].{name:name, resourceGroup:resourceGroup, location:location}" -o table

# Classic Azure Front Door WAF policies
az network front-door waf-policy list --query "[].{name:name, resourceGroup:resourceGroup, location:location}" -o table
```
{{#endtab }}
{{#tab name="PowerShell" }}
```bash
# List Azure Front Door profiles
Get-AzFrontDoorCdnProfile | Select-Object Name, Location, ResourceGroupName

# List AFD endpoints
Get-AzFrontDoorCdnEndpoint -ProfileName <ProfileName> -ResourceGroupName <ResourceGroupName> | Select-Object Name, HostName, ResourceState

# Classic Azure Front Door (v1) profiles
Get-AzFrontDoor

# Classic Azure Front Door WAF policies
Get-AzFrontDoorWafPolicy -Name <policyName> -ResourceGroupName <resourceGroupName>
```
{{#endtab }}
{{#endtabs }}

## Azure Application Gateway e Azure Application Gateway WAF

Azure Application Gateway è un **bilanciatore di carico per traffico web** che ti consente di gestire il traffico verso le tue applicazioni **web**. Offre **bilanciamento del carico a Layer 7, terminazione SSL e funzionalità di web application firewall (WAF)** nell'Application Delivery Controller (ADC) come servizio. Le funzionalità principali includono instradamento basato su URL, affinità di sessione basata su cookie e offloading del Secure Sockets Layer (SSL), fondamentali per applicazioni che richiedono capacità di bilanciamento del carico complesse come il routing globale e il routing basato sul percorso.

**Esempio:**

Considera uno scenario in cui hai un sito e-commerce che include più sottodomini per funzioni diverse, come account utente e elaborazione pagamenti. Azure Application Gateway può **instradare il traffico verso i web server appropriati in base al percorso URL**. Ad esempio, il traffico verso `example.com/accounts` potrebbe essere indirizzato al servizio account utente, e il traffico verso `example.com/pay` potrebbe essere indirizzato al servizio di elaborazione pagamenti.\
E **proteggere il tuo sito dagli attacchi usando le funzionalità WAF.**

### **Enumerazione**

{{#tabs }}
{{#tab name="az cli" }}
```bash
# List the Web Application Firewall configurations for your Application Gateways
az network application-gateway waf-config list --gateway-name <AppGatewayName> --resource-group <ResourceGroupName> --query "[].{name:name, firewallMode:firewallMode, ruleSetType:ruleSetType, ruleSetVersion:ruleSetVersion}" -o table
```
{{#endtab }}
{{#tab name="PowerShell" }}
```bash
# List the Web Application Firewall configurations for your Application Gateways
(Get-AzApplicationGateway -Name <AppGatewayName> -ResourceGroupName <ResourceGroupName>).WebApplicationFirewallConfiguration
```
{{#endtab }}
{{#endtabs }}

## VNet Peering & topologie Hub and Spoke

### VNet Peering

**VNet Peering** è una funzionalità di Azure che **consente a diverse Virtual Networks (VNets) di essere connesse in modo diretto e trasparente**. Attraverso VNet Peering, le risorse in un VNet possono comunicare con risorse in un altro VNet usando indirizzi IP privati, **come se fossero nella stessa rete**.\
**VNet Peering può essere usato anche con reti on-prem** configurando una site-to-site VPN o Azure ExpressRoute.

**Azure Hub and Spoke** è un'architettura di rete che sfrutta VNet peering per creare un **Hub VNet** centrale che si connette a più **Spoke VNets**. L'hub tipicamente contiene servizi condivisi (come firewalls, DNS o Active Directory) mentre gli spoke ospitano i carichi applicativi. Questo design semplifica la gestione, migliora la sicurezza tramite controlli centralizzati e riduce la ridondanza.

**Esempio:**

Una grande azienda con più dipartimenti (Finance, HR, IT) può creare un **Hub VNet con servizi condivisi** come firewalls e server DNS. Ogni dipartimento può avere il proprio Spoke VNet che si collega all'Hub via peering. Questo permette ai dipartimenti di comunicare in modo sicuro e utilizzare servizi condivisi senza esporre le loro risorse a Internet pubblico.

### **Enumeration**

{{#tabs }}
{{#tab name="az cli" }}
```bash
# List all VNets in your subscription
az network vnet list --query "[].{name:name, location:location, addressSpace:addressSpace}" -o table

# List VNet Peerings
az network vnet peering list --resource-group <ResourceGroupName> --vnet-name <VNetName> --query "[].{name:name, remoteVnetId:remoteVirtualNetwork.id, allowForwardedTraffic:allowForwardedTraffic, allowGatewayTransit:allowGatewayTransit}"

# List Shared Resources (e.g., Azure Firewall) in the Hub
az network firewall list --query "[].{name:name, location:location, resourceGroup:resourceGroup}" -o table
```
{{#endtab }}
{{#tab name="PowerShell" }}
```bash
# List all VNets in your subscription
Get-AzVirtualNetwork

# List VNet Peerings
Get-AzVirtualNetworkPeering -ResourceGroupName <ResourceGroupName> -VirtualNetworkName <VNetName>

# List Shared Resources (e.g., Azure Firewall) in the Hub
Get-AzFirewall
```
{{#endtab }}
{{#endtabs }}

## Site-to-Site VPN

Una **Site-to-Site VPN** in Azure stabilisce una connessione sicura e **persistente dalla tua rete on-premises alla tua Azure Virtual Network (VNet)**, permettendo a risorse come le VMs all'interno di Azure di apparire come se fossero sulla tua rete locale. Questa connessione viene stabilita tramite un **VPN gateway che cifra il traffico** tra le due reti.

**Esempio:**

Un'azienda con sede principale a New York ha un data center on-premises che deve connettersi in modo sicuro alla sua VNet in Azure, che ospita i suoi carichi di lavoro virtualizzati. Configurando una **Site-to-Site VPN, l'azienda può garantire connettività cifrata tra i server on-premises e le VM in Azure**, permettendo l'accesso sicuro alle risorse in entrambi gli ambienti come se fossero nella stessa rete locale.

### **Enumerazione**

{{#tabs }}
{{#tab name="az cli" }}
```bash
# List VPN Gateways
az network vnet-gateway list --query "[].{name:name, location:location, resourceGroup:resourceGroup}" -o table

# List VPN Connections
az network vpn-connection list --gateway-name <VpnGatewayName> --resource-group <ResourceGroupName> --query "[].{name:name, connectionType:connectionType, connectionStatus:connectionStatus}" -o table
```
{{#endtab }}
{{#tab name="PowerShell" }}
```bash
# List VPN Gateways
Get-AzVirtualNetworkGateway -ResourceGroupName <ResourceGroupName>

# List VPN Connections
Get-AzVirtualNetworkGatewayConnection -ResourceGroupName <ResourceGroupName>
```
{{#endtab }}
{{#endtabs }}

## Azure ExpressRoute

Azure ExpressRoute è un servizio che fornisce una **connessione privata, dedicata e ad alta velocità tra la tua infrastruttura on-premises e i data center Azure**. Questa connessione è effettuata tramite un provider di connettività, evitando la rete pubblica e offrendo maggiore affidabilità, velocità superiori, latenze ridotte e una sicurezza più elevata rispetto alle connessioni Internet tradizionali.

**Esempio:**

Una multinazionale necessita di una **connessione costante e affidabile ai suoi servizi Azure a causa dell'elevato volume di dati** e della necessità di elevata larghezza di banda. L'azienda opta per Azure ExpressRoute per collegare direttamente il proprio data center on-premises ad Azure, facilitando trasferimenti di dati su larga scala, come backup giornalieri e analisi dei dati in tempo reale, con maggiore privacy e velocità.

### **Enumerazione**

{{#tabs }}
{{#tab name="az cli" }}
```bash
# List ExpressRoute Circuits
az network express-route list --query "[].{name:name, location:location, resourceGroup:resourceGroup, serviceProviderName:serviceProviderName, peeringLocation:peeringLocation}" -o table
```
{{#endtab }}
{{#tab name="PowerShell" }}
```bash
# List ExpressRoute Circuits
Get-AzExpressRouteCircuit
```
{{#endtab }}
{{#endtabs }}

## Riferimenti

- [DNS OverDoS: I Private Endpoints sono troppo privati?](https://unit42.paloaltonetworks.com/dos-attacks-and-azure-private-endpoint/)
- [Configurazione DNS di Azure Private Endpoint](https://learn.microsoft.com/en-us/azure/private-link/private-endpoint-dns)
- [Fallback del Private DNS verso Internet](https://learn.microsoft.com/en-us/azure/dns/private-dns-fallback)

{{#include ../../../../banners/hacktricks-training.md}}
