Condividi tramite


Windows Firewall per sviluppatori di giochi

Questo articolo descrive Windows Firewall: perché esiste, ciò che esegue e come funziona. Più importante, descrive come configurare il gioco per funzionare bene con il firewall.

Contenuto:

Che cos'è un firewall?

Il firewall fornisce una barriera contro le intrusioni basate sulla rete. Blocca il traffico in ingresso non richiesto e rende il sistema principalmente invisibile su Internet rifiutando le richieste ICMP (Internet Control Message Protocol). Ciò significa che il ping e il tracert non funzioneranno. Il firewall cerca e rifiuta pacchetti non validi.

Questa barriera impedisce attacchi opportunistici. Gli attacchi distribuiti individuando molti sistemi con la stessa vulnerabilità. Il firewall può contrastare molti attacchi inserendo un segno "non disturbo" per queste funzionalità non attualmente in uso; l'attacco viene ignorato e non colpisce la casa. Il vantaggio essenziale di Windows Firewall è che le funzionalità e le applicazioni che non sono in uso non possono essere strade per gli attacchi.

L'utente configura il sistema per identificare le applicazioni e le funzionalità necessarie e deve essere aperta alla rete. Ciò accade quando un'applicazione viene installata o quando tenta di aprirla alla rete.

Come posso dire se il mio gioco è interessato?

Con l'arrivo di Windows XP SP2, Windows Firewall è stato ampiamente distribuito. Tutti i giochi di Windows multiplayer sono interessati in qualche misura. Anche se i client sono in genere in buona forma, server, host e peer in peer-to-peer richiedono che il firewall sia configurato per continuare a funzionare. In particolare, il traffico non richiesto viene eliminato. Il firewall intercetta i pacchetti di filtro del traffico di rete in base al contenuto dei pacchetti e all'attività di rete recente. Il firewall usa il contenuto e l'attività per decidere di inoltrare o eliminare un pacchetto. Dopo aver configurato correttamente il firewall, un gioco sarà in grado di accettare il traffico in ingresso non richiesto come prima.

Chi ha in ingresso il traffico non richiesto?

  • Client/Server: tutti i partecipanti si connettono a un server centrale. Il server centrale è quello con il traffico non richiesto. I client che si connettono al server richiedono il traffico restituito, previsto e possono passare attraverso il firewall se vengono seguite le regole per i client. Il server centrale deve essere configurato per accettare il traffico non richiesto per consentire al traffico client di passare attraverso il firewall.
  • Multigiocatore (MMP): tutti i partecipanti sono connessi a un data center. Ciò equivale a una relazione client/server complessa, poiché il data center ha il traffico in ingresso non richiesto. I partecipanti sono client e in generale non devono accettare traffico non richiesto.
  • Peer-to-Peer, dove tutti i partecipanti sono connessi direttamente all'altro: tutti i partecipanti devono essere pronti ad accettare traffico non richiesto da qualsiasi nuovo giocatore che si unisce al gruppo. In un certo senso, ognuno dei partecipanti deve funzionare come host, quindi tutti devono essere configurati come se fossero host.

I client sono in genere in buona forma. Le connessioni TCP/IP (Transmission Control Protocol/Internet Protocol) in uscita funzioneranno, poiché i messaggi User Datagram Protocol (UDP) in uscita e le risposte tempestive a tali messaggi, il firewall mantiene aperta la porta per 90 secondi dopo ogni messaggio in uscita in attesa di una risposta.

Firewall prima di Windows XP SP2

Internet Connection Firewall (ICF) in Windows XP e Windows Server 2003 è un filtro pacchetti con stato e gestisce sia Internet Protocol, versione 4 (IPv4) che Internet Protocol, versione 6 (IPv6). Tuttavia, non è attivo per impostazione predefinita e non supporta stack di rete di terze parti, di cui esiste un numero significativo nel mondo, ad esempio grandi provider Internet, incluse le aziende telefoniche nazionali.

Per quelli non in Windows XP SP2, l'attivazione dell'ICF è altamente consigliata. Internet Connection Firewall (ICF) fornisce il mapping delle porte per eseguire l'override del filtro dei pacchetti. In sostanza, si specifica la porta da aprire e rimane aperta finché non viene chiusa. Se l'utente viene riavviato prima della chiusura, rimarrà aperto fino a quando non verrà chiuso in modo specifico. Il controllo del firewall e la gestione dei mapping delle porte viene eseguito tramite INetSharingManager (IPv4) e INetFwV6Mgr (IPv6 ).

Windows Firewall per Windows XP SP2 è una soluzione più completa che supporta gli stack di rete di terze parti e gestisce le porte in modo più intelligente: le porte vengono mantenute aperte solo a condizione che l'applicazione che li necessita sia ancora attiva.

Windows XP SP2 Firewall è migliore

Windows XP SP2 mette in primo piano le scelte e le impostazioni di sicurezza. L'obiettivo è proteggere per impostazione predefinita e consentire all'utente di fare scelte informate sulle applicazioni consentite per l'esecuzione nel computer.

Il nuovo Windows Firewall è disponibile sia in Windows XP SP2 che in Windows Server 2003 Service Pack 1 (SP1). Come l'ICF, è un firewall software che supporta sia IPv4 che IPv6, ma a differenza di ICF, Windows Firewall:

  • Ha la protezione in fase di avvio del sistema, eliminando una piccola finestra di vulnerabilità durante l'avvio.
  • Supporta stack di rete di terze parti.
  • Dispone di una modalità "on senza eccezioni" che blocca tutti i pacchetti in ingresso non richiesti. Questo è ottimo quando si usa una rete pubblica, ad esempio in un aeroporto o un caffè.

Nella modalità "on senza eccezioni" tutti i fori statici vengono chiusi. Le chiamate API per aprire un foro statico sono consentite ma posticipate; ovvero, non vengono applicati fino a quando il firewall torna alla normale operazione. Tutte le richieste di ascolto da parte delle applicazioni verranno ignorate. Le connessioni in uscita avranno esito positivo.

Per le nuove applicazioni, aggiungere l'applicazione all'elenco "Eccezioni" durante l'installazione. È possibile aggiungere l'applicazione usando l'interfaccia INetFwAuthorizedApplications , fornendo il percorso completo. Verranno illustrati i dettagli dell'esempio.

Come nota lato, è possibile che si stia chiedendo se è un rischio di sicurezza che le applicazioni possono aggiungere e rimuovere applicazioni dall'elenco delle eccezioni qualsiasi intervento dell'utente o forse si ritiene che il rischio maggiore sia che le applicazioni possano disabilitare completamente il firewall. Per eseguire queste operazioni, l'applicazione deve avere privilegi di amministratore. Se hai codice dannoso in esecuzione in modalità amministratore nel tuo sistema, il gioco è già finito e l'hacker ha già vinto. La capacità dell'hacker di disabilitare il firewall meriterebbe poco più di una nota a piè di pagina.

Le applicazioni legacy, incluse le applicazioni installate prima dell'aggiornamento dell'utente a Windows XP SP2, vengono gestite con il popup Elenco eccezioni (vedere la figura 1). Questa finestra di dialogo mostra quando un'applicazione tenta di aprire una porta per il traffico in ingresso: quando si chiama bind() con una porta non zero per UDP o accept() per il protocollo TCP/IP. È necessario essere in esecuzione come amministratore per le applicazioni "Sblocca", mentre "Ask Me Later" non consente questa volta, ma chiede di nuovo la prossima volta.

Si tratta di una finestra di dialogo modale di sistema non bloccabile. Quando si esegue un'applicazione Microsoft Direct3D a schermo intero, la finestra di dialogo viene visualizzata sotto; e l'utente può quindi gestirlo quando l'applicazione chiude la modalità schermo intero o le schede alt-tabulazioni al desktop. Tuttavia, non è sempre ovvio per l'utente che questa finestra di dialogo è apparsa quando un gioco è in esecuzione a schermo intero, quindi è importante evitare di causare la visualizzazione di questa finestra di dialogo usando l'interfaccia INetFwAuthorizedApplications come illustrato di seguito.

Figura 1. Finestra di dialogo Popup elenco eccezioni

finestra di dialogo popup elenco eccezioni

Si noterà che il popup conosce il nome e l'editore dell'applicazione. Non c'è magia qui: viene estratta dalle informazioni sulla versione del file eseguibile. Queste informazioni sono uno strumento di amministrazione del sistema importante; viene usata anche per il lavoro di compatibilità delle applicazioni in corso. Alcune applicazioni non consentono di mantenere aggiornate queste informazioni sulla versione.

Gli utenti possono anche aggiungere le applicazioni tramite l'interfaccia utente (interfaccia utente) (vedere la figura 2)

Figura 2. Configurazione del firewall

configurazione del firewall

Figura 3. Aggiunta di un programma all'elenco eccezioni del firewall

aggiunta di un programma all'elenco eccezioni del firewall

Lo scenario migliore consiste nell'apportare aggiunte e rimozione dall'elenco di eccezioni automatizzato. Il momento migliore per eseguire queste aggiunte e rimozione è durante il processo di installazione e disinstallazione. L'aggiunta o la rimozione dall'elenco di eccezioni del firewall richiede privilegi di amministratore, quindi assicurarsi di tenere conto di questo.

Uso di Windows Firewall

Anche in questo caso, la maggior parte dei giochi deve essere aggiunta all'elenco di eccezioni del firewall se può funzionare come server o se implementa un protocollo di comunicazione peer-to-peer. Il FirewallInstallHelper.dll è una DLL di esempio che può essere chiamata da un programma di installazione. L'origine viene fornita se si vuole integrare l'origine direttamente nell'applicazione. L'esempio è disponibile qui:

File
Source: (radice SDK)\Samples\C++\Misc\FirewallInstallHelper
Eseguibile: (radice SDK)\Samples\C++\Misc\Bin\<arch>\FirewallInstallHelper.dll

 

Le funzioni esportate da questa DLL sono le seguenti:

AddApplicationToExceptionListW

Questa funzione aggiunge un'applicazione all'elenco di eccezioni. Accetta un percorso completo per l'eseguibile e un nome descrittivo che verrà visualizzato nell'elenco delle eccezioni del firewall. Questa funzione richiede privilegi di amministratore.

AddApplicationToExceptionListA

Versione ANSI di AddApplicationToExceptionListW

RemoveApplicationFromExceptionListW

Questa funzione rimuove l'applicazione dall'elenco di eccezioni. Accetta un percorso completo per l'eseguibile. Questa funzione richiede privilegi di amministratore

RemoveApplicationFromExceptionListA

Versione ANSI di RemoveApplicationFromExceptionListW

CanLaunchMultiplayerGameW

Questa funzione segnala se l'applicazione è stata disabilitata o rimossa dall'elenco delle eccezioni. Deve essere chiamato ogni volta che viene eseguito il gioco. La funzione accetta un percorso completo dell'eseguibile. Questa funzione non richiede privilegi di amministratore.

CanLaunchMultiplayerGameA

Versione ANSI di CanLaunchMultiplayerGameW

SetMSIFirewallProperties

Chiama questa opzione solo se usi azioni personalizzate in Windows Installer. Vedere di seguito per altri dettagli.

AddToExceptionListUsingMSI

Chiama questa opzione solo se usi azioni personalizzate in Windows Installer. Vedere di seguito per altri dettagli.

RemoveFromExceptionListUsingMSI

Chiama questa opzione solo se usi azioni personalizzate in Windows Installer. Vedere di seguito per altri dettagli.

Le sezioni seguenti descrivono metodi specifici per chiamare le funzioni DLL esportate da questo FirewallInstallHelper da un pacchetto InstallShield, Wise o Windows Installer. Tutti i metodi eseguono il rendering degli stessi risultati e spetta allo sviluppatore determinare il metodo da implementare.

Integrazione con InstallShield InstallScript

Un metodo alternativo dell'uso delle API firewall consiste nell'aggiungere le chiamate di funzione a un InstallShield InstallScript. I passaggi necessari per l'integrazione sono abbastanza semplici:

  1. Aprire un progetto InstallScript nell'editor InstallShield.

  2. Aggiungere il FirewallInstallHelper.dll al progetto come file di supporto.

    1. Nella scheda Assistente progetto aprire la scheda File applicazione.
    2. Fare clic sul pulsante Aggiungi file per aggiungere file alla cartella di destinazione dell'applicazione.
    3. Passare alla FirewallInstallHelper.dll compilata o usata nell'SDK DirectX e aggiungerla al progetto.
  3. Aggiungere InstallScript al progetto.

    1. Aprire la visualizzazione Designer installazione e fare clic su Comportamento e logica | InstallScript
    2. Fare clic sul file InstallScript (in genere setup.rul) per aprirlo nell'editor
    3. Incollare il codice seguente nel file InstallScript:
    #include "ifx.h"
    
    prototype BOOL FirewallInstallHelper.AddApplicationToExceptionListW( WSTRING, WSTRING );
    prototype BOOL FirewallInstallHelper.RemoveApplicationFromExceptionListW( WSTRING );
    
    function OnMoved()
        WSTRING path[256];
    begin
        // The DLL has been installed into the TARGETDIR
        if !MAINTENANCE then // TRUE when installing
            UseDLL( TARGETDIR ^ "FirewallInstallHelper.dll" );
            path = TARGETDIR ^ "TODO: change to relative path to executable from install directory";
            FirewallInstallHelper.AddApplicationToExceptionListW( path, "TODO: change to friendly app name" );
            UnUseDLL( TARGETDIR ^ "FirewallInstallHelper.dll" );
        endif;
    end;
    
    
    function OnMoving()
        WSTRING path[256];
    begin
        // The DLL is about to be removed from TARGETDIR
        if MAINTENANCE && UNINST != "" then // TRUE when uninstalling
            UseDLL( TARGETDIR ^ "FirewallInstallHelper.dll" );
            path = TARGETDIR ^ "TODO: change to relative path to executable from install directory";
            FirewallInstallHelper.RemoveApplicationFromExceptionListW( path );
            UnUseDLL( TARGETDIR ^ "FirewallInstallHelper.dll" );
        endif;
    end;
    
    1. Modificare i commenti TODO con il nome dell'applicazione che verrà visualizzato nell'elenco eccezioni del firewall e il percorso dell'eseguibile del gioco rispetto alla directory di installazione.

Integrazione in Wise per Windows Installer

Per eseguire l'integrazione con Wise per Windows Installer, è necessario eseguire questi passaggi:

  1. Aprire il progetto Wise per Windows Installer.

  2. Selezionare la scheda "Installation Expert" (Esperto di installazione) nella parte inferiore.

  3. Fare clic su File e aggiungere il FirewallInstallHelper.dll da DXSDK alla directory di installazione del gioco.

  4. Selezionare la scheda "MSI script" nella parte inferiore.

  5. Selezionare la scheda "Esegui immediata" nella parte inferiore.

  6. Dopo CostFinalize, aggiungere un'azione "Imposta proprietà" che imposta FULLPATH su "[INSTALLDIR]percorso relativo all'eseguibile dalla directory di installazione". Ad esempio, "[INSTALLDIR]game.exe" senza virgolette

  7. Selezionare la scheda "Esegui posticipata" nella parte inferiore.

  8. Dopo PublishProduct, aggiungere un'istruzione "If" con la condizione "NOT Installed" (distinzione tra maiuscole e minuscole).

  9. All'interno del blocco If aggiungere un'azione "Chiama DLL personalizzata dalla destinazione".

    1. Impostare il campo File DLL su "[INSTALLDIR]FirewallInstallHelper.dll".
    2. Impostare il campo Nome funzione su "AddApplicationToExceptionListA".
    3. Aggiungere un parametro con il tipo "puntatore stringa", l'origine del valore "Property" e il nome della proprietà "FULLPATH".
    4. Aggiungere un secondo parametro con il tipo "puntatore stringa", l'origine valore "Constant" e impostare il valore costante sul nome descrittivo dell'applicazione che si desidera visualizzare nell'elenco di eccezioni del firewall.
    5. Chiudere il blocco If aggiungendo un'istruzione "End Statement".
  10. Appena sopra l'azione RemoveFiles nella parte superiore, aggiungere un altro blocco If, con la condizione "REMOVE~="ALL"" (distinzione tra maiuscole e minuscole e senza virgolette esterne).

  11. Nel secondo blocco If aggiungere un'azione "Chiama DLL personalizzata dalla destinazione".

    1. Impostare il campo File DLL su "[INSTALLDIR]FirewallInstallHelper.dll".
    2. Impostare il campo Nome funzione su "RemoveApplicationFromExceptionListA".
    3. Aggiungere un parametro con il tipo "puntatore stringa", l'origine del valore "Property" e il nome della proprietà "FULLPATH".
    4. Chiudere il secondo blocco If aggiungendo un'istruzione "End Statement".

Integrazione in Windows Installer

Per eseguire l'integrazione con Windows Installer a livello generale, è necessario eseguire questi passaggi. Verranno illustrati in dettaglio di seguito:

  • Aggiungere 2 proprietà "FriendlyNameForFirewall" e "RelativePathToExeForFirewall", come descritto di seguito.
  • Dopo l'azione CostFinalize, chiamare "SetMSIFirewallProperties" in un'azione personalizzata immediata per impostare le proprietà MSI appropriate per le altre azioni personalizzate.
  • Durante l'installazione dopo l'azione InstallFiles, chiamare un'azione personalizzata posticipata che usa la funzione "AddToExceptionListUsingMSI" di FirewallInstallHelper.
  • Durante la disinstallazione dopo l'azione InstallFiles, chiamare un'azione personalizzata posticipata che usa la funzione "RemoveFromExceptionListUsingMSI" di FirewallInstallHelper.
  • Durante il rollback, chiamare un'azione personalizzata posticipata che chiama anche la funzione "RemoveFromExceptionListUsingMSI" di FirewallInstallHelper.

Di seguito sono riportati i passaggi necessari per eseguire questa operazione usando un editor MSI, ad esempio Orca disponibile in Platform SDK. Si noti che alcuni editor hanno procedure guidate che semplificano alcuni di questi passaggi:

  1. Aprire il pacchetto MSI in Orca.

  2. Aggiungere quanto segue alla tabella Binaria:

    Nome Dati
    FIREWALL Puntare al FirewallInstallHelper.dll. Questo file verrà incorporato nel pacchetto MSI, quindi sarà necessario eseguire questo passaggio ogni volta che si ricompila FirewallInstallHelper.dll.

     

  3. Aggiungere quanto segue alla tabella CustomAction:

    Azione Tipo Source (Sorgente) Destinazione
    FirewallSetMSIProperties msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue = 65 FIREWALL SetMSIFirewallProperties
    FirewallAggiungi msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3137 FIREWALL AddToExceptionListUsingMSI
    FirewallRemove msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3137 FIREWALL RemoveFromExceptionListUsingMSI
    FirewallRollBackAggiungi msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeRollback + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3393 FIREWALL RemoveFromExceptionListUsingMSI
    FirewallRollBackRemove msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeRollback + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3393 FIREWALL AddToExceptionListUsingMSI

     

  4. Aggiungere quanto segue alla tabella InstallExecuteSequence:

    Azione Condizione Sequenza Note
    FirewallSetMSIProperties 1010 Questo posto poco dopo CostFinalize.
    FirewallAggiungi NON installato 4021 Questa azione personalizzata verrà eseguita solo durante una nuova installazione. Il numero di sequenza inserisce l'azione dopo InstallFiles e dopo i rollback.
    FirewallRollBackAggiungi NON installato 4020 Questa azione personalizzata verrà eseguita solo quando viene annullata una nuova installazione. Il numero di sequenza inserisce l'azione dopo InstallFiles e prima dell'azione Aggiungi personalizzata.
    FirewallRemove Installato 3461 Questa azione personalizzata verrà eseguita solo durante la disinstallazione. Il numero di sequenza inserisce l'azione direttamente prima di RemoveFiles e dopo i rollback.
    FirewallRollBackRemove NON installato 3460 Questa azione personalizzata verrà eseguita solo quando una disinstallazione viene annullata. Il numero di sequenza inserisce l'azione direttamente prima di RemoveFiles e prima dell'azione Rimuovi personalizzata.

     

  5. Aggiungere quanto segue alla tabella Property:

    Proprietà Valore
    FriendlyNameForFirewall Deve essere il nome che verrà visualizzato dall'elenco delle eccezioni. Ad esempio, "Esempio di gioco"
    RelativePathToExeForFirewall Deve essere l'eseguibile installato del gioco. Ad esempio, "ExampleGame.exe"

     

Per altre informazioni su Windows Installer, vedere Windows Installer.

Consigli

Il firewall è qui per rimanere. Queste raccomandazioni offrono ai clienti un'esperienza firewall ottimale con il gioco Windows:

  • Non indicare agli utenti di disabilitare il firewall per giocare al gioco. Questo rende l'intera macchina vulnerabile anche quando non giocano al tuo gioco.
  • Semplificare la configurazione del firewall per gli utenti. Aggiungere l'applicazione all'elenco di eccezioni durante l'installazione e rimuovere l'applicazione dall'elenco di eccezioni durante l'installazione.
  • Inviare commenti e suggerimenti all'utente se il multiplayer è bloccato dallo stato del firewall. Ad esempio, disabilitare le funzionalità di rete se non funzioneranno perché l'applicazione non è consentita o perché il sistema è in modalità "nessuna eccezione".