この記事では、Windows ファイアウォールについて説明します。Windows ファイアウォールが存在する理由、その機能、その方法について説明します。 最も重要なのは、ファイアウォールで正常に動作するようにゲームを構成する方法について説明することです。
内容:
- ファイアウォールとは
- ゲームが影響を受けるかどうかを確認するにはどうすればよいですか?
- Windows XP SP2 の前にファイアウォールを する
- Windows XP SP2 ファイアウォールの方が
- Windows ファイアウォール の操作
- InstallShield InstallScript を使用した統合の
- Windows インストーラー の Wise への統合
- Windows インストーラーへの統合
- 推奨事項の
ファイアウォールとは
ファイアウォールは、ネットワーク ベースの侵入に対するバリアを提供します。 これは、要請されていない着信トラフィックをブロックし、インターネット制御メッセージ プロトコル (ICMP) 要求を拒否することで、システムをインターネット上でほとんど非表示にします。 つまり、ping と tracert は機能しません。 ファイアウォールでは、無効なパケットも検索され、拒否されます。
このバリアは、日和見攻撃を防ぎます。 攻撃は、同じ脆弱性を持つ多くのシステムを見つけることによって広がります。 ファイアウォールは、現在使用されていない機能の "応答不可" 記号を設定することで、多くの攻撃を阻止できます。攻撃は無視され、ホームに攻撃されません。 Windows ファイアウォールの重要な利点は、使用されていない機能とアプリケーションを攻撃の手段にできないことです。
ユーザーは、必要なアプリケーションと機能を特定し、ネットワークに対して開く必要があるシステムを構成します。 これは、アプリケーションがインストールされている場合、またはアプリケーションがネットワークに対して自身を開こうとしたときに発生します。
ゲームが影響を受けるかどうかを確認するにはどうすればよいですか?
Windows XP SP2 が到着すると、Windows ファイアウォールが広く展開されています。 すべてのマルチプレイヤー Windows ゲームは、ある程度影響を受けています。 通常、クライアントの状態は良好ですが、ピアツーピアのサーバー、ホスト、ピアはすべて、動作を継続するように構成されたファイアウォールを必要とします。 具体的には、受信要求されていないトラフィックが破棄されます。 ファイアウォールは、パケットの内容と最近のネットワーク アクティビティに基づいて、ネットワーク トラフィック フィルター パケットをインターセプトします。 ファイアウォールはコンテンツとアクティビティを使用して、パケットの転送またはドロップを決定します。 ファイアウォールが適切に構成されると、ゲームは以前と同様に受信の未承諾トラフィックを受け入れできるようになります。
着信の未承諾トラフィックを持っているのは誰ですか?
- クライアント/サーバー: すべての参加者が中央サーバーに接続します。 中央サーバーは、受信要求されていないトラフィックを持つサーバーです。 サーバーに接続しているクライアントはリターン トラフィックを要求しています。これは想定されており、クライアントの規則に従っている場合はファイアウォールを通過できます。 クライアント トラフィックがファイアウォールを通過できるように、一方的なトラフィックを受け入れるように中央サーバーを構成する必要があります。
- 大規模マルチプレイヤー (MMP): すべての参加者がデータ センターに接続されます。 これは、データ センターに受信未承諾のトラフィックが含まれるので、複雑なクライアント/サーバー関係に相当します。 参加者はクライアントであり、一般に、未承諾のトラフィックを受け入れる必要はありません。
- ピアツーピア。すべての参加者が直接相互に接続されている場合: すべての参加者は、グループに参加する新しいプレイヤーからの未承諾のトラフィックを受け入れる準備ができている必要があります。 ある意味では、各参加者はホストとして機能する必要があるため、それらはすべてホストであるかのように構成する必要があります。
一般に、クライアントは良好な形をしています。 送信ユーザー データグラム プロトコル (UDP) メッセージとそれらのメッセージへのタイムリーな応答と同様に、送信伝送制御プロトコル/インターネット プロトコル (TCP/IP) 接続は正常に動作します。ファイアウォールは、応答を期待して各送信メッセージの後に 90 秒間ポートを開いたままにします。
Windows XP SP2 より前のファイアウォール
Windows XP および Windows Server 2003 のインターネット接続ファイアウォール (ICF) はステートフル パケット フィルターであり、インターネット プロトコルバージョン 4 (IPv4) とインターネット プロトコル バージョン 6 (IPv6) の両方を処理します。 ただし、既定ではオンではなく、サードパーティのネットワーク スタックはサポートされていません。そのうち、国内電話会社を含む大規模なインターネット プロバイダーなど、世界中にかなりの数があります。
Windows XP SP2 を使用していない場合は、ICF をオンにすることを強くお勧めします。 インターネット接続ファイアウォール (ICF) は、パケット フィルターをオーバーライドするためのポート マッピングを提供します。 基本的には、開くポートを指定し、閉じるまで開いたままです。 ユーザーが閉じる前に再起動した場合は、特に閉じられるまで開いたままです。 ファイアウォールの制御とポート マッピングの管理は、INetSharingManager(IPv4) と INetFwV6Mgr(IPv6)経由で行われます。
Windows XP SP2 用 Windows ファイアウォールは、サード パーティのネットワーク スタックをサポートし、よりインテリジェントにポートを処理する包括的なソリューションです。ポートは、必要なアプリケーションがまだアクティブである限り開いたままに保たれます。
Windows XP SP2 ファイアウォールの方が優れている
Windows XP SP2 では、セキュリティの選択肢と設定が前面に表示されます。 目標は、既定で保護し、ユーザーがコンピューターで実行できるアプリケーションに関する情報に基づいて選択できるようにすることです。
新しい Windows ファイアウォールは、Windows XP SP2 と Windows Server 2003 Service Pack 1 (SP1) の両方で使用できます。 ICF と同様に、IPv4 と IPv6 の両方をサポートするソフトウェア ファイアウォールですが、ICF の Windows ファイアウォールとは異なります。
- システムのブート時の保護を備え、起動時の脆弱性の小さなウィンドウを排除します。
- サード パーティのネットワーク スタックをサポートします。
- 要求されていないすべての受信パケットをブロックする "例外なしでオン" モードを持つ。 これは、空港やコーヒーショップなど、パブリック ネットワークを使用している場合に最適です。
"例外なしでオン" モードでは、すべての静的ホールが閉じられます。 静的ホールを開く API 呼び出しは許可されますが、遅延されます。つまり、ファイアウォールが通常の操作に戻るまで適用されません。 アプリケーションによるリッスン要求もすべて無視されます。 送信接続は引き続き成功します。
新しいアプリケーションの場合は、インストール時にアプリケーションを "例外リスト" に追加します。 INetFwAuthorizedApplications インターフェイスを使用してアプリケーションを追加し、完全なパスを指定できます。 サンプルの詳細について説明します。
補足として、アプリケーションがユーザーの介入を例外リストに追加して削除できるセキュリティ リスクなのか、またはアプリケーションがファイアウォールを完全に無効にできるリスクが大きいと考えるかもしれません。 これらの機能を実行するには、アプリケーションに管理者特権が必要です。 悪意のあるコードがシステムの管理者モードで実行されている場合、ゲームは既に完了しており、ハッカーは既に勝っています。 ハッカーがファイアウォールを無効にする機能は、脚注に過すメリットはほとんどありません。
ユーザーが Windows XP SP2 にアップグレードする前にインストールされたアプリケーションを含むレガシ アプリケーションは、[例外一覧] ポップアップで処理されます (図 1 を参照)。 このダイアログは、アプリケーションが受信トラフィック用のポートを開こうとするタイミングを示します。UDP の場合は 0 以外のポートで bind() を呼び出すとき、TCP/IP プロトコルの場合は accept() を呼び出すときです。 "ブロック解除" アプリケーションを "ブロック解除" するには管理者として実行する必要がありますが、今回は "後で確認" を許可しませんが、次回はもう一度要求します。
これは、非ブロッキングのシステム モーダル ダイアログ ボックスです。 全画面表示の Microsoft Direct3D アプリケーションを実行すると、ダイアログが下に表示されます。ユーザーは、アプリケーションが全画面表示モードを終了したとき、またはデスクトップに戻る alt タブを処理できます。 ただし、ゲームが全画面表示を実行しているときにこのダイアログが表示されるとは限りません。そのため、以下で説明するように、INetFwAuthorizedApplications インターフェイスを使用してこのダイアログを表示しないようにすることが重要です。
図 1. [例外リスト] ポップアップ ダイアログ
ポップアップには、アプリケーションの名前と発行元が認識されていることがわかります。 ここに魔法はありません - 実行可能ファイルのバージョン情報から取得されます。 この情報は、重要なシステム管理ツールです。これは、継続的なアプリケーション互換性作業にも使用されます。 一部のアプリケーションでは、このバージョン情報を -date up-to保持することを怠っています。
ユーザーは、ユーザー インターフェイス (UI) を使用してアプリケーションを追加することもできます (図 2 を参照)
図 2. ファイアウォールの構成
ファイアウォール
図 3. ファイアウォール例外リストへのプログラムの追加
ファイアウォール例外リストにプログラムを追加する
最適なシナリオは、例外リストからの追加と削除を自動化することです。 これらの追加と削除を実行する最適なタイミングは、インストールとアンインストールのプロセス中です。 ファイアウォール例外リストの追加または削除には管理者特権が必要なので、必ずこのことを考慮してください。
Windows ファイアウォールの操作
ここでも、ほとんどのゲームは、サーバーとして機能できる場合、またはピアツーピア通信プロトコルを実装している場合にのみ、ファイアウォール例外リストに追加する必要があります。 FirewallInstallHelper.dll は、インストーラーから呼び出すことができるサンプル DLL です。 ソースを独自のアプリケーションに直接統合する場合は、ソースが提供されます。 サンプルは次の場所にあります。
ファイル | |
---|---|
ソース: | (SDK ルート)\Samples\C++\Misc\FirewallInstallHelper |
実行可能ファイル: | (SDK ルート)\Samples\C++\Misc\Bin\<arch>\FirewallInstallHelper.dll |
この DLL によってエクスポートされる関数は次のとおりです。
-
AddApplicationToExceptionListWの
-
この関数は、例外リストにアプリケーションを追加します。 実行可能ファイルへの完全なパスと、ファイアウォールの例外リストに表示されるフレンドリ名を受け取ります。 この関数には管理者特権が必要です。
-
AddApplicationToExceptionListAの
-
AddApplicationToExceptionListW の ANSI バージョン
-
RemoveApplicationFromExceptionListWの
-
この関数は、例外リストからアプリケーションを削除します。 実行可能ファイルへの完全なパスが取り込まれます。 この関数には管理者特権が必要です
-
RemoveApplicationFromExceptionListAの
-
RemoveApplicationFromExceptionListW の ANSI バージョン
-
CanLaunchMultiplayerGameW
-
この関数は、アプリケーションが無効になっているか、例外リストから削除されたかどうかを報告します。 これは、ゲームが実行されるたびに呼び出される必要があります。 この関数は、実行可能ファイルへの完全なパスを受け取ります。 この関数には管理者特権は必要ありません。
-
CanLaunchMultiplayerGameA
-
ANSI バージョンの CanLaunchMultiplayerGameW
-
SetMSIFirewallPropertiesの
-
これは、Windows インストーラーでカスタム アクションを使用している場合にのみ呼び出します。 詳細については、以下を参照してください。
-
AddToExceptionListUsingMSIの
-
これは、Windows インストーラーでカスタム アクションを使用している場合にのみ呼び出します。 詳細については、以下を参照してください。
-
RemoveFromExceptionListUsingMSIの
-
これは、Windows インストーラーでカスタム アクションを使用している場合にのみ呼び出します。 詳細については、以下を参照してください。
以降のセクションでは、InstallShield、Wise、または Windows インストーラー パッケージ内からこの FirewallInstallHelper からエクスポートされた DLL 関数を呼び出す特定のメソッドについて説明します。 すべてのメソッドは同じ結果をレンダリングし、実装するメソッドを決定するのは開発者の判断です。
InstallShield InstallScript を使用した統合
ファイアウォール API を使用する別の方法は、InstallShield InstallScript に関数呼び出しを追加することです。 統合に必要な手順は非常に簡単です。
InstallShield エディターで InstallScript プロジェクトを開きます。
FirewallInstallHelper.dll をサポート ファイルとしてプロジェクトに追加します。
- [プロジェクト アシスタント] タブで、[アプリケーション ファイル] タブを開きます。
- [ファイルの追加] ボタンをクリックして、アプリケーション ターゲット フォルダーにファイルを追加します。
- DirectX SDK で提供されている FirewallInstallHelper.dll を参照するか、または使用してプロジェクトに追加します。
InstallScript をプロジェクトに追加します。
- インストール デザイナー ビューを開き、動作とロジック |InstallScript
- InstallScript ファイル (通常は setup.rul) をクリックしてエディターで開きます
- 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;
- ファイアウォール例外リストに表示されるアプリケーション名と、インストール ディレクトリを基準としたゲーム実行可能ファイルへのパスを使用して、TODO コメントを変更します。
Wise for Windows インストーラーへの統合
Wise for Windows インストーラーと統合するには、次の手順を実行する必要があります。
Wise for Windows インストーラー プロジェクトを開きます。
下部にある [インストール エキスパート] タブを選択します。
[ファイル] をクリックし、DXSDK からゲームのインストール ディレクトリに FirewallInstallHelper.dll を追加します。
下部にある [MSI スクリプト] タブを選択します。
下部の [即時実行] タブを選択します。
CostFinalize の後に、FULLPATH を "[INSTALLDIR] の相対パスをインストール ディレクトリから実行可能ファイルに設定する "プロパティの設定" アクションを追加します。 たとえば、引用符のない "[INSTALLDIR]game.exe" とします。
下部の [遅延実行] タブを選択します。
PublishProduct の後に、条件 "NOT Installed" (大文字と小文字が区別されます) を含む "If ステートメント" を追加します。
If ブロック内で、"Call Custom DLL from Destination" アクションを追加します。
- DLL ファイル フィールドを "[INSTALLDIR]FirewallInstallHelper.dll." に設定します。
- [関数名] フィールドを "AddApplicationToExceptionListA" に設定します。
- 型 "string pointer"、値ソース "Property"、およびプロパティ名 "FULLPATH" を持つパラメーターを追加します。
- "string pointer" 型の 2 つ目のパラメーター、値ソース "Constant" を追加し、定数値をファイアウォール例外リストに表示するフレンドリ アプリケーション名に設定します。
- "End ステートメント" を追加して If ブロックを閉じます。
上部付近の RemoveFiles アクションのすぐ上に、条件が "REMOVE~="ALL" (大文字と小文字が区別され、外側の引用符なし) である別の If ブロックを追加します。
2 番目の If ブロック内に、"Call Custom DLL from Destination" アクションを追加します。
- DLL ファイル フィールドを "[INSTALLDIR]FirewallInstallHelper.dll." に設定します。
- [関数名] フィールドを "RemoveApplicationFromExceptionListA" に設定します。
- 型 "string pointer"、値ソース "Property"、およびプロパティ名 "FULLPATH" を持つパラメーターを追加します。
- "End ステートメント" を追加して、2 番目の If ブロックを閉じます。
Windows インストーラーへの統合
Windows インストーラーと高レベルで統合するには、次の手順を実行する必要があります。 これらは以下で詳しく説明します。
- 次に説明するように、2 つのプロパティ "FriendlyNameForFirewall" と "RelativePathToExeForFirewall" を追加します。
- CostFinalize アクションの後、すぐにカスタム アクションで "SetMSIFirewallProperties" を呼び出して、他のカスタム アクションに適切な MSI プロパティを設定します。
- InstallFiles アクションの後のインストール時に、FirewallInstallHelper の "AddToExceptionListUsingMSI" 関数を使用する遅延カスタム アクションを呼び出します。
- InstallFiles アクション後のアンインストール時に、FirewallInstallHelper の "RemoveFromExceptionListUsingMSI" 関数を使用する遅延カスタム アクションを呼び出します。
- ロールバック中に、FirewallInstallHelper の "RemoveFromExceptionListUsingMSI" 関数も呼び出す遅延カスタム アクションを呼び出します。
プラットフォーム SDK で見つかった Orca などの MSI エディターを使用してこれを行うために必要な手順を次に示します。 一部のエディターには、次の手順の一部を簡略化するウィザードがあることに注意してください。
Orca で MSI パッケージを開きます。
バイナリ テーブルに次のコードを追加します。
名前 データ ファイアウォール FirewallInstallHelper.dllをポイントします。 このファイルは MSI パッケージに埋め込まれるので、FirewallInstallHelper.dll再コンパイルするたびにこの手順を実行する必要があります。 CustomAction テーブルに次のコードを追加します。
アクション 種類 源 ターゲット FirewallSetMSIProperties msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue = 65 ファイアウォール SetMSIFirewallProperties FirewallAdd msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3137 ファイアウォール AddToExceptionListUsingMSI FirewallRemove msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3137 ファイアウォール RemoveFromExceptionListUsingMSI FirewallRollBackAdd msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeRollback + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3393 ファイアウォール RemoveFromExceptionListUsingMSI FirewallRollBackRemove msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeRollback + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3393 ファイアウォール AddToExceptionListUsingMSI InstallExecuteSequence テーブルに次のコードを追加します。
アクション 条件 順序 筆記 FirewallSetMSIProperties 1010 これは CostFinalize の直後に発生します。 FirewallAdd インストールされていません 4021 このカスタム アクションは、新規インストール時にのみ行われます。 シーケンス番号は、InstallFiles の後とロールバック後にアクションを配置します。 FirewallRollBackAdd インストールされていません 4020 このカスタム アクションは、新しいインストールが取り消された場合にのみ発生します。 シーケンス番号は、InstallFiles の後、およびカスタムアクションの追加の前にアクションを配置します。 FirewallRemove インストール 3461 このカスタム アクションは、アンインストール時にのみ行われます。 シーケンス番号は、RemoveFiles の直前とロールバック後にアクションを配置します。 FirewallRollBackRemove インストールされていません 3460 このカスタム アクションは、アンインストールが取り消された場合にのみ発生します。 シーケンス番号は、RemoveFiles の直前と Remove カスタム アクションの前にアクションを配置します。 Property テーブルに次のコードを追加します。
財産 価値 FriendlyNameForFirewall 例外リストに表示される名前である必要があります。 たとえば、"Example Game" RelativePathToExeForFirewall ゲームのインストール済み実行可能ファイルである必要があります。 たとえば、"ExampleGame.exe"
Windows インストーラーの詳細については、「Windows インストーラーの」を参照してください。
推奨 事項
ファイアウォールはここに残っています。 これらの推奨事項により、お客様は Windows ゲームで優れたファイアウォール エクスペリエンスを実現できます。
- ファイアウォールを無効にしてゲームをプレイするようにユーザーに指示しないでください。 これにより、ゲームをプレイしていない場合でも、マシン全体が脆弱になります。
- ユーザーのファイアウォール構成をシームレスにします。 インストール時にアプリケーションを例外リストに追加し、インストール時に例外リストからアプリケーションを削除します。
- マルチプレイヤーがファイアウォールの状態によってブロックされている場合は、ユーザーにフィードバックを送信します。 たとえば、アプリケーションが許可されていないか、システムが "例外なし" モードであるために機能しない場合は、ネットワーク機能を無効にします。