web-dev-qa-db-ja.com

IIS Expressで使用中のすべてのポートを許可するようにWindowsファイアウォールを構成する方法

このtechnetの記事私をそこに連れて行ったページ *についての私の理解は、Windowsファイアウォールを構成して、によって使用されているすべてのポートですべての受信トラフィックを許可できるということです指定された実行可能ファイル。

事実上の答えは「これをしないでください」である可能性が高いと思いますので、理解してください; VisualStudioとIIS Expressを仮想マシン内で実行していて、テスト目的でホストOSから接続できるようにしたいので、すべてを開くことによるセキュリティへの影響についてはあまり気にしません。 IIS Expressで使用されているポート。

プログラムを%ProgramFiles% (x86)\IIS Express\iisexpress.exeに設定してインバウンドルールを作成しました。これは、タスクマネージャーに従って実行される実行可能ファイルです。他のすべてのルール仕様は空のままです(任意のローカルアドレス、任意のリモートアドレス、およびローカルポート、任意のリモートポート、「任意の」許可されたユーザー、「任意の」許可されたコンピューター)。それでも、接続は、IIS Expressによって提供される特定のポートのルールがある場合にのみ機能します。

それは私の人生を楽にするので(そして、technetがそれがうまくいくはずだと言っているので、原則として)、私は作成するアプリごとにファイアウォールルールを追加する必要はありません。

*タスク「プログラムが必要なポートでインバウンドネットワークトラフィックをリッスンして受け入れることを許可するルールを作成します。」

9
user1039855

ここで発生している問題がいくつかあります。 1つは、_iisexpress.exe_は実際にはHTTPトラフィックのリッスンを担当するプロセスではないということです。その機能は_http.sys_ Windowsネットワークスタックのカーネルモード部分としてに実装されています。 (これはパフォーマンス上の理由で行われました。詳細については、 Introduction to IIS Architectures 。)を参照してください。したがって、_iisexpress.exe_のルールを作成しても機能しません。何でも。

次に、_http.sys_は、デフォルトでは、非管理者が他のコンピューターをリッスンするときに実行されているプログラムを許可しません。 WebMatrixを使用した外部トラフィックの提供 によると、管理コマンドプロンプトでこのコマンドを実行して、すべてのユーザーが_http.sys_を介して他のマシンをリッスンできるようにする必要があります。

_netsh http add urlacl url=http://MACHNAME:PORT/ user=everyone
_

MACHNAMEをサイトへの接続に使用されるホスト名に置き換え、PORTをトラフィックのポートに置き換えます。特定のホスト名の代わりに_*_を使用すると、すべての名前/インターフェイスでリッスンできることを読みましたが、個人的にテストしたわけではなく、一部のドキュメントでは代わりに_+_を使用しています。いずれの場合も、ACLを設定したら、portのインバウンドファイアウォールルールを作成できます。

参考資料:HTTPおよびHTTPSの構成

サイドコメント: 32ビットバージョンのプログラムファイルを指す実際の環境変数があります:%PROGRAMFILES(X86)%。 (ただし、パスは問題ではありませんでした。)

1
Ben N