IISを実行しているWebサーバーがあります。情報を追跡するために、共有ブログなどを実行したいと思います。セキュリティ上の問題から、その部分はローカルホストからのみ表示できるようにしたいので、ユーザーはリモートで使用する必要があります。
それで、私の質問を繰り返すために、ウェブサイトの一部をローカルホストからのみ表示できるようにすることはできますか?
IIS6 では、Web のプロパティを表示して、ディレクトリ セキュリティ タブをクリックできます。タブの中央にあるボタンをクリックして、IP とドメインの制限を編集します。このタブで、すべてのコンピューターを拒否として設定し、このサイトへのアクセスを許可する IP の例外を追加します。
IIS7 でこれを構成する方法がわかりません。見ましたが見つかりませんでした。見つかった場合は、この回答を編集します。
編集:IIS7の構成
コマンド ラインでこれを実行したい場合は、IIS 7 以降で動作するようです。
%windir%\system32\inetsrv\appcmd.exe set config "Default Web Site" -section:system.webServer/security/ipSecurity /+"[ipAddress='0',allowed='False']" /commit:apphost
%windir%\system32\inetsrv\appcmd.exe set config "Default Web Site" -section:system.webServer/security/ipSecurity /+"[ipAddress='127.0.0.1',allowed='True']" /commit:apphost
最初は、配布を容易にするために web.config でこれを行いたかったのですが、次のように動作するように見えました。
<security>
<ipSecurity allowUnlisted="false"> <!-- this line blocks everybody, except those listed below -->
<clear/> <!-- removes all upstream restrictions -->
<add ipAddress="127.0.0.1" allowed="true"/> <!-- allow requests from the local machine -->
</ipSecurity>
</security>
ただし、とにかく中央の IIS 構成で機能のロックを解除する必要があるため、最初のコマンドを使用して直接変更を行うよりも利点はありませんでした。
IIS の「ディレクトリ セキュリティ」を使用して 127.0.0.1 (localhost) 以外のすべての IP アドレスをブロックするという推奨事項に同意します。
とはいえ、ユーザーにリモート接続を要求するこの戦略が、どのようにしてより安全になるのか疑問に思っています。サーバー コンピューターで Windows の役割とアクセス許可を管理するよりも、標準の IIS 認証メカニズムを使用する方が、より安全 (かつ単純) ではないでしょうか?
許可されていないユーザーがアクセスしようとした場合に、正確に何をしたいかによって異なります。
特定のセクションを仮想ディレクトリとしてセットアップしてから、匿名ユーザーの表示を拒否することができます。ただし、ログインを求めるプロンプトが表示され、ログインできる場合はそれを見ることができます。
IIS MMC にあるオプションから判断すると、仮想ディレクトリに特定の IP 範囲のみがアクセスできるようにすることもできます。127.0.0.1 以外の全員をブロックできます。ただし、これは試していません。
特定の IP からサイトまたはフォルダーへのサイトまたはフォルダーへのアクセスを許可または拒否できます。IIS で、問題のサイトまたはフォルダーのプロパティに移動します。
(1) 「Diectory Security」タブをクリック
(2) 「IP アドレスとドメイン名の制限」フレームの下にある「編集」をクリックします。
(3) [Denied Access] をクリックします (これにより、IIS は、リストした IP 以外のすべての IP をブロックします)。
(4) 「追加...」をクリック
(5)「シングルコンピュータ」をクリック
(6) 127.0.0.1(ローカルホストのIP)を入力
ドメインはホスト ファイルを使用して簡単に偽造できるため、ここでは (前述のように) ドメイン名ではなく IP を使用することをお勧めします。
この .NET をページの上部に追加するだけです。
string MyWebServerName = currentContext.Request.ServerVariables["SERVER_NAME"];
if ( MyWebServerName == "127.0.0.1" || MyWebServerName == "localhost" )
{
// the user is local
}
else
{
// the user is NOT local
}