2013年2月25日月曜日

◆Contents(インターネットWEBサーバーガイドライン)

1章 IISをインストールする

2章 IISの動作を見てみる

3章 ページを公開する

4章 さまざまなサーバーの設定

5章 アクセス制限の仕組みを知ろう

6章 アプリケーションの実行環境を設定しよう

7章 IISの拡張機能を使おう

8章 SSLに対応しよう

9章 ログやトレースを活用しよう

10章 動作状態の確認と性能向上

11章 セキュリティ対策を考えよう

Appendix その他各種資料へのリンク

2013年2月17日日曜日

◆「失敗した要求のトレース」を使う

IISには「HTTPステータス」を条件としてトレースログを取得する機能がある。

エラーのアウトプットだけでなく、サーバーの内部でどのようにしてそのエラーが発生したのかをある程度探ることができる。

インストール方法(2012)
  • 「サーバーマネージャ」を起動する
  • 「役割と機能の追加」をクリック
    image
  • 「インストール種類の選択」で「役割ベースまたは機能ベースのインストール」を選択して「次へ」
  • 「対象サーバーの選択」画面でサーバーを選択して「次へ」
  • 「Webサーバー(IIS)」「Webサーバー」「状態と診断」「トレース」をチェックして「次へ」
    image
  • 「機能の選択」で「次へ」
  • 「インストールオプションの確認」画面で「インストール」をクリック
トレースを有効にする
  • 「IISマネージャ」を起動する
  • 画面左の「接続ペイン」で対象のサイト(ここでは「Default Web Site」)を選択
  • 画面右の「操作ペイン」で「失敗した要求のトレース」をクリックする
    image
  • 「Webサイトの失敗した要求トレース設定の編集」ダイアログで「有効にする」をチェックして「OK」
    image
トレース規則の設定
  • 「IISマネージャ」の「接続ペイン」で「Default Web Site」を選択
  • 「機能ビュー」で「失敗した要求のトレースの規則」をダブルクリック
    image
  • 「操作ペイン」で「追加」をクリック
    image
  • 「トレースするコンテンツの指定」で「すべてのコンテンツ」をチェックして「次へ」
    image
  • 「トレース条件の定義」で「状態コード」にトレースしたい「状態コード」を設定(ここでは404)を設定して「次へ」
    image
  • 「トレースプロバイダの選択」で「プロバイダー」を選択(ここでは「WWW Server」)し、「詳細ドロップダウン」に「詳細」を指定して「終了」
    image
確認
  • 存在しないファイルへアクセス(ex. http://localhost/hoge.html)
  • ログフォルダを開く(通常は、C:\inetpub\logs\FailedReqLogFiles\W3SVC1だが、「default Web site」でない場合、W3SVCの後はサイトIDが入るので確認する)
  • ログ(XMLファイル)をブラウザへドロップする
    image
  • さしあたって「Request Summary」タブの「See all events for the request」をクリックするとトレースの詳細が確認できる
    image

2013年2月16日土曜日

◆エラーページ設定の編集で「ロック違反」

IISのエラーページをカスタマイズしていたところ以下のようなエラーに遭遇した。
既定のエラーページを指定しただけなのだが・・・。

htmlファイル自体はロックされているわけではない。

image

調べてみると以下のような対策が載っていた。

  • 「IISマネージャ」を開く
  • 「接続ペイン」のツリーでルートノードを選択し、「機能ビュー」から「構成エディタ」をダブルクリックして起動する
    image
  • 表示された「構成エディタ」の「セクション」で「System.webServer/httpErrors」を選択
    image
  • 「defaultPath」を右クリックして「’defaultPath’属性」「属性のロック解除」をクリックする
    image
  • 右側の「操作ペイン」で「適用」をクリックする、「defaultPath」についていた鍵マークが消えればOK
    image

2013年2月11日月曜日

◆追加したサイトにWindows認証でローカルからアクセスできない

  • IISマネージャを起動する
  • 「サイト」を右クリックして表示されたコンテキストメニューから「Webサイトの追加」を選択
    image
  • 「Webサイトの追加」ダイアログでサイトを追加する
    image
  • hostsファイルに指定した「ホスト名」を追加する
  • 「匿名認証」を無効にして「Windows認証」を有効にする

この状態で、「index.html」を作り「http://minminnanasv2」にアクセスすると、他のPCからはアクセスできるがサーバー自身からはアクセスできない。(認証ダイアログが表示されて何を入れても認証が通らない)

基本認証はOK。

なんでかなぁ。

◆認証

 

匿名認証

デフォルトでONになっているので通常は誰もがアクセスできる。
IISレベルでは匿名認証を許可し、アプリケーション側でユーザーID/パスワードを入力させて独自に認証するパターンも多い。

匿名認証の設定を行うには

  • 「IISマネージャ」を開く
  • 左側の「接続ペイン」で設定したいサイトを選択
  • 「機能ビュー」で「認証」をダブルクリック
    image
  • 「機能ビュー」で「匿名認証」を選択し、「操作ペイン」で「編集」をクリック
  • 「匿名認証資格情報の編集」画面が表示される
    この画面を見ると、デフォルトでは匿名アクセスユーザーは内部的に「IUSR」というユーザーで扱われることが判る。通常はそのままで良いのかと思うが、必要があれば「設定」ボタンを押して変更できる。image

※アプリケーションプールID

ここで指定できる「アプリケーションプールID」をちょっと調べてみた。
どのバージョンからかは判らないが、現在アプリケーションプールはその名前と同じユーザー名で動作しているようだ。

例えば、ここの「TestSite」というアプリケーションプールは「TestSite」というユーザーで実行されている。
image

タスクマネージャで確認すると、
image

アプリケーションプールの実体である「w3wp.exe」が「TestSite」ユーザーで実行されているのがわかる。

なので、「匿名認証資格情報の編集」で「アプリケーションプールID」を指定した場合は、この「TestSite」というユーザーが使われることになるのだろう。

なお、この「w3wp.exe」はデフォルトでは「開始モード」が「Ondemand」となっていてクライアントからのアクセスがないと起動されないようである。
よって確認するためには一時的に設定変更(「詳細設定」で「開始モード」を「AlwaysRunning」)しておくと良い。
image

基本認証とWindows認証
インストール

デフォルトでは「匿名認証」しかインストールされないようなので、「基本認証」のような他の認証を使うときは予めインストールが必要になる。

インストール方法はIIS: ◆アクセス制限で記載した「IPおよびドメインの制限」のインストール方法と同じである。
image

基本認証とWindows認証の違い

他にも「ダイジェスト認証」や最近追加になった?と思われるものがあるが、ポピュラーな「基本認証」と「Windows」認証を押さえておけばよいだろう。

「基本認証」と「Windows」認証と書いてしまうと、なにやらまったく別のユーザー管理を行うように感じるが(困ったことに今回参考にしている資料も混乱させる説明しか載っていない)、実は「基本認証」も使用するユーザーIDとパスワードはWindowsに登録しているユーザーIDとパスワードそのものである。

「基本認証」の場合はクライアントにログオンしているユーザーとは無関係に必ず「ログインダイアログ」が表示される。
そこにサーバーでユーザー登録されているユーザーIDとパスワードを入力することによって認証が行われる。

「Windows認証」では、通常、Windowsにログオンしているユーザーが自動的にブラウザからサーバーに伝えられて認証が行われる。
ただし、これはIEでかつイントラネット環境の場合のデフォルト動作なので、ブラウザが異なったり、インターネット環境の場合は動作が異なる可能性がある。(確か)

そう、結局のところ「基本認証」と「Windows認証」はユーザー管理的な視点からみれば同じものである。
単に、都度ダイアログ入力を必要とするかシームレスな認証になるかの違いでしかない。
要は、サーバーにたどり着くまでの道のりが違うだけである。

「基本認証」は暗号化されないが、サーバー・クライアントともにすべての環境でサポートされている可能性が高いので、そのような混在環境で必要とされるのだろう。(別途SSL等でセキュリティを確保)

一般的なWindowsのイントラネット環境であれば「Windows認証」を使のでしょう。

ASP.NETシステムなどでWindowsユーザーを使わずに独自ユーザー管理する場合は「匿名認証」を有効にしてIISの認証はスルーする形になるようです。

今回参照している「インターネット Web サーバー構築ガイドライン | IIS | マイクロソフト 技術情報」では「Windows認証」と呼んでいるが本当は「Windows統合認証」とでも呼ぶべきものではないだろうか。
そして「ASP.NET」などのシステムと絡めば、

IISの認証 ASP.NETでの認証
匿名認証 Form認証
基本認証 Windows認証
Windows統合認証
ダイジェスト認証

といった感じになるのでは?と思うが・・・。

アクセス許可

認証を受けた後のアクセス許可、すなわちどのユーザーはどのリソースにアクセスできるのかといったあたり。

ASP.NETシステムについてはアプリケーション側での制御になると思うので(Web.configでごねごね)、ここでは静的ページだけを考える。

IISマネージャでサイトやディレクトリを選択すると右側の「操作ペイン」に「アクセス許可の編集」というのが現れる。
image

これをクリックするとファイル(フォルダ)のプロパティ画面が表示される。
image

すなわち、アクセス許可の制御は通常のACLでやれという事なのだろう。

であれば特に目新しいことは無いので問題はない。

2013年2月10日日曜日

◆アクセス制限

 

IPアドレスやドメイン名で要求を制限する

特定のIPアドレス、または特定のドメインへのアクセス許可を作成してサイトへのアクセスを制限することができる。

「IPおよびドメインの制限」のインストール

デフォルトでは「IPおよびドメインの制限」はインストールされないので別途追加でインストールする。

  • サーバーマネージャを起動する
  • 「ダッシュボード」で「役割と機能の追加」をクリック
    image
  • 「インストールの種類の選択」で「役割ベースまたは機能ベースのインストール」を選択して「次へ」
    image
  • 「対象サーバーの選択」画面で「サーバープールからサーバーを選択」をチェックし、自サーバーが選択されているのを確認して「次へ」
    image
  • 「サーバーの役割の選択」画面で「Webサーバー(IIS)」「Webサーバー」「セキュリティ」を展開して、「IPおよびドメインの制限」をチェックして「次へ」
    image
  • 「機能の選択」画面でそのまま「次へ」
  • 「インストールオプションの確認」画面で「インストール」をクリック
IPアドレスの制限を設定する
  • 「IISマネージャを起動する」(インストール後の時は再起動)
  • 左ペインのツリービューでサーバーを選択し、「機能ビュー」から「IPアドレスおよびドメインの制限」をダブルクリック
    image
  • 右側の操作ペインの「機能設定の編集」をクリック
  • 「IPおよびドメインの制限の設定の編集」ダイアログで「特定できないクライアントのアクセス」が「許可」になっているのを確認する。
    (デフォルトではすべてのアドレスからのアクセスが許可されている)
  • ダイアログを閉じて、操作ペインで「拒否エントリの追加」をクリック
    image
  • 「拒否の制限規則の追加」ダイアログで「特定のIPアドレス」または「IPアドレスの範囲」に拒否したいアドレスを設定して「OK」
    image
  • 指定したIPアドレスからサイトにアクセスし、拒否されるか確認する
    image
ドメインでの制限を設定する
  • 「IISマネージャ」を起動する
  • 「IPアドレスおよびドメインの制限」をダブルクリック
    image
  • 右側の「操作ペイン」から「機能設定の編集」をクリック
    image
  • 「IPおよびドメインの制限の設定の編集ダイアログで「ドメイン名の制限の有効化」をチェックして「OK」
    image
  • 確認ダイアログが表示された場合は「はい」をクリック
  • 「操作ペイン」から「拒否エントリの追加」をクリック
    image
  • 「拒否の制限規則の追加」画面で「ドメイン」に拒否したいドメインを指定して「OK」
    image

◆サーバー設定

設定ファイル

基本となる設定は「%system%\System32\inetsrv\config」にある以下の3ファイルで行われる。

image

IIS7の説明だが、TechNetに以下のような説明がある。我々が使う可能性があるのは「ApplicationHost.config」だろうか。
各サイトや仮想ディレクトリではこれらを継承している。
IISマネージャの機能ビューに表示されるアイコンから設定を変更すると、その階層に「Web.config」ファイルが作られて上位での設定がオーバーライドされる。

    • ApplicationHost.config - この構成ファイルはすべてのWebサイトやアプリケーションに関係する設定を保存しています。
    • Administration.config - この構成ファイルはIISの管理に関連する設定を保持します。これらはIISマネージャー用にインストールされた管理モジュールの一覧のほか、各管理モジュールが利用する構成設定を含みます。
    • Redirection.config - IIS 7.0 は複数のIISサーバーを中央管理の単一の構成ファイルで管理するシステム構成をサポートします。この構成ファイルjは中央管理の構成ファイルがどこに配置されているかを指定しています。
仮想ホストの機能を使う

1台のサーバーで複数のサーバーに見せかける機能。
ここでは別のホスト名でサイトを一つ追加してみる。

仮想ホストの作成
  • 「IISマネージャ」を起動する
  • 左ペインのツリーから「サイト」を右クリックして表示されたコンテキストメニューから「Webサイトの追加」をクリック
    image
  • 「Webサイトの追加」画面で「サイト名」「物理パス」「ホスト名」を指定して「OK」をクリック(IPアドレスも別途指定できるがNIC割り当てる必要があると思われ)
    image

社内環境等であれば、ここで追加したホスト名をDNSに登録する所だろうが、とりあえず自宅環境なので「hosts」ファイルに「minminnanasv2」を追加する。

  • 物理パスの「D:\wk\TestSite」に「Default.html」とかを作ってアクセスしてみる
  • 「http://minminnanasv2」で表示できればOK
    image
仮想ホストに別名をつける

追加した仮想ホストには、別なホスト名やポート名を追加でつけることもできる。

  • 「IISマネージャ」を起動する
  • 左ペインのツリーから対象のサイトを右クリックして表示されたコンテキストメニューから「バインドの編集」をクリック
  • 「サイトバインド」ダイアログで「追加」ボタンをクリック
    image
  • 「ポート」と「ホスト名」を指定して「OK」
    image
  • 「hosts」ファイルにホスト名を追加して先ほどと同様にアクセスしてみる
  • 「http://minminnanasv3」でアクセスできればOK
    image