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

2013年2月9日土曜日

◆IISが処理できるデータの種類(MIMEの種類)

IISではリクエストのあったファイルを何でもかんでもクライアントに返すわけではなく、拡張子の種類によって制限がかかっている。

実際には、拡張子とMIMEタイプの対応表をもっていて、対応するMIMEタイプが存在しない拡張子についてはエラーとしている。

MIMEタイプを確認するには以下の手順で行う。

  • 「IISマネージャ」を起動する
  • 左側の「接続」ペインで「Default Web Site」を選択
  • 中央の「機能ビュー」で「MIMEの種類」アイコンをダブルクリックして起動する
    image
  • 「MIMEの種類」が一覧で表示される
    image
  • 必要に応じて右側の「操作」ペインで「追加」「編集」「削除」を選んで操作する

ちなみに、MIMEの一般的書式は「Content-Type type/subtype」といった感じになっていて、以下のようなものが主に使われているとのこと。

  • text/plain(プレーンテキスト)
  • text/html(HTMLテキスト)
  • application/xhtml+xml(XHTMLテキスト)
  • image/gif(GIF画像)
  • image/jpeg(JPEG画像)
  • image/png(PNG画像)
  • video/mpeg(MPEG動画)
  • application/octet-stream(任意のバイナリデータ)
  • application/pdf(PDF文書)
  • message/rfc822(RFC 822形式)
  • multipart/alternative(HTMLメールのHTMLとプレーンテキストのように、同じ情報を異なる形式で表したマルチパート)
  • application/x-www-form-urlencoded(HTTPのPOSTメソッドによるフォームデータの送信)
  • multipart/form-data(同上、主にファイルアップロードを伴う場合)

◆IISのインストール(サーバー)

IIS: ◆IISのインストール(クライアント)に続いて今度はサーバー版(Server2012)

  • 「サーバーマネージャ」を起動する
    image
  • 「役割と機能の追加」をクリック
    image
  • 「役割ベースまたは機能ベースのインストール」を選択し「次へ」
    image
  • 「対象サーバーの選択」画面で「サーバープールからサーバーを選択」し「次へ」
    image
  • 「サーバーの役割選択」画面で「Webサーバー(IIS)」をチェック
    image

    ちなみに、IISでASP.NETをホストする場合は、「Webサーバー(IIS)」「Webサーバー」「アプリケーション開発」と展開して「ASP.NET4.5」にチェックを入れる必要があるようだ。
    手順 1: IIS と ASP.NET モジュールをインストールする
    IISでASP.NETをホストするというのは最も重要な役割の1つだと思うのだが、なぜこんなところにしまい込むのか不思議である。
    アプリケーション開発とい名前も判りづらい(なぜホストが開発になる?)
    ドキュメントを調べないとメジャーな機能もインストールできないようではウィザードの意味がまったくない。(コマンドでやったほうがよい)
  • 「IIS管理コンソール」をインストールするか聞かれるのでそのまま「機能の追加」をクリック
    image
  • 「サーバーの役割選択」画面に戻るので「次へ」
  • 「機能の選択」画面が表示されるので追加機能があればチェック(今回はそのまま)「次へ」
    image
  • 「Webサーバーの役割(IIS)」画面でそのまま「次へ」
    image
  • 「役割サービスの選択」画面で追加する役割があればチェックして「次へ」(今回はそのまま)
    image
  • 「インストールオプションの確認」画面で「インストール」ボタンをクリック
    image
  • 「http://localhost」にアクセスして以下の画面が表示されればOK
    image

ちなみに、追加した役割を削除する場合は「サーバーマネージャ」の「管理」「役割と機能の削除」から行うようだ。
image

◆ページを公開する

 

IISでの公開方法

公開場所の種類

特徴

Web サイト

IPアドレス、ドメイン名の指定、ホストするプロトコルの指定が可能

仮想ディレクトリ

Web サイト内でホストされるディレクトリ

アプリケーション

Web サイト内でホストされるアプリケーションのストア
使用するプロセス (アプリケーションプール) の指定等、サーバーサイドで実行されるアプリケーションの設定が可能

image

インストールした状態ではサイト「Default Web Site」がひとつ作られている。
インストール直後に「http://localhost」で参照できるのがここである。

Webサイト

右クリックして「エクスプローラ」で開くと実際の物理フォルダが表示される。
image

通常は「C:\inetpub\wwwroot」になっているのでここにコンテンツを置けばクライアントに公開できる。

仮想ディレクトリ

「C:\inetpub\wwwroot」以外の場所にコンテンツを置きたいときは仮想ディレクトリを作る。

  • 「IISマネージャ」で「Default Web Site」を右クリックして「仮想ディレクトリの追加」を選択
    image
  • 「エイリアス」に公開する名前、物理パスにリンク先を指定する
    image
  • 確認のため、「D:\wk」に「Sample.html」を作り「http://localhost/VDir1/Sample.html」にアクセスしてみると以下のように表示される。
    image
アプリケーション

アプリケーションは通常ASP.NETのアプリケーション等を置くものと思われるが、とりあえず仮想ディレクトリと同様の方法で作成可能だ。(実際、仮想ディレクトリの機能にアプリケーションプールでの実行機能を追加したもののように見える)

  • 「IISマネージャ」で「Default Web Site」を右クリックして「アプリケーションの追加」を選択
    image
  • 「エイリアス」に公開する名前、物理パスにリンク先を指定する。
    ここでは「アプリケーションプール」はデフォルトのままとする。
    アプリケーションプールとは、自分で作ったアプリケーションをホストしてくれるプロセスと思っておけばとりあえずOKではなかろうか。
    障害が起きたときに共倒れしたくないような場合はアプリケーションプールを複数あげて別々に実行してあげれば良いと思われ。
    image
  • 先ほどと同じhtmlファイルをコピーして「http://localhost/App1/Sample.html」にアクセスしてみると同様な結果となる。
アクセス権の追加

「IIS インターネット Web サーバー構築ガイドライン」によれば、上記で作成した仮想ディレクトリの物理フォルダに「IIS_USERS」グループのアクセス権を与えよとなっている。

ただし、通常はどのディレクトリにも「Users」に対してアクセス権がついているのでそのままでは意味があるとは思えない。

アクセス権については別の章で説明があるようなので、ここでは特別な設定は行わない。

インデックスファイルを設定する

インデックスファイルとはファイル名を省略してアクセスされた場合のデフォルトファイルで、いくつかの種類を指定しておくことができる。

既定のドキュメントの設定方法
  • 「IISマネージャ」を起動する
  • 「Default Web Site」をクリックして選択
  • 中央のペインで「既定のドキュメント」をダブルクリック
    image
    (中央ペインにアイコンが表示されていない場合は下のタブで「機能ビュー」に切り替える)
    image
  • 既定のドキュメント画面が表示される
    image
  • デフォルトでは5種類のファイルが定義されていて、上位行ほど優先度が高そうだ。
    また、「継承」できるようなので、通常はこの設定がすべてのディレクトリに適用され、必要であればそれぞれのディレクトリでオーバーライドすればよいのだろう。