IIS Insider

2005 年 12 月

IIS Insider

IIS Insider は月刊のコラムで、Microsoft Internet Information Services についてのトラブルシューティングおよび活用方法に関する質問に答えることを目的として作成されています。

By Bernard Cheah

トピック
IIS ログ ファイル エントリを理解するIIS ログ ファイル エントリを理解する
IIS SMTP のトラブルシューティングIIS SMTP のトラブルシューティング
IIS HTTP GET および POST の制限IIS HTTP GET および POST の制限

IIS ログ ファイル エントリを理解する

Q

次の各 FTP ログ エントリは何を意味するのですか? 下記の個々の質問を見てください。

注: 例で扱われている企業、組織、製品、ドメイン名、電子メール アドレス、ロゴ、人物、場所および事象はすべて架空のものです。実在の企業、組織、製品、ドメイン名、電子メール アドレス、ロゴ、人物、場所または事象との関連は意図されていません。または、暗示されるものではありません。

#Software: Microsoft Internet Information Services 5.0
#Version: 1.0
#Date: 2005-10-10 10:10:13
#Fields: time c-ip cs-username s-port cs-method cs-uri-stem sc-status
……
……………….
10:54:13 ip1 anonymous@ftp.msft.com 21 [135]USER anonymous@ftp.msft.com 331
10:54:13 ip1 - 21 [135]PASS - 530
11:48:04 ip2 anonymous 21 [136]USER anonymous 331
11:48:04 ip2 - 21 [136]PASS Cgpuser@you.com 530
13:50:27 ip3 Anonymous 21 [137]USER Anonymous 331
13:50:27 ip3 - 21 [137]PASS guest@me.net 530
17:40:30 ip4 anonymous 21 [138]USER anonymous 331
17:40:30 ip4 - 21 [138]PASS IEUser@ 530
17:40:30 ip4 anonymous 21 [139]USER anonymous 331
17:40:30 ip4 - 21 [139]PASS IEUser@ 530
17:40:41 ip4 Administrator 21 [140]USER Administrator

a) 上記の第 1 番目のログ エントリで、[135] および 331 は何を意味しますか? このステータス コードに関する詳細情報はどこで見つけることができますか?
b) Windows 2000 Server を実行している私のコンピュータにはanonymous@ftp.msft.comがありません。また、匿名アクセスを許可していませんでした。このユーザーはユーザー名を推測することにより、ログオンしようとしているのですか?
c) 2 行目で、PASS - 530 はユーザーがログオンしなかったことを意味していますか?
d) 6 行目で、電子メール アドレスはなぜ PASS と 530 の間にあるのですか?
e) 8 行目の最後で、IEUser@ はなぜ PASS フィールドにあるのですか?
f) 最後の 2 つのログ エントリはユーザーが FTP にログオンしていることを示しているのですか?

A

各質問を見ていく前に、このログ ファイルでどの「フィールド」がログ インされているかを理解することが重要です。この場合、フィールドは次の通りです。

time c-ip cs-username s-port cs-method cs-uri-stem sc-status

次の表は各フィールドによりどの情報がキャプチャされるかを示しています。

プロパティフィールド説明

クライアントの IP アドレス

c-ip

FTP サーバーにアクセスした IP アドレス

ユーザー名

cs-username

FTP サーバーにアクセスしたユーザー名

サービス名

s-sitename

リクエストをサービスしているサイト名 (例: MSFTPSVC1)

サーバー名

s-computername

FTP サーバー名

サーバーの IP アドレス

s-ip

リクエストをサービスしている FTP サーバーの IP アドレス

サーバーのポート

s-port

リクエストをサービスする FTP サーバーのポート番号

方法

cs-method

クライアントの動作のリクエスト (例: USER、PASS)

URI ステム

cs-uri-stem

リクエストのコンテント名 (例: ディレクトリ、ファイル名)

プロトコルの状況

sc-status

リクエストの状態コード

Win32 Status

Win32 の状況

Windows 用語の状態コード

送信されるバイト

sc-bytes

サーバーにより送信されるバイト数

受信されるバイト

cs-bytes

サーバーにより受信されるバイト数

要する時間

time-taken

リクエストを処理するための時間

それでは、個々の質問を見ていきましょう。

質問 (a):上記の最初のログ エントリで、[135] および 331 は何を意味していますか? この状態コードに関する詳細情報はどこで見つけることができますか?
回答 (a): cs-method フィールドの [135] は、IIS FTP の「接続 ID」を表しています。この場合、ip1 からの最初の接続は、サービスが開始されてから 135 番目の接続となります。331 は返信された状態コードで、RFC959 specification (英語) により、「ユーザー名 OK、パスワードが必要」という意味です。次のログ エントリは状態コード 530 を含んでおり、これはユーザーがログ オンに失敗したことを示しています。無効なユーザー名/パスワードのため、またはユーザー アカウントがログオンに必要とされるアクセス許可またはユーザー権限を持たないため、認証が失敗した可能性があります。完全な状態コードおよびその説明については、マイクロソフト サポート技術情報IIS Status Codes (英語) をご覧ください。

質問 (b): Windows 2000 Server を実行している私のコンピュータには anonymous@ftp.msft.comがありません。また、匿名アクセスは許可していませんでした。このユーザーはユーザー名を推測することによりログオンしようとしているのですか?
回答 (b): はい。匿名アクセスを無効にしているため、標準の電子メール フォーマットのユーザー名は機能しません。 "administrator" またはユーザー データベースに存在している任意のユーザー名のようなログオンが確認される場合、攻撃者は既知のユーザー名を悪用してログオンしようとしている可能性が高いと思われます。

質問(c):2 行目で、PASS – 530 とはユーザーがログオンしなかったことを意味しているのですか?
回答 (c):はい。上記の最初の質問に対する回答をご覧ください。また、マイクロソフト サポート技術情報 Err Msg: 530 User <Username> Cannot Log In. Login Failed (英語)」もあわせてご覧ください。

質問 (d): 6 行目で、電子メール アドレスはなぜ PASS と 530 の間にあるのですか?
回答 (d): これはよい質問です。3 行目と 6 行目のログ エントリは両方ともユーザーが匿名でログインしようとしていることを示しています。「匿名」として cs-username が見られます。匿名アカウントでも、ユーザーは依然としてパスワードを提供する必要があります。パスワードはどのような形式の何でも可能です。しかし、IIS FTP は次のように応答します。"331 Anonymous access allowed, send identity (e-mail name) as password." (「331 匿名アクセスが許可されました。ID (電子メール名) をパスワードとして送信してください。」) このため、ほとんどのユーザーが電子メール アドレスをパスワードとして入力するでしょう。この匿名のパスワードは FTP ログ ファイルでキャプチャされます。

質問 (e): 8 行目の最後で、IEUser@ がなぜ PASS フィールドにあるのですか?
回答 (e): これは明らかにユーザーが Internet Explorer (IE) を使用していることを示しています。既定で、IE は FTP サイトをブラウジングする時、自動的に匿名としてログオンします。このため、ユーザー名「匿名」が見られ、IEUser@ は単に IE により使用されるパスワードです。

質問 (f): 最後の 2 つのログ エントリは FTP にログオンしたユーザーを示しているのですか?
回答 (f): はい。これは PASS の状態コードが 230 (これは正常なログオンを示しています) であるためです。しかし、IIS はログ ファイルにログオン ユーザーのパスワードを保存しないことに注意してください。

ページのトップへページのトップへ

IIS SMTP のトラブルシューティング

Q

CDOSYS を使用してメールを送信する ASP アプリケーションがあります。しかし、すべてのメールがキュー フォルダにスタックしていることに気づきました。この問題に対しどのようにトラブルシューティングを行なうことができますか?

A

これは IIS SMTP についての一般的な質問です。まず、次のサポート技術情報に記載されているステップにしたがうことにより、トラブルシューティングを始めることを推奨します。Pickup フォルダにファイルを置くことによって送信メールの流れをテストする方法 (英語)  これは単に SMTP の基本的な機能をテストするものです。このサポート技術情報では、指定された形式でプレーン テキスト ファイルを作成します。SMTP が機能している場合、メールは配信されます。
メールがサーバーでスタックしている場合、それは通常 DNS の問題が原因となっています。たとえば、SMTP コンポーネントは受信者の電子メール ドメイン MX 記録を解決できない可能性があります。IIS 5.1 およびそれ以前のバージョンでは、SMTP は TCP DNS クエリをサポートするのみです。クエリが失敗すると、メールは配信されません。(Microsoft Windows Server 2003 および IIS 6.0 は TCP および UDP の両方をサポートします。) このため、サーバーでスタックしているメールが DNS の問題であるかどうかをテストするためには、次のサポート技術情報に記載されているステップにしたがってください。Windows 2000 と Exchange 2000 の SMTP のDNS 問い合わせ (英語)
このようなトラブルシューティングが必要となることを避けるために、SMTPDiag (英語) という診断ツールをダウンロードすることができます。このツールは Microsoft Exchange Server チームから提供されています。これは DNS MX 解決を含む SMTP 関連の問題のトラブルシューティングを行なう手助けとなり、リモート ホストへの接続のテストなどを行います。また、これは Exchange Server を必要としません。これが必要とするものは SMTP コンポーネントのみです。またこのツールは非常に小さいもので、わずか 96 KB です。ここにこの診断ツールのプロセスの出力のサンプルを挙げます。

: 例で扱われている企業、組織、製品、ドメイン名、電子メール アドレス、ロゴ、人物、場所および事象はすべて架空のものです。実在の企業、組織、製品、ドメイン名、電子メール アドレス、ロゴ、人物、場所または事象との関連は意図されていません。または、暗示されるものではありません。

D:\Tools\SmtpDiag>SmtpDiag.exe "sender@sender.com" "foobar@foobar.com" /v
Searching for Exchange external DNS settings.
Computer name is XXXXX.
Failed to connect to the domain controller. Error: 8007054b ?<-- You can ignore this if you are 
not in Active Directory domain.

Checking SOA for foobar.com.
Checking external DNS servers.
Checking internal DNS servers.

Checking TCP/UDP SOA serial number using DNS server [xxx.xxx.xxx.xxx].
TCP test succeeded.
UDP test failed. ?<-- Windows 2000 Server behavior
Serial number: 2004092100

Checking TCP/UDP SOA serial number using DNS server [xxx.xxx.xxx.xxx].
TCP test succeeded.
UDP test failed.
Serial number: 2004092100
SOA serial number match: Passed.

Checking local domain records.
Starting TCP and UDP DNS queries for the local domain. This test will try to validate that DNS is set up correctly 
for inbound mail. This test can fail for 3 reasons.
    1) Local domain is not set up in DNS. Inbound mail cannot be routed to local mailboxes.
    2) Firewall blocks TCP/UDP DNS queries. This will not affect inbound mail, but will affect outbound mail.
    3) Internal DNS is unaware of external DNS settings. This is a valid configuration for certain topologies.
Checking MX records using TCP: sender.com.
  A:     sender.com [xxx.xxx.xxx.xxx]
Checking MX records using UDP: sender.com.
  A:     sender.com [xxx.xxx.xxx.xxx]   
Both TCP and UDP queries succeeded. Local DNS test passed.

Checking remote domain records.
Starting TCP and UDP DNS queries for the remote domain. This test will try to validate that DNS is set up correctly 
for outbound mail. This test can fail for 3 reasons.
    1) Firewall blocks TCP/UDP queries which will block outbound mail. Windows 2000/NT Server requires TCP DNS queries. 
   Windows Server 2003 will use UDP queries first, then fall back to TCP queries.
    2) Internal DNS does not know how to query external domains. You must either use an external DNS server or 
   configure DNS server to query external domains.
    3) Remote domain does not exist. Failure is expected.
Checking MX records using TCP: foobar.com.
  MX:    gsmtp171.foo.com (10)
  MX:    gsmtp57.foo.com (20)
  A:     gsmtp171.foo.com [64.233.171.27]
  A:     gsmtp57.foo.com [216.239.57.27]
Checking MX records using UDP: foobar.com.
  MX:    gsmtp171.foo.com (10)
  MX:    gsmtp57.foo.com (20)
Both TCP and UDP queries succeeded. Remote DNS test passed.

Checking MX servers listed for foobar@foobar.com.
Connecting to gsmtp171.foo.com [64.233.171.27] on port 25.
Received: 
220 mx.foobar.com ESMTP 73si601551rna
Sent: 
ehlo sender.com

Received: 
250-mx.foobar.com at your service
250-SIZE 20971520
250 8BITMIME
Sent: 
mail from: <sender@sender.com>
Received: 
250 OK
Sent: 
rcpt to: <foobar@foobar.com>
Received: 
250 OK
Sent: 
quit

Received: 
221 mx.foobar.com closing connection
Successfully connected to gsmtp171.foo.com.
Connecting to gsmtp57.foo.com [216.239.57.27] on port 25.

Received: 
220 mx.foobar.com ESMTP v71si245850cwb
Sent: 
ehlo sender.com
Received: 
250-mx.foobar.com at your service
250-SIZE 20971520
250 8BITMIME
Sent: 
mail from: <sender@sender.com>
Received: 
250 OK
Sent: 
rcpt to: <qbernard@foobar.com>
Received: 
250 OK
Sent: 
quit
Received: 
221 mx.foobar.com closing connection

Successfully connected to gsmtp57.foo.com.

このため、行なう必要のあることは、ベースとして出力を使用し、次に各問題のエリアに焦点を当てることです。たとえば、 SMTPDiag が MX レコードを解決できないことを示す場合、SMTP ホストは TCP/UDP ポート 53 を介し MX レコードをクエリできることをチェックしてください。

ページのトップへページのトップへ

IIS HTTP GET および POST の制限

Q

私は IIS、バージョン 5.0 または 6.0、HTTP.sys (ASP に特定)、URLScan などで強制されているすべての異なるサイズの制限に混乱をきたしています。手助けしていただけますか?

A

それはとてもよい質問です。そのご苦労はよくわかります。私自身も時々混乱します。それではどのように考えてみましょうか。まず、ブラウザの制限から見てみましょう。HTTP GET リクエストについて、Internet Explorer はそのリクエストを、サポート技術情報「 [IE] URL に使用可能な文字数は最大 2,083 文字 (英語)」 の通り、2,083 文字に制限します。 これは、サポート技術情報に説明されているように HTTP POST には当てはまりません。 HTTP GET および POST に関する詳細情報は、RFC 2616 (英語) の HTTP/1.1 メソッドの定義をご覧ください。
それではサーバー側の制限について、我々は次を知っています。

種類/プラットフォーム一般的特定

IIS 4.0

MaxClientRequestBuffer

UploadReadAheadSize
URLScan*

IIS 5.0

MaxClientRequestBuffer

UploadReadAheadSize
URLScan*

IIS 6.0

MaxRequestEntityAllowed

UploadReadAheadSize
AspMaxRequestEntityAllowed
URLScan*
HTTP.SYS*

* URLScan をインストールしている場合、URLScan.ini. に追加のリクエスト制限の設定を設定することができます。URLScan に関する詳細情報は、「 IIS の URLScan を使用する (英語)」 をご覧ください。 さらに IIS 6.0 には HTTP.sys 設定があります。詳細情報は、「IIS 用の Http.sys レジストリ設定 (英語)」をご覧ください。
各構成設定間の関係の定義に移る前に、各設定をここで手短に説明します。

構成設定説明既定値種類

MaxClientRequestBuffer

IIS へのリクエストで送信されたリクエストのライン フィールドおよびヘッダー フィールドの総バイトのサイズを指定します。

IIS 4.0 (2MB)
IIS 5.0 (128K)
IIS 5.0 (16K) - Windows 2000 Server Service Pack 4

レジストリ キー。「MaxClientRequestBuffer レジストリ値について(英語)」 をご覧ください。

UploadReadAheadSize

Webサーバーがバッファに読み込み、ISAPI エクステンションに渡す総バイト サイズを指定します。

48K

マスター キー。「UploadReadAheadSize」 をご覧ください。

MaxRequestEntityAllowed

リクエストのエンティティ ボディで許可されている最大バイト数を指定します。

4GB

メタベース キー (IIS 6.0 のみ) 「MaxRequestEntityAllowed」 をご覧ください。

AspMaxRequestEntityAllowed

ASP リクエストのエンティティ ボディで許可されている最大バイト数を指定します。

200K

メタベース キー (IIS 6.0 のみ) 「AspMaxRequestEntityAllowed」 をご覧ください。

次は URLScan リクエストの制限の設定です。

構成の設定説明既定値

MaxAllowedContentLength

Content-Length リクエスト ヘッダーの許可された最大数値を指定します。

30MB

MaxUrl

リクエストの URL の最大の長さ (クエリの文字列は含みません) を指定します。

260 文字

MaxQueryString

クエリの文字列の最大の長さを指定します。

2,048 文字

上記の表で、これらは URLScan 2.5 の既定の構成の設定であることに注意してください。URLScan.ini ファイルで変更が行なわれます。また、特定のリクエスト ヘッダーに自分特有のリクエストの制限を課すこともできます。詳細情報は、「IIS の URLScan を使用する(英語)」をご覧ください。
次は HTTP.sys リクエストの制限の設定です。

構成の設定説明既定値

MaxFieldLength

リクエスト ヘッダーの最大バイト サイズを指定します。

16K

MaxRequestBytes

リクエストのボディおよびヘッダーの最大バイト サイズを指定します。

16K

UrlSegmentMaxCount

URL パスのセグメントの最大の長さを指定します。

255 セグメント

UrlSegmentMaxLength

URL パスのセグメントのスラッシュ間の最大文字数を指定します。

260 文字

これらの設定は IIS 6.0 に URLScan により提供される機能または構成の一部に間接的に変換されることに注意してください。IIS 6.0 で URLScan を適用するかどうかを決定するためには、「IIS 6.0 で URLScan 2.5 を使用するかどうかを決定する」 の欄をご覧ください。変更は次のレジストリ キーで行うことができます。

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters.

これまでで、すべての異なるリクエストの制限の設定をよくご理解いただけたと思います。それでは、設定間の関係を見てみましょう。たとえば、最初にどの制限が課されるべきでしょうか?

手短に言えば、MaxClientRequestBuffer の制限は MaxRequestEntityAllowed と同等です。IIS 6.0 で、マイクロソフトは、HTTP.sys のリクエストの制限の制御ばかりでなく、AspMaxRequestEntityAllowed などのリクエストの制限の制御に対しさらに粒度を提供します。

それでは、次にどのような順序で制限が適用されるかについて見てみましょう。図 3.1 は IIS の適用されたリクエスト制限の順番を示しています。IIS 6.0 を実行していない場合、HTTP.sys セクションは適用されません。

Request Limits in IIS

3.1 IIS のリクエスト制限

OK! これですべてです。IIS での異なるリクエストの制限の設定をよりよくご理解いただけたことを願います。それでは次回まで、ごきげんよう!


関連情報

これまでの IIS Insider コラムの質問と答えの一覧は、ここをクリック してください。

ページのトップへページのトップへ