Esempio 2: Creare una rete perimetrale per proteggere le applicazioni con un firewall e gruppi di sicurezza di reteExample 2 – Build a DMZ to protect applications with a Firewall and NSGs

Tornare alla pagina relativa alle procedure consigliate sui limiti di sicurezzaReturn to the Security Boundary Best Practices Page

Questo esempio illustra come creare una rete perimetrale con un firewall, quattro server Windows e gruppi di sicurezza di rete.This example will create a DMZ with a firewall, four windows servers, and Network Security Groups. Illustra in dettaglio anche ogni comando rilevante per favorire una comprensione più approfondita di ogni passaggio.It will also walk through each of the relevant commands to provide a deeper understanding of each step. È disponibile anche una sezione sugli scenari di traffico con istruzioni dettagliate sul percorso seguito dal traffico attraverso i livelli di difesa della rete perimetrale.There is also a Traffic Scenario section to provide an in-depth step-by-step how traffic proceeds through the layers of defense in the DMZ. La sezione Riferimenti, infine, include tutto il codice e istruzioni complete per creare l'ambiente per testare e sperimentare vari scenari.Finally, in the references section is the complete code and instruction to build this environment to test and experiment with various scenarios.

Rete perimetrale in ingresso con appliance virtuale di rete e gruppo di sicurezza di reteInbound DMZ with NVA and NSG

Descrizione dell'ambienteEnvironment Description

In questo esempio è presente una sottoscrizione che include gli elementi seguenti:In this example there is a subscription that contains the following:

  • Due servizi cloud, "FrontEnd001" e "BackEnd001"Two cloud services: “FrontEnd001” and “BackEnd001”
  • Una rete virtuale, "CorpNetwork", con due subnet: "FrontEnd" e "BackEnd"A Virtual Network “CorpNetwork”, with two subnets: “FrontEnd” and “BackEnd”
  • Un singolo gruppo di sicurezza di rete applicato a entrambe le subnet.A single Network Security Group that is applied to both subnets
  • Un dispositivo virtuale di rete, in questo esempio Barracuda NextGen Firewall, connesso alla subnet FrontEndA network virtual appliance, in this example a Barracuda NextGen Firewall, connected to the Frontend subnet
  • Un server Windows che rappresenta un server Web applicazioni ("IIS01").A Windows Server that represents an application web server (“IIS01”)
  • Due server Windows che rappresentano server back-end applicazioni ("AppVM01", "AppVM02")Two windows servers that represent application back end servers (“AppVM01”, “AppVM02”)
  • Un server Windows che rappresenta un server DNS ("DNS01").A Windows server that represents a DNS server (“DNS01”)

Nota

Anche se in questo esempio si usa Barracuda NextGen Firewall, possono essere usati molti altri dispositivi virtuali di rete.Although this example uses a Barracuda NextGen Firewall, many of the different Network Virtual Appliances could be used for this example.

Nella sezione Riferimenti alla fine dell'articolo è disponibile uno script di PowerShell per creare la maggior parte dell'ambiente descritto sopra.In the references section below there is a PowerShell script that will build most of the environment described above. La creazione di macchine virtuali e reti virtuali, anche se eseguita dallo script di esempio, non è descritta in dettaglio in questo documento.Building the VMs and Virtual Networks, although are done by the example script, are not described in detail in this document.

Per creare l'ambiente, eseguire queste operazioni:To build the environment:

  1. Salvare il file XML di configurazione di rete incluso nella sezione Riferimenti, aggiornandolo con i nomi, il percorso e gli indirizzi IP corrispondenti allo scenario specifico.Save the network config xml file included in the references section (updated with names, location, and IP addresses to match the given scenario)
  2. Aggiornare le variabili utente incluse nello script in modo che corrispondano all'ambiente in cui lo script verrà eseguito, ad esempio sottoscrizioni, nomi dei servizi e così via.Update the user variables in the script to match the environment the script is to be run against (subscriptions, service names, etc)
  3. Eseguire lo script in PowerShell.Execute the script in PowerShell

Nota: l'area indicata nello script di PowerShell deve corrispondere all'area indicata nel file XML di configurazione di rete.Note: The region signified in the PowerShell script must match the region signified in the network configuration xml file.

Dopo l'esecuzione corretta dello script, si potranno eseguire i passaggi successivi allo script seguenti:Once the script runs successfully the following post-script steps may be taken:

  1. Configurare le regole del firewall illustrate nella sezione seguente intitolata Regole del firewall.Set up the firewall rules, this is covered in the section below titled: Firewall Rules.
  2. Facoltativamente, nella sezione Riferimenti sono disponibili due script per configurare il server Web e il server applicazioni per consentire l'esecuzione dei test con questa configurazione della rete perimetrale.Optionally in the references section are two scripts to set up the web server and app server with a simple web application to allow testing with this DMZ configuration.

La sezione successiva descrive la maggior parte delle istruzioni dello script relativamente ai gruppi di sicurezza di rete.The next section explains most of the scripts statements relative to Network Security Groups.

Gruppi di sicurezza di reteNetwork Security Groups (NSG)

Per questo esempio viene creato un gruppo di sicurezza di rete, in cui vengono poi caricate sei regole.For this example, a NSG group is built and then loaded with six rules.

Suggerimento

In genere, è consigliabile creare prima di tutto le regole specifiche di tipo "Consenti" e infine le regole di tipo "Nega" più generiche.Generally speaking, you should create your specific “Allow” rules first and then the more generic “Deny” rules last. La priorità assegnata determina quali regole vengono valutate per prime.The assigned priority dictates which rules are evaluated first. Quando si rileva che al traffico è applicabile una determinata regola, non vengono valutate altre regole.Once traffic is found to apply to a specific rule, no further rules are evaluated. Le regole del gruppo di sicurezza di rete possono essere applicate nella direzione in ingresso o in uscita, dal punto di vista della subnet.NSG rules can apply in either in the inbound or outbound direction (from the perspective of the subnet).

A livello dichiarativo, per il traffico in ingresso vengono create le righe seguenti:Declaratively, the following rules are being built for inbound traffic:

  1. Il traffico DNS interno (porta 53) è consentito.Internal DNS traffic (port 53) is allowed
  2. Il traffico RDP (porta 3389) da Internet a qualsiasi VM è consentito.RDP traffic (port 3389) from the Internet to any VM is allowed
  3. Il traffico HTTP (porta 80) da Internet al dispositivo virtuale di rete (firewall) è consentito.HTTP traffic (port 80) from the Internet to the NVA (firewall) is allowed
  4. Tutto il traffico (tutte le porte) da IIS01 ad AppVM1 è consentito.Any traffic (all ports) from IIS01 to AppVM1 is allowed
  5. Tutto il traffico (tutte le porte) da Internet all'intera rete virtuale (entrambe le subnet) viene bloccato.Any traffic (all ports) from the Internet to the entire VNet (both subnets) is Denied
  6. Tutto il traffico (tutte le porte) dalla subnet front-end alla subnet back-end viene bloccato.Any traffic (all ports) from the Frontend subnet to the Backend subnet is Denied

Con queste regole associate a ogni subnet, se una richiesta HTTP proviene da Internet verso il server Web, le regole 3 (consenti) e 5 (nega) saranno applicabili, ma poiché la regola 3 ha una priorità maggiore, verrà applicata solo tale regola e la regola 5 non verrà presa in considerazione.With these rules bound to each subnet, if a HTTP request was inbound from the Internet to the web server, both rules 3 (allow) and 5 (deny) would apply, but since rule 3 has a higher priority only it would apply and rule 5 would not come into play. La richiesta HTTP verrà quindi consentita sul firewall.Thus the HTTP request would be allowed to the firewall. Se lo stesso traffico prova a raggiungere il server DNS01, la regola 5 (nega) sarà la prima applicabile e il traffico non sarà autorizzato a passare al server.If that same traffic was trying to reach the DNS01 server, rule 5 (Deny) would be the first to apply and the traffic would not be allowed to pass to the server. La regola 6 (nega) impedisce alla subnet front-end di comunicare con la subnet back-end (ad eccezione del traffico consentito nelle regole 1 e 4), proteggendo la rete back-end nel caso in cui un utente malintenzionato comprometta l'applicazione Web sul front-end. L'utente malintenzionato avrà infatti accesso limitato alla rete "protetta" back-end, ovvero solo alle risorse esposte nel server AppVM01.Rule 6 (Deny) blocks the Frontend subnet from talking to the Backend subnet (except for allowed traffic in rules 1 and 4), this protects the Backend network in case an attacker compromises the web application on the Frontend, the attacker would have limited access to the Backend “protected” network (only to resources exposed on the AppVM01 server).

Esiste una regola in uscita predefinita che consente il traffico in uscita verso Internet.There is a default outbound rule that allows traffic out to the internet. Per questo esempio si consente il traffico in uscita e non si modificano le regole in uscita.For this example, we’re allowing outbound traffic and not modifying any outbound rules. Per bloccare il traffico in entrambe le direzioni, è richiesto il routing definito dall'utente. Questo aspetto viene esaminato in un esempio diverso, disponibile nel documento sui principali limiti della sicurezza.To lock down traffic in both directions, User Defined Routing is required, this is explored in a different example that can found in the main security boundary document.

Le regole per i gruppi di sicurezza di rete illustrate sopra sono molto simili a quelle descritte nell'Esempio 1: Creare una semplice rete perimetrale con gruppi di sicurezza di rete.The above discussed NSG rules are very similar to the NSG rules in Example 1 - Build a Simple DMZ with NSGs. Vedere anche la descrizione relativa ai gruppi di sicurezza di rete in quel documento per un'analisi dettagliata della regola sui gruppi di sicurezza di rete e i relativi attributi.Please review the NSG Description in that document for a detailed look at each NSG rule and it's attributes.

Regole del firewallFirewall Rules

È necessario installare un client di gestione in un PC per controllare il firewall e creare le configurazioni necessarie.A management client will need to be installed on a PC to manage the firewall and create the configurations needed. Per informazioni sulla gestione del dispositivo, vedere la documentazione del fornitore del firewall o di un altro dispositivo virtuale di rete.See the documentation from your firewall (or other NVA) vendor on how to manage the device. Il resto di questa sezione descrive la configurazione del firewall stesso tramite il client di gestione dei fornitori, non del portale di Azure o di PowerShell.The remainder of this section will describe the configuration of the firewall itself, through the vendors management client (i.e. not the Azure portal or PowerShell).

Le istruzioni per scaricare il client e connettersi all'applicazione Barracuda usata in questo esempio sono disponibili qui: Barracuda NG AdminInstructions for client download and connecting to the Barracuda used in this example can be found here: Barracuda NG Admin

Sul firewall sarà necessario creare regole di inoltro.On the firewall, forwarding rules will need to be created. Poiché questo esempio indirizza solo il traffico Internet in ingresso verso il firewall e quindi verso il server Web, sarà necessaria solo una regola del processo NAT di inoltro.Since this example only routes internet traffic in-bound to the firewall and then to the web server, only one forwarding NAT rule is needed. Nel dispositivo Barracuda NextGen Firewall usato in questo esempio, per passare il traffico viene usata una regola Destination NAT ("Dst NAT").On the Barracuda NextGen Firewall used in this example the rule would be a Destination NAT rule (“Dst NAT”) to pass this traffic.

Per creare la regola seguente, o verificare le regole predefinite esistenti, dal dashboard del client Barracuda NG Admin passare alla scheda di configurazione, quindi nella sezione Operational Configuration fare clic su Ruleset.To create the following rule (or verify existing default rules), starting from the Barracuda NG Admin client dashboard, navigate to the configuration tab, in the Operational Configuration section click Ruleset. Una griglia denominata "Main Rules" mostrerà le regole esistenti attive e disattivate nel firewall.A grid called, “Main Rules” will show the existing active and deactivated rules on the firewall. Nell'angolo in alto a destra della griglia è presente un piccolo pulsante verde "+" sul quale occorre fare clic per creare una nuova regola. Notare che il firewall potrebbe essere "bloccato" per modifiche. Se è visualizzato un pulsante contrassegnato con "Lock" e non si riescono a creare o modificare regole, fare clic sul pulsante per "sbloccare" il set di regole e consentire la modifica.In the upper right corner of this grid is a small, green “+” button, click this to create a new rule (Note: your firewall may be “locked” for changes, if you see a button marked “Lock” and you are unable to create or edit rules, click this button to “unlock” the ruleset and allow editing). Se si vuole modificare una regola esistente, selezionarla, fare clic con il pulsante destro del mouse e scegliere Edit Rule.If you wish to edit an existing rule, select that rule, right-click and select Edit Rule.

Creare una nuova regola e specificare un nome, ad esempio "WebTraffic".Create a new rule and provide a name, such as "WebTraffic".

L'icona della regola della NAT di destinazione è simile alla seguente: Icona NAT di destinazioneThe Destination NAT rule icon looks like this: Destination NAT Icon

La regola stessa dovrebbe essere simile alla schermata seguente:The rule itself would look something like this:

Regola del firewallFirewall Rule

In questo caso, qualsiasi indirizzo di origine in ingresso che accede al firewall nel tentativo di raggiungere HTTP (porta 80 o 443 per HTTPS) verrà trasmesso all'interfaccia "DHCP1 Local IP" del firewall e reindirizzato al server Web con l'indirizzo IP 10.0.1.5.Here any inbound address that hits the Firewall trying to reach HTTP (port 80 or 443 for HTTPS) will be sent out the Firewall’s “DHCP1 Local IP” interface and redirected to the Web Server with the IP Address of 10.0.1.5. Poiché il traffico arriva sulla porta 80 e viene inoltrato al server Web sulla porta 80, non sono necessarie modifiche della porta.Since the traffic is coming in on port 80 and going to the web server on port 80 no port change was needed. Il campo Target List poteva tuttavia essere 10.0.1.5:8080 se il server Web fosse stato in ascolto sulla porta 8080, convertendo così la porta in ingresso 80 sul firewall nella porta in ingresso 8080 sul server Web.However, the Target List could have been 10.0.1.5:8080 if our Web Server listened on port 8080 thus translating the inbound port 80 on the firewall to inbound port 8080 on the web server.

È necessario definire un valore in Connection Method. Come regola di destinazione da Internet la più appropriata è "Dynamic SNAT".A Connection Method should also be signified, for the Destination Rule from the Internet, "Dynamic SNAT" is most appropriate.

Anche se è stata creata una sola regola, è importante impostarne la priorità correttamente.Although only one rule has been created it's important that its priority is set correctly. Se nella griglia di tutte le regole sul firewall questa nuova regola si trova in basso, sotto la regola "BLOCKALL", non verrà mai applicata.If in the grid of all rules on the firewall this new rule is on the bottom (below the "BLOCKALL" rule) it will never come into play. Assicurarsi che la regola appena creata per il traffico Web si trovi sopra la regola BLOCKALL.Ensure the newly created rule for web traffic is above the BLOCKALL rule.

Una volta che la regola è stata creata, è necessario effettuarne il push al firewall e quindi attivarla. In caso contrario, la modifica della regola non sarà applicata.Once the rule is created, it must be pushed to the firewall and then activated, if this is not done the rule change will not take effect. Il processo di push e attivazione è descritto nella sezione successiva.The push and activation process is described in the next section.

Attivazione delle regoleRule Activation

Dopo aver modificato il set di regole per aggiungervi questa regola, è necessario caricarlo nel firewall e attivarlo.With the ruleset modified to add this rule, the ruleset must be uploaded to the firewall and activated.

Attivazione delle regole firewallFirewall Rule Activation

Nell'angolo in alto a destra del client di gestione è disponibile un gruppo di pulsanti.In the upper right hand corner of the management client are a cluster of buttons. Fare clic sul pulsante "Send Changes" per inviare le regole modificate al firewall, quindi fare clic sul pulsante "Activate".Click the “Send Changes” button to send the modified rules to the firewall, then click the “Activate” button.

Con l'attivazione del set di regole del firewall, la compilazione dell'ambiente di esempio è completata.With the activation of the firewall ruleset this example environment build is complete. Facoltativamente, è possibile eseguire gli script successivi alla compilazione disponibili nella sezione Riferimenti per aggiungere un'applicazione a questo ambiente e testare gli scenari di traffico seguenti.Optionally, the post build scripts in the References section can be run to add an application to this environment to test the below traffic scenarios.

Importante

È importante comprendere che non si raggiungerà il server Web direttamente.It is critical to realize that you will not hit the web server directly. Quando un browser richiede una pagina HTTP da FrontEnd001.CloudApp.Net, l'endpoint HTTP (porta 80) passa questo traffico al firewall, non al server Web.When a browser requests an HTTP page from FrontEnd001.CloudApp.Net, the HTTP endpoint (port 80) passes this traffic to the firewall not the web server. Il firewall inoltra quindi la richiesta tramite NAT al server Web, in base alla regola creata sopra.The firewall then, according to the rule created above, NATs that request to the Web Server.

Scenari di trafficoTraffic Scenarios

(Consentito) Da Web a server Web tramite il firewall(Allowed) Web to Web Server through Firewall

  1. L'utente Internet richiede una pagina HTTP a FrontEnd001.CloudApp.Net (servizio cloud per Internet).Internet user requests HTTP page from FrontEnd001.CloudApp.Net (Internet Facing Cloud Service)
  2. Il servizio cloud passa il traffico attraverso l'endpoint aperto sulla porta 80 all'interfaccia locale del firewall su 10.0.1.4:80.Cloud service passes traffic through open endpoint on port 80 to firewall local interface on 10.0.1.4:80
  3. La subnet front-end inizia l'elaborazione delle regole in ingresso:Frontend subnet begins inbound rule processing:
    1. Regola gruppo di sicurezza di rete 1 (DNS) non applicabile, passa alla regola successiva.NSG Rule 1 (DNS) doesn’t apply, move to next rule
    2. Regola gruppo di sicurezza di rete 2 (RDP) non applicabile, passa alla regola successiva.NSG Rule 2 (RDP) doesn’t apply, move to next rule
    3. Regola gruppo di sicurezza di rete 3 (da Internet a firewall) applicabile, il traffico è consentito, l'elaborazione della regola si arresta.NSG Rule 3 (Internet to Firewall) does apply, traffic is allowed, stop rule processing
  4. Il traffico raggiunge l'indirizzo IP interno del firewall (10.0.1.4).Traffic hits internal IP address of the firewall (10.0.1.4)
  5. La regola di inoltro al firewall riconosce il traffico per la porta 80 e lo reindirizza al server Web IIS01.Firewall forwarding rule see this is port 80 traffic, redirects it to the web server IIS01
  6. IIS01 è in ascolto del traffico Web, riceve la richiesta e ne avvia l'elaborazione.IIS01 is listening for web traffic, receives this request and starts processing the request
  7. IIS01 chiede informazioni a SQL Server in AppVM01.IIS01 asks the SQL Server on AppVM01 for information
  8. Non sono impostate regole in uscita sulla subnet front-end, il traffico è consentito.No outbound rules on Frontend subnet, traffic is allowed
  9. La subnet back-end inizia l'elaborazione delle regole in ingresso:The Backend subnet begins inbound rule processing:
    1. Regola gruppo di sicurezza di rete 1 (DNS) non applicabile, passa alla regola successiva.NSG Rule 1 (DNS) doesn’t apply, move to next rule
    2. Regola gruppo di sicurezza di rete 2 (RDP) non applicabile, passa alla regola successiva.NSG Rule 2 (RDP) doesn’t apply, move to next rule
    3. Regola gruppo di sicurezza di rete 3 (da Internet a firewall), non applicabile, passa alla regola successiva.NSG Rule 3 (Internet to Firewall) doesn’t apply, move to next rule
    4. Regola gruppo di sicurezza di rete 4 (da IIS01 ad AppVM01) applicabile, il traffico è consentito, l'elaborazione delle regole si arresta.NSG Rule 4 (IIS01 to AppVM01) does apply, traffic is allowed, stop rule processing
  10. AppVM01 riceve la query SQL e risponde.AppVM01 receives the SQL Query and responds
  11. Non essendoci regole in uscita sulla subnet back-end, la risposta è consentita.Since there are no outbound rules on the Backend subnet the response is allowed
  12. La subnet front-end inizia l'elaborazione delle regole in ingresso:Frontend subnet begins inbound rule processing:
    1. Non sono presenti regole del gruppo di sicurezza di rete applicabili al traffico in ingresso dalla subnet back-end alla subnet front-end, quindi nessuna regola del gruppo di sicurezza di rete è applicabile.There is no NSG rule that applies to Inbound traffic from the Backend subnet to the Frontend subnet, so none of the NSG rules apply
    2. La regola di sistema predefinita che consente il traffico tra le subnet consentirebbe questo tipo di traffico, perciò è consentito.The default system rule allowing traffic between subnets would allow this traffic so the traffic is allowed.
  13. Il server IIS riceve la risposta SQL, completa la risposta HTTP e la invia al richiedente.The IIS server receives the SQL response and completes the HTTP response and sends to the requestor
  14. Essendo una sessione NAT dal firewall, la destinazione della risposta (inizialmente) è il firewall.Since this is a NAT session from the firewall, the response destination (initially) is for the Firewall
  15. Il firewall riceve la risposta dal server Web e la restituisce all'utente Internet.The firewall receives the response from the Web Server and forwards back to the Internet User
  16. Non essendoci regole in uscita sulla subnet front-end, la risposta è consentita e l'utente Internet riceve la pagina Web richiesta.Since there are no outbound rules on the Frontend subnet the response is allowed, and the Internet User receives the web page requested.

(Consentito) Da RDP a back-end(Allowed) RDP to Backend

  1. L'amministratore del server su Internet richiede una sessione RDP ad AppVM01 su BackEnd001.CloudApp.Net:xxxxx, dove xxxxx è il numero di porta assegnato casualmente per RDP a AppVM01. Si può trovare la porta assegnata sul portale di Azure o tramite PowerShell.Server Admin on internet requests RDP session to AppVM01 on BackEnd001.CloudApp.Net:xxxxx where xxxxx is the randomly assigned port number for RDP to AppVM01 (the assigned port can be found on the Azure Portal or via PowerShell)
  2. Poiché il firewall è in ascolto solo dell'indirizzo FrontEnd001.CloudApp.Net, non è interessato da questo flusso di traffico.Since the Firewall is only listening on the FrontEnd001.CloudApp.Net address, it is not involved with this traffic flow
  3. La subnet back-end inizia l'elaborazione delle regole in ingresso:Backend subnet begins inbound rule processing:
    1. Regola gruppo di sicurezza di rete 1 (DNS) non applicabile, passa alla regola successiva.NSG Rule 1 (DNS) doesn’t apply, move to next rule
    2. Regola gruppo di sicurezza di rete 2 (RDP) applicabile, il traffico è consentito, l'elaborazione delle regole si arresta.NSG Rule 2 (RDP) does apply, traffic is allowed, stop rule processing
  4. Senza regole in uscita, sono applicabili le regole predefinite e il traffico restituito è consentito.With no outbound rules, default rules apply and return traffic is allowed
  5. La sessione RDP è abilitata.RDP session is enabled
  6. AppVM01 richiede il nome utente e la password.AppVM01 prompts for user name password

(Consentito) Ricerca DNS del server Web sul server DNS(Allowed) Web Server DNS lookup on DNS server

  1. Il server Web, IIS01, richiede un feed di dati all'indirizzo www.data.gov, ma deve risolvere l'indirizzo.Web Server, IIS01, needs a data feed at www.data.gov, but needs to resolve the address.
  2. La configurazione di rete per la rete virtuale elenca DNS01 (10.0.2.4 nella subnet back-end) come server DNS primario, IIS01 invia la richiesta DNS a DNS01.The network configuration for the VNet lists DNS01 (10.0.2.4 on the Backend subnet) as the primary DNS server, IIS01 sends the DNS request to DNS01
  3. Non sono impostate regole in uscita sulla subnet front-end, il traffico è consentito.No outbound rules on Frontend subnet, traffic is allowed
  4. La subnet back-end inizia l'elaborazione delle regole in ingresso:Backend subnet begins inbound rule processing:
    1. Regola gruppo di sicurezza di rete 1 (DNS) applicabile, il traffico è consentito, l'elaborazione delle regole si arresta.NSG Rule 1 (DNS) does apply, traffic is allowed, stop rule processing
  5. Il server DNS riceve la richiesta.DNS server receives the request
  6. Il server DNS non ha l'indirizzo memorizzato nella cache e invia la richiesta a un server DNS radice su Internet.DNS server doesn’t have the address cached and asks a root DNS server on the internet
  7. Non sono impostate regole in uscita sulla subnet back-end, il traffico è consentito.No outbound rules on Backend subnet, traffic is allowed
  8. Il server DNS Internet risponde perché la sessione è stata avviata internamente, la risposta è consentita.Internet DNS server responds, since this session was initiated internally, the response is allowed
  9. Il server DNS memorizza la risposta nella cache e restituisce a IIS01 la risposta alla richiesta iniziale.DNS server caches the response, and responds to the initial request back to IIS01
  10. Non sono impostate regole in uscita sulla subnet back-end, il traffico è consentito.No outbound rules on Backend subnet, traffic is allowed
  11. La subnet front-end inizia l'elaborazione delle regole in ingresso:Frontend subnet begins inbound rule processing:
    1. Non sono presenti regole del gruppo di sicurezza di rete applicabili al traffico in ingresso dalla subnet back-end alla subnet front-end, quindi nessuna regola del gruppo di sicurezza di rete è applicabile.There is no NSG rule that applies to Inbound traffic from the Backend subnet to the Frontend subnet, so none of the NSG rules apply
    2. La regola di sistema predefinita che consente il traffico tra le subnet consentirebbe questo tipo di traffico, perciò è consentito.The default system rule allowing traffic between subnets would allow this traffic so the traffic is allowed
  12. IIS01 riceve la risposta da DNS01.IIS01 receives the response from DNS01

(Consentito) Il server Web richiede l'accesso a un file su AppVM01(Allowed) Web Server access file on AppVM01

  1. IIS01 richiede un file su AppVM01.IIS01 asks for a file on AppVM01
  2. Non sono impostate regole in uscita sulla subnet front-end, il traffico è consentito.No outbound rules on Frontend subnet, traffic is allowed
  3. La subnet back-end inizia l'elaborazione delle regole in ingresso:The Backend subnet begins inbound rule processing:
    1. Regola gruppo di sicurezza di rete 1 (DNS) non applicabile, passa alla regola successiva.NSG Rule 1 (DNS) doesn’t apply, move to next rule
    2. Regola gruppo di sicurezza di rete 2 (RDP) non applicabile, passa alla regola successiva.NSG Rule 2 (RDP) doesn’t apply, move to next rule
    3. Regola gruppo di sicurezza di rete 3 (da Internet a firewall), non applicabile, passa alla regola successiva.NSG Rule 3 (Internet to Firewall) doesn’t apply, move to next rule
    4. Regola gruppo di sicurezza di rete 4 (da IIS01 ad AppVM01) applicabile, il traffico è consentito, l'elaborazione delle regole si arresta.NSG Rule 4 (IIS01 to AppVM01) does apply, traffic is allowed, stop rule processing
  4. AppVM01 riceve la richiesta e risponde con il file (presupponendo che l'accesso sia autorizzato).AppVM01 receives the request and responds with file (assuming access is authorized)
  5. Non essendoci regole in uscita sulla subnet back-end, la risposta è consentita.Since there are no outbound rules on the Backend subnet the response is allowed
  6. La subnet front-end inizia l'elaborazione delle regole in ingresso:Frontend subnet begins inbound rule processing:
    1. Non sono presenti regole del gruppo di sicurezza di rete applicabili al traffico in ingresso dalla subnet back-end alla subnet front-end, quindi nessuna regola del gruppo di sicurezza di rete è applicabile.There is no NSG rule that applies to Inbound traffic from the Backend subnet to the Frontend subnet, so none of the NSG rules apply
    2. La regola di sistema predefinita che consente il traffico tra le subnet consentirebbe questo tipo di traffico, perciò è consentito.The default system rule allowing traffic between subnets would allow this traffic so the traffic is allowed.
  7. Il server IIS riceve il file.The IIS server receives the file

(Negato) Traffico Web diretto al server Web(Denied) Web direct to Web Server

Poiché il server Web, IIS01, e il firewall si trovano nello stesso servizio cloud, condividono lo stesso indirizzo IP pubblico.Since the Web Server, IIS01, and the Firewall are in the same Cloud Service they share the same public facing IP address. Tutto il traffico HTTP verrà quindi indirizzato al firewall.Thus any HTTP traffic would be directed to the firewall. Anche se la richiesta viene servita correttamente, non può passare direttamente al server Web. Come progettato, passa prima attraverso il firewall.While the request would be successfully served, it cannot go directly to the Web Server, it passed, as designed, through the Firewall first. Per il flusso di traffico, vedere il primo scenario in questa sezione.See the first Scenario in this section for the traffic flow.

(Negato) Traffico Web al server back-end(Denied) Web to Backend Server

  1. L'utente Internet prova ad accedere a un file su AppVM01 tramite il servizio BackEnd001.CloudApp.Net.Internet user tries to access a file on AppVM01 through the BackEnd001.CloudApp.Net service
  2. Non essendoci endpoint aperti per la condivisione file, il traffico non passa attraverso il servizio cloud e non raggiunge il server.Since there are no endpoints open for file share, this would not pass the Cloud Service and wouldn’t reach the server
  3. In caso di apertura degli endpoint per qualunque motivo, la regola del gruppo di sicurezza di rete 5 (da Internet a rete virtuale) bloccherà questo traffico.If the endpoints were open for some reason, NSG rule 5 (Internet to VNet) would block this traffic

(Negato) Ricerca DNS Web sul server DNS(Denied) Web DNS lookup on DNS server

  1. L'utente Internet prova a cercare un record DNS interno su DNS01 tramite il servizio BackEnd001.CloudApp.Net.Internet user tries to lookup an internal DNS record on DNS01 through the BackEnd001.CloudApp.Net service
  2. Non essendoci endpoint aperti per DNS, il traffico non passa attraverso il servizio cloud e non raggiunge il server.Since there are no endpoints open for DNS, this would not pass the Cloud Service and wouldn’t reach the server
  3. In caso di apertura degli endpoint per qualunque motivo, la regola del gruppo di sicurezza di rete 5 (da Internet a rete virtuale) bloccherà questo traffico. Si noti che la regola 1 (DNS) non è applicabile per due motivi, prima di tutto l'indirizzo di origine è Internet e questa regola si applica solo quando l'origine è la rete virtuale locale, poi questa è una regola di tipo Consenti e quindi non bloccherà mai il traffico.If the endpoints were open for some reason, NSG rule 5 (Internet to VNet) would block this traffic (Note: that Rule 1 (DNS) would not apply for two reasons, first the source address is the internet, this rule only applies to the local VNet as the source, also this is an Allow rule, so it would never deny traffic)

(Negato) Accesso dal Web a SQL tramite il firewall(Denied) Web to SQL access through Firewall

  1. L'utente Internet richiede dati SQL a FrontEnd001.CloudApp.Net (servizio cloud per Internet).Internet user requests SQL data from FrontEnd001.CloudApp.Net (Internet Facing Cloud Service)
  2. Non essendoci endpoint aperti per SQL, il traffico non passa attraverso il servizio cloud e non raggiunge il firewall.Since there are no endpoints open for SQL, this would not pass the Cloud Service and wouldn’t reach the firewall
  3. Se gli endpoint sono aperti per qualunque motivo, la subnet front-end inizia l'elaborazione delle regole in ingresso:If endpoints were open for some reason, the Frontend subnet begins inbound rule processing:
    1. Regola gruppo di sicurezza di rete 1 (DNS) non applicabile, passa alla regola successiva.NSG Rule 1 (DNS) doesn’t apply, move to next rule
    2. Regola gruppo di sicurezza di rete 2 (RDP) non applicabile, passa alla regola successiva.NSG Rule 2 (RDP) doesn’t apply, move to next rule
    3. Regola gruppo di sicurezza di rete 2 (da Internet a firewall) applicabile, il traffico è consentito, l'elaborazione della regola si arresta.NSG Rule 2 (Internet to Firewall) does apply, traffic is allowed, stop rule processing
  4. Il traffico raggiunge l'indirizzo IP interno del firewall (10.0.1.4).Traffic hits internal IP address of the firewall (10.0.1.4)
  5. Il firewall non ha regole di inoltro per SQL ed elimina il traffico.Firewall has no forwarding rules for SQL and drops the traffic

ConclusioniConclusion

Questo è un modo relativamente semplice per proteggere l'applicazione con un firewall e isolare la subnet back-end dal traffico in ingresso.This is a relatively straight forward way of protecting your application with a firewall and isolating the back end subnet from inbound traffic.

Altri esempi e una panoramica dei limiti di sicurezza della rete sono disponibili qui.More examples and an overview of network security boundaries can be found here.

RiferimentiReferences

Script principale e configurazione di reteMain Script and Network Config

Salvare lo script completo in un file di script PowerShell.Save the Full Script in a PowerShell script file. Salvare la configurazione di rete in un file denominato "NetworkConf2.xml".Save the Network Config into a file named “NetworkConf2.xml”. Modificare le variabili definite dall'utente secondo le esigenze.Modify the user defined variables as needed. Eseguire lo script, quindi seguire le istruzioni per la configurazione delle regole del firewall.Run the script, then follow the Firewall rule setup instruction above.

Script completoFull Script

In base alle variabili definite dall'utente, lo script consente di:This script will, based on the user defined variables:

  1. Connettersi a una sottoscrizione di AzureConnect to an Azure subscription
  2. Creare un nuovo account di archiviazioneCreate a new storage account
  3. Creare una nuova rete virtuale e due subnet, come definito nel file di configurazione di rete.Create a new VNet and two subnets as defined in the Network Config file
  4. Creare 4 macchine virtuali di Windows Server.Build 4 windows server VMs
  5. Configurare il gruppo di sicurezza di rete eseguendo queste operazioni:Configure NSG including:
    • Creazione di un gruppo di sicurezza di reteCreating a NSG
    • Inserimento delle regole.Populating it with rules
    • Associazione del gruppo di sicurezza di rete alle subnet appropriateBinding the NSG to the appropriate subnets

Questo script di PowerShell deve essere eseguito localmente in un server o un PC connesso a Internet.This PowerShell script should be run locally on an internet connected PC or server.

Importante

Quando si esegue lo script, in PowerShell potrebbero venire visualizzati avvisi o altri messaggi informativi.When this script is run, there may be warnings or other informational messages that pop in PowerShell. Solo i messaggi di errore formattati in rosso possono indicare un problema.Only error messages in red are cause for concern.

<# 
 .SYNOPSIS
  Example of DMZ and Network Security Groups in an isolated network (Azure only, no hybrid connections)

 .DESCRIPTION
  This script will build out a sample DMZ setup containing:
   - A default storage account for VM disks
   - Two new cloud services
   - Two Subnets (FrontEnd and BackEnd subnets)
   - A Network Virtual Appliance (NVA), in this case a Barracuda NextGen Firewall
   - One server on the FrontEnd Subnet (plus the NVA on the FrontEnd subnet)
   - Three Servers on the BackEnd Subnet
   - Network Security Groups to allow/deny traffic patterns as declared

  Before running script, ensure the network configuration file is created in
  the directory referenced by $NetworkConfigFile variable (or update the
  variable to reflect the path and file name of the config file being used).

 .Notes
  Security requirements are different for each use case and can be addressed in a
  myriad of ways. Please be sure that any sensitive data or applications are behind
  the appropriate layer(s) of protection. This script serves as an example of some
  of the techniques that can be used, but should not be used for all scenarios. You
  are responsible to assess your security needs and the appropriate protections
  needed, and then effectively implement those protections.

  FrontEnd Service (FrontEnd subnet 10.0.1.0/24)
   myFirewall - 10.0.1.4
   IIS01      - 10.0.1.5

  BackEnd Service (BackEnd subnet 10.0.2.0/24)
   DNS01      - 10.0.2.4
   AppVM01    - 10.0.2.5
   AppVM02    - 10.0.2.6

#>

# Fixed Variables
    $LocalAdminPwd = Read-Host -Prompt "Enter Local Admin Password to be used for all VMs"
    $VMName = @()
    $ServiceName = @()
    $VMFamily = @()
    $img = @()
    $size = @()
    $SubnetName = @()
    $VMIP = @()

# User Defined Global Variables
  # These should be changes to reflect your subscription and services
  # Invalid options will fail in the validation section

  # Subscription Access Details
    $subID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

  # VM Account, Location, and Storage Details
    $LocalAdmin = "theAdmin"
    $DeploymentLocation = "Central US"
    $StorageAccountName = "vmstore02"

  # Service Details
    $FrontEndService = "FrontEnd001"
    $BackEndService = "BackEnd001"

  # Network Details
    $VNetName = "CorpNetwork"
    $FESubnet = "FrontEnd"
    $FEPrefix = "10.0.1.0/24"
    $BESubnet = "BackEnd"
    $BEPrefix = "10.0.2.0/24"
    $NetworkConfigFile = "C:\Scripts\NetworkConf2.xml"

  # VM Base Disk Image Details
    $SrvImg = Get-AzureVMImage | Where {$_.ImageFamily -match 'Windows Server 2012 R2 Datacenter'} | sort PublishedDate -Descending | Select ImageName -First 1 | ForEach {$_.ImageName}
    $FWImg = Get-AzureVMImage | Where {$_.ImageFamily -match 'Barracuda NextGen Firewall'} | sort PublishedDate -Descending | Select ImageName -First 1 | ForEach {$_.ImageName}

  # NSG Details
    $NSGName = "MyVNetSG"

# User Defined VM Specific Config
    # Note: To ensure proper NSG Rule creation later in this script:
    #       - The Web Server must be VM 1
    #       - The AppVM1 Server must be VM 2
    #       - The DNS server must be VM 4
    #
    #       Otherwise the NSG rules in the last section of this
    #       script will need to be changed to match the modified
    #       VM array numbers ($i) so the NSG Rule IP addresses
    #       are aligned to the associated VM IP addresses.

    # VM 0 - The Network Virtual Appliance (NVA)
      $VMName += "myFirewall"
      $ServiceName += $FrontEndService
      $VMFamily += "Firewall"
      $img += $FWImg
      $size += "Small"
      $SubnetName += $FESubnet
      $VMIP += "10.0.1.4"

    # VM 1 - The Web Server
      $VMName += "IIS01"
      $ServiceName += $FrontEndService
      $VMFamily += "Windows"
      $img += $SrvImg
      $size += "Standard_D3"
      $SubnetName += $FESubnet
      $VMIP += "10.0.1.5"

    # VM 2 - The First Appliaction Server
      $VMName += "AppVM01"
      $ServiceName += $BackEndService
      $VMFamily += "Windows"
      $img += $SrvImg
      $size += "Standard_D3"
      $SubnetName += $BESubnet
      $VMIP += "10.0.2.5"

    # VM 3 - The Second Appliaction Server
      $VMName += "AppVM02"
      $ServiceName += $BackEndService
      $VMFamily += "Windows"
      $img += $SrvImg
      $size += "Standard_D3"
      $SubnetName += $BESubnet
      $VMIP += "10.0.2.6"

    # VM 4 - The DNS Server
      $VMName += "DNS01"
      $ServiceName += $BackEndService
      $VMFamily += "Windows"
      $img += $SrvImg
      $size += "Standard_D3"
      $SubnetName += $BESubnet
      $VMIP += "10.0.2.4"

# ----------------------------- #
# No User Defined Varibles or   #
# Configuration past this point #
# ----------------------------- #

  # Get your Azure accounts
    Add-AzureAccount
    Set-AzureSubscription –SubscriptionId $subID -ErrorAction Stop
    Select-AzureSubscription -SubscriptionId $subID -Current -ErrorAction Stop

  # Create Storage Account
    If (Test-AzureName -Storage -Name $StorageAccountName) { 
        Write-Host "Fatal Error: This storage account name is already in use, please pick a diffrent name." -ForegroundColor Red
        Return}
    Else {Write-Host "Creating Storage Account" -ForegroundColor Cyan 
          New-AzureStorageAccount -Location $DeploymentLocation -StorageAccountName $StorageAccountName}

  # Update Subscription Pointer to New Storage Account
    Write-Host "Updating Subscription Pointer to New Storage Account" -ForegroundColor Cyan 
    Set-AzureSubscription –SubscriptionId $subID -CurrentStorageAccountName $StorageAccountName -ErrorAction Stop

# Validation
$FatalError = $false

If (-Not (Get-AzureLocation | Where {$_.DisplayName -eq $DeploymentLocation})) {
     Write-Host "This Azure Location was not found or available for use" -ForegroundColor Yellow
     $FatalError = $true}

If (Test-AzureName -Service -Name $FrontEndService) { 
    Write-Host "The FrontEndService service name is already in use, please pick a different service name." -ForegroundColor Yellow
    $FatalError = $true}
Else { Write-Host "The FrontEndService service name is valid for use." -ForegroundColor Green}

If (Test-AzureName -Service -Name $BackEndService) { 
    Write-Host "The BackEndService service name is already in use, please pick a different service name." -ForegroundColor Yellow
    $FatalError = $true}
Else { Write-Host "The BackEndService service name is valid for use." -ForegroundColor Green}

If (-Not (Test-Path $NetworkConfigFile)) { 
    Write-Host 'The network config file was not found, please update the $NetworkConfigFile variable to point to the network config xml file.' -ForegroundColor Yellow
    $FatalError = $true}
Else { Write-Host "The network config file was found" -ForegroundColor Green
        If (-Not (Select-String -Pattern $DeploymentLocation -Path $NetworkConfigFile)) {
            Write-Host 'The deployment location was not found in the network config file, please check the network config file to ensure the $DeploymentLocation varible is correct and the netowrk config file matches.' -ForegroundColor Yellow
            $FatalError = $true}
        Else { Write-Host "The deployment location was found in the network config file." -ForegroundColor Green}}

If ($FatalError) {
    Write-Host "A fatal error has occured, please see the above messages for more information." -ForegroundColor Red
    Return}
Else { Write-Host "Validation passed, now building the environment." -ForegroundColor Green}

# Create VNET
    Write-Host "Creating VNET" -ForegroundColor Cyan 
    Set-AzureVNetConfig -ConfigurationPath $NetworkConfigFile -ErrorAction Stop

# Create Services
    Write-Host "Creating Services" -ForegroundColor Cyan
    New-AzureService -Location $DeploymentLocation -ServiceName $FrontEndService -ErrorAction Stop
    New-AzureService -Location $DeploymentLocation -ServiceName $BackEndService -ErrorAction Stop

# Build VMs
    $i=0
    $VMName | Foreach {
        Write-Host "Building $($VMName[$i])" -ForegroundColor Cyan
        If ($VMFamily[$i] -eq "Firewall") 
            { 
            New-AzureVMConfig -Name $VMName[$i] -ImageName $img[$i] –InstanceSize $size[$i] | `
                Add-AzureProvisioningConfig -Linux -LinuxUser $LocalAdmin -Password $LocalAdminPwd  | `
                Set-AzureSubnet  –SubnetNames $SubnetName[$i] | `
                Set-AzureStaticVNetIP -IPAddress $VMIP[$i] | `
                New-AzureVM –ServiceName $ServiceName[$i] -VNetName $VNetName -Location $DeploymentLocation
            # Set up all the EndPoints we'll need once we're up and running
            # Note: Web traffic goes through the firewall, so we'll need to set up a HTTP endpoint.
            #       Also, the firewall will be redirecting web traffic to a new IP and Port in a
            #       forwarding rule, so the HTTP endpoint here will have the same public and local
            #       port and the firewall will do the NATing and redirection as declared in the
            #       firewall rule.
            Add-AzureEndpoint -Name "MgmtPort1" -Protocol tcp -PublicPort 801  -LocalPort 801  -VM (Get-AzureVM -ServiceName $ServiceName[$i] -Name $VMName[$i]) | Update-AzureVM
            Add-AzureEndpoint -Name "MgmtPort2" -Protocol tcp -PublicPort 807  -LocalPort 807  -VM (Get-AzureVM -ServiceName $ServiceName[$i] -Name $VMName[$i]) | Update-AzureVM
            Add-AzureEndpoint -Name "HTTP"      -Protocol tcp -PublicPort 80   -LocalPort 80   -VM (Get-AzureVM -ServiceName $ServiceName[$i] -Name $VMName[$i]) | Update-AzureVM
            # Note: A SSH endpoint is automatically created on port 22 when the appliance is created.
            }
        Else
            {
            New-AzureVMConfig -Name $VMName[$i] -ImageName $img[$i] –InstanceSize $size[$i] | `
                Add-AzureProvisioningConfig -Windows -AdminUsername $LocalAdmin -Password $LocalAdminPwd  | `
                Set-AzureSubnet  –SubnetNames $SubnetName[$i] | `
                Set-AzureStaticVNetIP -IPAddress $VMIP[$i] | `
                Set-AzureVMMicrosoftAntimalwareExtension -AntimalwareConfiguration '{"AntimalwareEnabled" : true}' | `
                Remove-AzureEndpoint -Name "PowerShell" | `
                New-AzureVM –ServiceName $ServiceName[$i] -VNetName $VNetName -Location $DeploymentLocation
                # Note: A Remote Desktop endpoint is automatically created when each VM is created.
            }
        $i++
    }

# Configure NSG
    Write-Host "Configuring the Network Security Group (NSG)" -ForegroundColor Cyan

  # Build the NSG
    Write-Host "Building the NSG" -ForegroundColor Cyan
    New-AzureNetworkSecurityGroup -Name $NSGName -Location $DeploymentLocation -Label "Security group for $VNetName subnets in $DeploymentLocation"

  # Add NSG Rules
    Write-Host "Writing rules into the NSG" -ForegroundColor Cyan
    Get-AzureNetworkSecurityGroup -Name $NSGName | Set-AzureNetworkSecurityRule -Name "Enable Internal DNS" -Type Inbound -Priority 100 -Action Allow `
        -SourceAddressPrefix VIRTUAL_NETWORK -SourcePortRange '*' `
        -DestinationAddressPrefix $VMIP[4] -DestinationPortRange '53' `
        -Protocol *

    Get-AzureNetworkSecurityGroup -Name $NSGName | Set-AzureNetworkSecurityRule -Name "Enable RDP to $VNetName VNet" -Type Inbound -Priority 110 -Action Allow `
        -SourceAddressPrefix INTERNET -SourcePortRange '*' `
        -DestinationAddressPrefix VIRTUAL_NETWORK -DestinationPortRange '3389' `
        -Protocol *

    Get-AzureNetworkSecurityGroup -Name $NSGName | Set-AzureNetworkSecurityRule -Name "Enable Internet to $($VMName[0])" -Type Inbound -Priority 120 -Action Allow `
        -SourceAddressPrefix Internet -SourcePortRange '*' `
        -DestinationAddressPrefix $VMIP[0] -DestinationPortRange '*' `
        -Protocol *

    Get-AzureNetworkSecurityGroup -Name $NSGName | Set-AzureNetworkSecurityRule -Name "Enable $($VMName[1]) to $($VMName[2])" -Type Inbound -Priority 130 -Action Allow `
        -SourceAddressPrefix $VMIP[1] -SourcePortRange '*' `
        -DestinationAddressPrefix $VMIP[2] -DestinationPortRange '*' `
        -Protocol *

    Get-AzureNetworkSecurityGroup -Name $NSGName | Set-AzureNetworkSecurityRule -Name "Isolate the $VNetName VNet from the Internet" -Type Inbound -Priority 140 -Action Deny `
        -SourceAddressPrefix INTERNET -SourcePortRange '*' `
        -DestinationAddressPrefix VIRTUAL_NETWORK -DestinationPortRange '*' `
        -Protocol *

    Get-AzureNetworkSecurityGroup -Name $NSGName | Set-AzureNetworkSecurityRule -Name "Isolate the $FESubnet subnet from the $BESubnet subnet" -Type Inbound -Priority 150 -Action Deny `
        -SourceAddressPrefix $FEPrefix -SourcePortRange '*' `
        -DestinationAddressPrefix $BEPrefix -DestinationPortRange '*' `
        -Protocol *

    # Assign the NSG to the Subnets
        Write-Host "Binding the NSG to both subnets" -ForegroundColor Cyan
        Set-AzureNetworkSecurityGroupToSubnet -Name $NSGName -SubnetName $FESubnet -VirtualNetworkName $VNetName
        Set-AzureNetworkSecurityGroupToSubnet -Name $NSGName -SubnetName $BESubnet -VirtualNetworkName $VNetName

# Optional Post-script Manual Configuration
  # Configure Firewall
  # Install Test Web App (Run Post-Build Script on the IIS Server)
  # Install Backend resource (Run Post-Build Script on the AppVM01)
  Write-Host
  Write-Host "Build Complete!" -ForegroundColor Green
  Write-Host
  Write-Host "Optional Post-script Manual Configuration Steps" -ForegroundColor Gray
  Write-Host " - Configure Firewall" -ForegroundColor Gray
  Write-Host " - Install Test Web App (Run Post-Build Script on the IIS Server)" -ForegroundColor Gray
  Write-Host " - Install Backend resource (Run Post-Build Script on the AppVM01)" -ForegroundColor Gray
  Write-Host

File di configurazione di reteNetwork Config File

Salvare questo file XML con il percorso aggiornato e aggiungere il collegamento a questo file nella variabile $NetworkConfigFile dello script precedente.Save this xml file with updated location and add the link to this file to the $NetworkConfigFile variable in the script above.

<NetworkConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration">
  <VirtualNetworkConfiguration>
    <Dns>
      <DnsServers>
        <DnsServer name="DNS01" IPAddress="10.0.2.4" />
        <DnsServer name="Level3" IPAddress="209.244.0.3" />
      </DnsServers>
    </Dns>
    <VirtualNetworkSites>
      <VirtualNetworkSite name="CorpNetwork" Location="Central US">
        <AddressSpace>
          <AddressPrefix>10.0.0.0/16</AddressPrefix>
        </AddressSpace>
        <Subnets>
          <Subnet name="FrontEnd">
            <AddressPrefix>10.0.1.0/24</AddressPrefix>
          </Subnet>
          <Subnet name="BackEnd">
            <AddressPrefix>10.0.2.0/24</AddressPrefix>
          </Subnet>
        </Subnets>
        <DnsServersRef>
          <DnsServerRef name="DNS01" />
          <DnsServerRef name="Level3" />
        </DnsServersRef>
      </VirtualNetworkSite>
    </VirtualNetworkSites>
  </VirtualNetworkConfiguration>
</NetworkConfiguration>

Script di applicazione di esempioSample Application Scripts

Se si vuole installare un'applicazione di esempio per questo e altri esempi di rete perimetrale, è possibile trovarne una in Script di applicazione di esempioIf you wish to install a sample application for this, and other DMZ Examples, one has been provided at the following link: Sample Application Script