IPv4 Address and Domain Restrictions

今回はアクセス禁止の指定方法を紹介します。

このようなページがあります。これにアクセス禁止設定を施します。

IPv4 Address and Domain Restrictions のアイコンをダブルクリック。

右側ペインで Add Deny Entry をクリック。

何か違いますね。DNS 名での指定が出来ません。

   Edit Feature Settings をクリック。

Enable domain name restrictions にチェックを入れる。

Restricting access by domain name requires a DNS reverse lookup on each connection. This is a very expensive operation and will dramatically affect server performance. Are you sure you want to enable restrictions based on domains?

パフォーマンスに多大な影響あるからやめとけ、、、ということでしょうか?

でもやる!

 

DNS 名を指定できるようになりました。ソネットからはアクセス禁止!!!!にします。

効果ありです。

 

↓ 生成された web.config の内容です。

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <security>
            <ipSecurity enableReverseDns="true">
                <add domainName="*.so-net.ne.jp" allowed="false" />
            </ipSecurity>
        </security>
    </system.webServer>
</configuration>

Request Filtering

http://learn.iis.net/page.aspx/143/how-to-use-request-filtering/#FilterBasedFile

に書いてあるのを試しましょう。

 

対応するリファレンスは こちら

 

他人に見られたらマズいファイル (secret.txt) をサーバーにアップして数日放置してしまった!

ああよかった。secret.txt は保護されていました(・・・って嘘くさいストーリー)

 

8 行目に注目。こんな感じで .txt を保護してます。

1<?xml version="1.0" encoding="UTF-8"?>
2<configuration>
3    <system.webServer>
4        <directoryBrowse enabled="true" />
5        <security>
6            <requestFiltering>
7                <fileExtensions>
8                    <add fileExtension=".txt" allowed="false" />
9                </fileExtensions>
10            </requestFiltering>
11       </security>
12    </system.webServer>
13  </configuration>

 

 

IIS 7 マネージャにはこれに対応する GUI が存在しませんが、Administration Pack をサーバーに入れると、Request Filtering の GUI が追加されます。

IIS7 Administration Pack Technical Preview – Robert Lucero’s IIS Testing Blog

Here is a quick rundown of the added features:

  • ASP.NET Authorization Rules UI
  • ASP.NET Error Pages UI
  • Configuration Editor – Check out Script Generation
  • Database Manager – Manage your Database remotely through the IIS7 UI
  • FastCGI UI
  • IIS Reports – Don’t want to use log parser? Try out the extensibility features here
  • Request Filtering – Lock down your server using our new UI module

 

文句言っても仕方ないけど、上から4 番目のDatabase Manager はまだまだ改良して欲しい。

Directory Browsing

 

以前の IIS でいうところの "ディレクトリの参照" を IIS 7 で実現しましょう。

 

Directory Browsing アイコンをダブルクリック

右側ペインで Enable をクリック

できました!

 

以下に示すのは生成された web.config です。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="true" />
    </system.webServer>
</configuration>

統合パイプラインを使い、.htm や .png まで asp.net フォーム認証の対象にする

 

IIS.net Learn IIS7 How to Take Advantage of the IIS 7.0 Integrated Pipeline Building and Running

を試します。

 

 

クラシック モード

まずはクラシック モードのプールで動かします。

(1) ~/Default.aspx を要求すると、login.aspx に飛ばされます。

 

(2) ~/iisstart.htm を要求すると、login.aspx に飛ばされません。

 

 

 

 

統合モード

クラシックではなく統合モードのプールを使うよう設定を変えます。

(3) ~/iisstart.htm を要求すると login.aspx に飛ばされます。

(4) ~/welcom.png を要求しても login.aspx に飛ばされます。

 

たしか、IIS 6.0 で (3) (4) を実現するには、aspnet_isapi.dll ISAPI 拡張をワイルド カード アプリケーション マップするんですよね・・・今は手元に IIS 6.0 が無いので試しません。

 

 

おまけ

配置後、Providers アイコンをダブルクリックすると一覧に AspNetReadOnlyXmlMembershipProvider があります。

.NET Users アイコンをダブルクリックするとエラーが出ます。プロバイダは GAC に入れないとダメということ?

.NET Users アイコン

.NET Users アイコンをダブルクリック

Medium で縛ってあるので、.mdf 自動生成できない?

手元で .mdf と .ldf を作って、サーバーにアップロードしました。

あらかじめ .mdf を設置してもダメ。

  サーバーで一番偉い人で操作してもダメ。でも、エラー メッセージがヒントな感じ。

手元で asp.net web サイト管理ツールを使い、事前に仕込みを行います。

仕込み済みの aspnetdb をサーバーにアップロード。

web.config 中の接続文字列を書き換え。database.mdf じゃなく、aspnetdb.mdf を使うように。

それでもダメですか。

サーバー側で一番偉い人で試すと、ユーザーの一覧が表示されました。

 

・・・うまくいかないですね。

ASP.NET HTTP モジュール

Visual C# .NET を使用して ASP.NET HTTP モジュールを作成する方法

を試します。

 

普通に動かすと 500 番のエラーになります。

サーバー上の IE ブラウザで見ると、詳細が出てます。

HTTP Error 500.22 – Internal Server Error

An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode.

 

 

(対処方法 1)

web.config を書き換えます。

———————————————– 書き換え前

<configuration>
   <system.web>
      <httpModules>
         <add name="MyModule" type="MyModule.SyncModule, MyModule" />
      </httpModules>
   </system.web>
</configuration>

 

———————————————– 書き換え後

<configuration>
    <system.webServer>
        <modules>
            <add name="MyModule" type="MyModule.SyncModule, MyModule" preCondition="managedHandler" />
        </modules>
    </system.webServer>
</configuration>

 

(対処方法 2)

web.config を書き換えるのが面倒なら、統合モードではなく、クラシック モードにします。

_i は統合モード用のプールで、_c がクラシック モード用のプールです。

 

参考

方法  IIS 7.0 の system.webServer セクションを構成する

マジメに探せばもっと色々と情報が転がってるはず・・・(探すの面倒だ)

失敗した要求トレース

失敗した要求トレース機能、FREB (Failed Request Error Buffering) ? (正式名称不明) を試します。

 

IIS 7.0 マネージャを開き、Failed Request Tracing Rules をダブルクリック。

右上の Add をクリック。

三秒を超える処理を拾いましょう。

四秒 Sleep するページを書いて、サーバーに配置。ページをブラウザで要求。

FTP で /FailedReqLogFiles/W3SVCnnnnn フォルダを開き、.xml と .xsl を手元にダウンロード。

.xml ファイルを IE ブラウザで開くと色々と書いてます。

 

 

参考

柔軟性と機能性を大幅に高めたIIS 7.0(後編) - @IT

新WebサーバーIIS7.0、ついにサーバー運用環境へ の 「27. 失敗した要求トレース機能」