Pare-feu Windows pour les développeurs de jeux
Cet article décrit le Pare-feu Windows : pourquoi il existe, ce qu’il accomplit et comment il le fait. Plus important encore, il décrit comment configurer votre jeu pour fonctionner correctement avec le pare-feu.
Contenu:
- Qu’est-ce qu’un pare-feu ?
- Comment puis-je savoir si mon jeu est affecté ?
- le pare-feu avant l' Windows XP SP2
- pare-feu Windows XP SP2 est préférable
- utiliser le pare-feu Windows
- intégration à l’aide d’InstallShield InstallScript
- intégration à Wise for Windows Installer
- intégration dans windows Installer
- Recommandations
Qu’est-ce qu’un pare-feu ?
Le pare-feu constitue une barrière contre les intrusions basées sur le réseau. Il bloque le trafic entrant non sollicité et rend le système principalement invisible sur Internet en rejetant les demandes ICMP (Internet Control Message Protocol). Cela signifie que le test ping et le traceur ne fonctionneront pas. Le pare-feu examine également et rejette les paquets non valides.
Cette barrière empêche les attaques opportunistes. Les attaques se propagent en recherchant de nombreux systèmes présentant la même vulnérabilité. Le pare-feu peut contrecarrer de nombreuses attaques en mettant en place un signe « ne pas déranger » pour ces fonctionnalités qui ne sont pas utilisées actuellement ; l’attaque est ignorée et ne frappe pas à la maison. L’avantage essentiel du Pare-feu Windows est que les fonctionnalités et les applications qui ne sont pas utilisées ne peuvent pas être des voies d’attaque.
L’utilisateur configure le système pour identifier les applications et fonctionnalités nécessaires et doit être ouvert au réseau. Cela se produit lorsqu’une application est installée ou lorsqu’elle tente de s’ouvrir au réseau.
Comment puis-je savoir si mon jeu est affecté ?
Avec l’arrivée de Windows XP SP2, le Pare-feu Windows a été largement déployé. Tous les jeux Windows multijoueurs sont affectés à un certain degré. Bien que les clients soient généralement en bonne forme, les serveurs, les hôtes et les homologues dans peer-to-peer ont tous besoin que le pare-feu soit configuré pour continuer à fonctionner. Plus précisément, le trafic entrant non sollicité est supprimé. Le pare-feu intercepte les paquets de filtre de trafic réseau en fonction du contenu des paquets et de l’activité réseau récente. Le pare-feu utilise le contenu et l’activité pour décider de transférer ou de supprimer un paquet. Une fois le pare-feu correctement configuré, un jeu peut accepter le trafic entrant non sollicité comme précédemment.
Qui a un trafic non sollicité entrant ?
- Client/serveur : tous les participants se connectent à un serveur central. Le serveur central est celui avec le trafic entrant non sollicité. Les clients qui se connectent au serveur sollicitent le trafic de retour, ce qui est attendu et est autorisé à passer par le pare-feu si les règles des clients sont suivies. Le serveur central doit être configuré pour accepter le trafic non sollicité pour permettre au trafic client de passer par le pare-feu.
- Massivement multijoueur (MMP) : tous les participants sont connectés à un centre de données. Cela équivaut à une relation client/serveur complexe, car le centre de données dispose du trafic entrant non sollicité. Les participants sont des clients et, en général, n’ont pas besoin d’accepter le trafic non sollicité.
- Pair à pair, où tous les participants sont connectés directement : tous les participants doivent être prêts à accepter le trafic non sollicité de tout nouveau joueur qui rejoint le groupe. Dans un sens, chacun des participants doit fonctionner en tant qu’hôte, de sorte qu’ils doivent tous être configurés comme s’ils étaient des hôtes.
Les clients sont généralement en bonne forme. Leurs connexions TCP/IP (Transmission Control Protocol/ Internet Protocol) sortantes fonctionnent correctement, car les messages UDP (User Datagram Protocol) sortants ainsi que les réponses rapides à ces messages - le pare-feu conserve le port ouvert pendant 90 secondes après chaque message sortant en prévision d’une réponse.
Pare-feu avant Windows XP SP2
Le pare-feu de connexion Internet (ICF) dans Windows XP et Windows Server 2003 est un filtre de paquets avec état et gère à la fois le protocole Internet, la version 4 (IPv4) et le protocole Internet, version 6 (IPv6). Toutefois, il n’est pas activé par défaut et ne prend pas en charge les piles réseau tierces, dont il y a un nombre important dans le monde, tels que les grands fournisseurs d’Internet, y compris les compagnies de téléphone nationales.
Pour ceux qui ne sont pas sur Windows XP SP2, l’activation de l’ICF est vivement recommandée. Le pare-feu de connexion Internet (ICF) fournit un mappage de port pour remplacer le filtre de paquets. Essentiellement, vous spécifiez le port à ouvrir et il reste ouvert jusqu’à ce que vous le fermiez. Si l’utilisateur redémarre avant sa fermeture, il reste ouvert jusqu’à ce qu’il soit spécifiquement fermé. Le contrôle du pare-feu et de la gestion des mappages de ports est effectué via INetSharingManager (IPv4) et INetFwV6Mgr (IPv6).
Le Pare-feu Windows pour Windows XP SP2 est une solution plus complète qui prend en charge les piles réseau tierces et gère les ports plus intelligemment : les ports sont conservés ouverts uniquement tant que l’application qui en a besoin est toujours active.
Le pare-feu Windows XP SP2 est meilleur
Windows XP SP2 place les choix de sécurité et les paramètres en avant. L’objectif est de protéger par défaut et d’autoriser l’utilisateur à faire des choix éclairés sur les applications autorisées à s’exécuter sur leur ordinateur.
Le nouveau Pare-feu Windows est disponible sur Windows XP SP2 et Windows Server 2003 Service Pack 1 (SP1). Comme l’ICF, il s’agit d’un pare-feu logiciel qui prend en charge IPv4 et IPv6, mais contrairement au Pare-feu Windows :
- Dispose d’une protection au moment du démarrage du système, éliminant ainsi une petite fenêtre de vulnérabilité pendant le démarrage.
- Prend en charge les piles réseau tierces.
- A un mode « activé sans exception » qui bloque tous les paquets entrants non sollicités. C’est génial quand vous utilisez un réseau public, comme dans un aéroport ou un café.
Dans le mode « activé sans exception », tous les trous statiques sont fermés. Les appels d’API pour ouvrir un trou statique sont autorisés mais différés ; autrement dit, elles ne sont pas appliquées tant que le pare-feu ne passe pas à l’opération normale. Toutes les demandes d’écoute par les applications sont également ignorées. Les connexions sortantes réussissent toujours.
Pour les nouvelles applications, ajoutez votre application à la « liste des exceptions » pendant l’installation. Vous pouvez ajouter l’application à l’aide de l’interface INetFwAuthorizedApplications, en fournissant le chemin d’accès complet. Nous allons aborder les détails de l’exemple.
En guise de remarque, vous vous demandez peut-être s’il s’agit d’un risque de sécurité que les applications peuvent ajouter et supprimer des applications de la liste des exceptions, ou peut-être que vous pensez que le plus grand risque est que les applications peuvent désactiver complètement le pare-feu. Pour effectuer ces exploits, l’application doit disposer de privilèges d’administrateur. Si vous avez du code malveillant s’exécutant en mode administrateur sur votre système, le jeu est déjà terminé et le pirate a déjà gagné. La capacité du pirate à désactiver le pare-feu mériterait peu plus qu’une note de bas de page.
Les applications héritées, y compris les applications installées avant la mise à niveau de l’utilisateur vers Windows XP SP2, sont gérées avec la fenêtre contextuelle Liste des exceptions (voir la figure 1). Cette boîte de dialogue indique quand une application tente d’ouvrir un port pour le trafic entrant , soit lors de l’appel de bind() avec un port non nul pour UDP, soit accept() pour le protocole TCP/IP. Vous devez être en cours d’exécution en tant qu’administrateur pour débloquer des applications, tandis que « Demander à moi plus tard » interdit cette fois-ci, mais demande à nouveau la prochaine fois.
Il s’agit d’une boîte de dialogue modale système non bloquante. Lors de l’exécution d’une application Microsoft Direct3D en plein écran, la boîte de dialogue est en dessous ; et l’utilisateur peut ensuite le gérer lorsque l’application quitte le mode plein écran ou les onglets de remplacement au bureau. Toutefois, il n’est pas toujours évident pour l’utilisateur que cette boîte de dialogue s’affiche lorsqu’un jeu est en cours d’exécution en plein écran. Il est donc important d’éviter d’afficher cette boîte de dialogue à l’aide de INetFwAuthorizedApplications interface, comme indiqué ci-dessous.
Figure 1. Boîte de dialogue Contextuelle Liste des exceptions
boîte de dialogue de liste des exceptions
Vous remarquerez que la fenêtre contextuelle connaît le nom et l’éditeur de l’application. Il n’y a pas de magie ici : elle est extraite des informations de version de l’exécutable. Ces informations sont un outil important d’administration du système ; il est même utilisé pour le travail de compatibilité des applications en cours. Certaines applications négligent de conserver ces informations de version up-to-date.
Les utilisateurs peuvent également ajouter leurs applications via l’interface utilisateur (interface utilisateur) (voir la figure 2)
Figure 2. Configuration du pare-feu
de pare-feu
Figure 3. Ajout d’un programme à la liste des exceptions de pare-feu
Le meilleur scénario consiste à effectuer des ajouts et des suppressions de la liste d’exceptions automatisées. Le meilleur moment pour effectuer ces ajouts et suppressions est pendant le processus d’installation et de désinstallation. L’ajout ou la suppression de la liste d’exceptions de pare-feu nécessite des privilèges d’administrateur. Veillez donc à tenir compte de ce problème.
Utilisation du Pare-feu Windows
Là encore, la plupart des jeux doivent uniquement être ajoutés à la liste des exceptions de pare-feu s’ils peuvent fonctionner en tant que serveur ou s’ils implémentent un protocole de communication pair à pair. L'FirewallInstallHelper.dll est un exemple de DLL qui peut être appelée à partir d’un programme d’installation. La source est fournie si vous souhaitez intégrer la source directement dans votre propre application. L’exemple est disponible ici :
Lime | |
---|---|
source : | (Racine du SDK)\Samples\C++\Misc\FirewallInstallHelper |
exécutable : | (Racine du KIT SDK)\Samples\C++\Misc\Bin\<arch>\FirewallInstallHelper.dll |
Les fonctions exportées par cette DLL sont les suivantes :
-
AddApplicationToExceptionListW
-
Cette fonction ajoute une application à la liste d’exceptions. Il prend un chemin complet vers l’exécutable et un nom convivial qui apparaîtra dans la liste des exceptions de pare-feu. Cette fonction nécessite des privilèges d’administrateur.
-
AddApplicationToExceptionListA
-
Version ANSI de AddApplicationToExceptionListW
-
RemoveApplicationFromExceptionListW
-
Cette fonction supprime l’application de la liste d’exceptions. Il prend un chemin d’accès complet à l’exécutable. Cette fonction nécessite des privilèges d’administrateur
-
RemoveApplicationFromExceptionListA
-
Version ANSI de RemoveApplicationFromExceptionListW
-
CanLaunchMultiplayerGameW
-
Cette fonction indique si l’application a été désactivée ou supprimée de la liste des exceptions. Il doit être appelé chaque fois que le jeu est exécuté. La fonction prend un chemin d’accès complet à l’exécutable. Cette fonction ne nécessite pas de privilèges d’administrateur.
-
CanLaunchMultiplayerGameA
-
Version ANSI de CanLaunchMultiplayerGameW
-
SetMSIFirewallProperties
-
Appelez-le uniquement si vous utilisez des actions personnalisées dans Windows Installer. Pour plus d’informations, voir ci-dessous.
-
AddToExceptionListUsingMSI
-
Appelez-le uniquement si vous utilisez des actions personnalisées dans Windows Installer. Pour plus d’informations, voir ci-dessous.
-
RemoveFromExceptionListUsingMSI
-
Appelez-le uniquement si vous utilisez des actions personnalisées dans Windows Installer. Pour plus d’informations, voir ci-dessous.
Les sections suivantes décrivent des méthodes spécifiques d’appel des fonctions DLL exportées à partir de ce FirewallInstallHelper à partir d’un package InstallShield, Wise ou Windows Installer. Toutes les méthodes affichent les mêmes résultats et il incombe au développeur de déterminer la méthode à implémenter.
Intégration à l’aide d’InstallShield InstallScript
Une autre méthode d’utilisation des API de pare-feu consiste à ajouter les appels de fonction à un InstallShield InstallScript. Les étapes nécessaires à l’intégration sont assez simples :
Ouvrez un projet InstallScript dans l’éditeur InstallShield.
Ajoutez le FirewallInstallHelper.dll au projet en tant que fichier de support.
- Sous l’onglet Assistant Projet, ouvrez l’onglet Fichiers d’application.
- Cliquez sur le bouton Ajouter des fichiers pour ajouter des fichiers au dossier cible de l’application.
- Accédez au FirewallInstallHelper.dll que vous avez créé ou utilisez celui fourni dans le Kit de développement logiciel (SDK) DirectX et ajoutez-le au projet.
Ajoutez InstallScript au projet.
- Ouvrez la vue Concepteur d’installation, puis cliquez sur le comportement et la logique | InstallScript
- Cliquez sur le fichier InstallScript (généralement setup.rul) pour l’ouvrir dans l’éditeur
- Collez le code suivant dans le fichier 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;
- Modifiez les commentaires TODO avec le nom de l’application qui s’affiche dans la liste des exceptions du pare-feu et le chemin d’accès au fichier exécutable du jeu par rapport au répertoire d’installation.
Intégration à Wise pour Windows Installer
Pour effectuer l’intégration à Wise pour Windows Installer, ces étapes doivent être effectuées :
Ouvrez votre projet Wise pour Windows Installer.
Sélectionnez l’onglet « Expert d’installation » en bas.
Cliquez sur Fichiers et ajoutez le FirewallInstallHelper.dll à partir du DXSDK au répertoire d’installation du jeu.
Sélectionnez l’onglet « Script MSI » en bas.
Sélectionnez l’onglet « Exécuter immédiatement » en bas.
Après CostFinalize, ajoutez une action « Set Property » qui définit FULLPATH sur « [INSTALLDIR]relative path to exécutable from install directory ». Par exemple, « [INSTALLDIR]game.exe» sans guillemets
Sélectionnez l’onglet « Exécuter différé » en bas.
Après PublishProduct, ajoutez une instruction « If » avec la condition « NOT Installed » (respectant la casse).
Dans le bloc If, ajoutez une action « Appeler une DLL personnalisée à partir de la destination ».
- Définissez le champ Fichier DLL sur « [INSTALLDIR]FirewallInstallHelper.dll».
- Définissez le champ Nom de la fonction sur « AddApplicationToExceptionListA ».
- Ajoutez un paramètre avec le type « pointeur de chaîne », la source de valeur « Property » et le nom de propriété « FULLPATH ».
- Ajoutez un deuxième paramètre avec le type « pointeur de chaîne », la source de valeur « Constante » et définissez la valeur constante sur le nom d’application convivial que vous souhaitez afficher dans la liste des exceptions de pare-feu.
- Fermez le bloc If en ajoutant une instruction « End ».
Juste au-dessus de l’action RemoveFiles près de la partie supérieure, ajoutez un autre bloc If, avec la condition « REMOVE~= » ALL » (respectant la casse et sans les guillemets externes).
Dans le deuxième bloc If, ajoutez une action « Appeler une DLL personnalisée à partir de la destination ».
- Définissez le champ Fichier DLL sur « [INSTALLDIR]FirewallInstallHelper.dll».
- Définissez le champ Nom de la fonction sur « RemoveApplicationFromExceptionListA ».
- Ajoutez un paramètre avec le type « pointeur de chaîne », la source de valeur « Property » et le nom de propriété « FULLPATH ».
- Fermez le deuxième bloc If en ajoutant une instruction « End ».
Intégration à Windows Installer
Pour s’intégrer à Windows Installer au niveau supérieur, ces étapes doivent être effectuées. Elles seront expliquées en détail ci-dessous :
- Ajoutez 2 propriétés « FriendlyNameForFirewall » et « RelativePathToExeForFirewall », comme décrit ci-dessous.
- Après l’action CostFinalize, appelez « SetMSIFirewallProperties » dans une action personnalisée immédiate pour définir les propriétés MSI appropriées pour les autres actions personnalisées.
- Pendant l’installation après l’action InstallFiles, appelez une action personnalisée différée qui utilise la fonction « AddToExceptionListUsingMSI » de FirewallInstallHelper.
- Lors de la désinstallation après l’action InstallFiles, appelez une action personnalisée différée qui utilise la fonction « RemoveFromExceptionListUsingMSI » de FirewallInstallHelper.
- Lors de la restauration, appelez une action personnalisée différée qui appelle également la fonction « RemoveFromExceptionListUsingMSI » de FirewallInstallHelper.
Voici les étapes nécessaires pour ce faire à l’aide d’un éditeur MSI tel que Orca trouvé dans le Kit de développement logiciel (SDK) de plateforme. Notez que certains éditeurs ont des Assistants qui simplifient certaines des étapes suivantes :
Ouvrez le package MSI dans Orca.
Ajoutez les éléments suivants à la table binaire :
Nom Données PARE-FEU Pointez-le vers la FirewallInstallHelper.dll. Ce fichier sera incorporé dans le package MSI afin que vous deviez effectuer cette étape chaque fois que vous recompilez FirewallInstallHelper.dll. Ajoutez ce qui suit à la table CustomAction :
Action Type Source Cible FirewallSetMSIProperties msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue = 65 PARE-FEU SetMSIFirewallProperties FirewallAdd msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3137 PARE-FEU AddToExceptionListUsingMSI FirewallRemove msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3137 PARE-FEU RemoveFromExceptionListUsingMSI FirewallRollBackAdd msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeRollback + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3393 PARE-FEU RemoveFromExceptionListUsingMSI FirewallRollBackRemove msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeRollback + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3393 PARE-FEU AddToExceptionListUsingMSI Ajoutez ce qui suit à la table InstallExecuteSequence :
Action Condition Séquence Notes FirewallSetMSIProperties 1010 Cela se passe peu après CostFinalize. FirewallAdd NON installé 4021 Cette action personnalisée se produit uniquement lors d’une nouvelle installation. Le numéro de séquence place l’action après InstallFiles et après les restaurations. FirewallRollBackAdd NON installé 4020 Cette action personnalisée se produit uniquement lorsqu’une nouvelle installation est annulée. Le numéro de séquence place l’action après InstallFiles et avant l’action Ajouter personnalisée. FirewallRemove Installé 3461 Cette action personnalisée se produit uniquement lors de la désinstallation. Le numéro de séquence place l’action directement avant RemoveFiles et après les restaurations. FirewallRollBackRemove NON installé 3460 Cette action personnalisée se produit uniquement lorsqu’une désinstallation est annulée. Le numéro de séquence place l’action directement avant RemoveFiles et avant l’action Supprimer personnalisée. Ajoutez les éléments suivants à la table Property :
Propriété Valeur FriendlyNameForFirewall Doit être le nom de la liste d’exceptions qui s’affiche. Par exemple, « Exemple de jeu » RelativePathToExeForFirewall Doit être l’exécutable installé du jeu. Par exemple, «ExampleGame.exe»
Pour plus d’informations sur Windows Installer, consultez Windows Installer.
Recommandations
Le pare-feu est là pour rester. Ces recommandations donnent à vos clients une bonne expérience de pare-feu avec votre jeu Windows :
- N’indiquez pas aux utilisateurs de désactiver le pare-feu pour jouer à votre jeu. Cela rend l’ensemble de la machine vulnérable même quand ils ne jouent pas à votre jeu.
- Rendez la configuration du pare-feu transparente pour vos utilisateurs. Ajoutez votre application à la liste des exceptions pendant l’installation et supprimez votre application de la liste des exceptions pendant l’installation.
- Donnez des commentaires à l’utilisateur si le mode multijoueur est bloqué par l’état du pare-feu. Par exemple, désactivez les fonctionnalités de mise en réseau si elles ne fonctionnent pas, car l’application n’est pas autorisée ou parce que le système est en mode « aucune exception ».