アクセスログは、クライアントアプリケーションに関連するすべてのイベントと、コンピューター上のリソースへのユーザーアクセスを記録するログファイルです。例として、Webサーバーのアクセスログ、FTPコマンドログ、データベースクエリログなどがあります。
アクセスログの管理は、システム管理者にとって重要な業務です。ソフトウェア開発者、オペレーションエンジニア、セキュリティアナリストは、アクセスログを使用して、アプリケーションのパフォーマンス、誰がアクセスしているか、そして舞台裏で何が起こっているのかをモニタリングします。アクセスログは、ITチームが問題を発見し、脅威を検知して、容量の問題を特定するのに役立ちます。
通常、アクセスログには一般的な情報がいくつか含まれています。情報の例として、次のものがあります。
- クライアントアクセスの日時
- クライアントのIPアドレスまたはホスト名
- ユーザー名
- イベントのステータスまたは重要度
- 操作の成功または失敗
- 関連するメッセージ
この記事では、アクセスログが重要な理由、さまざまなタイプのアクセスログとその場所、その内容、関連するさまざまな設定パラメーターについて説明します。
アクセスログのタイプ
アクセスログは、大きく次の3つの主要カテゴリーに分類できます。
- アクティビティログ
- サーバーアクセスログ
- エラーログ
アクティビティログ
アクティビティログには、セッション中にユーザーが実行したすべてのアクションが記録されます。このようなアクティビティには、コマンドの実行、URLへのアクセス、ファイルへのアクセスなどがあります。アクティビティログの例には、次のようなものがあります。
サーバーアクセスログ
サーバーアクセスログには、ユーザー接続とそのリソースリクエストに関する情報が含まれます。アクティビティログとは異なり、これらのログにはユーザーが実際に行った操作の詳細な情報は含まれていません。サーバーアクセスログの例を次に示します。
エラーログ
エラーログには、クライアントセッション中に発生したエラーに関する診断情報が含まれます。このログは、アプリケーションやシステムのエラーのトラブルシューティングに役立ちます。いくつか例を示します。
- Nginxエラーログ
- IBM z/Transaction Processing Facilityシステムエラーログ
わかりやすくするために、この記事ではWebサーバーアクセスログに焦点を当てます。通常、Webサーバーアクセスログには、3種類の情報(ユーザーアクセス、ユーザーアクティビティ、リクエストエラー)がすべて含まれます。
アクセスログを取得する必要がある理由
Webサーバーアクセスログをキャプチャして分析することは、システム管理者にとって有益です。
まず、Webアプリケーションの可用性と正常性が表示され、エラーのトラブルシューティングが迅速化されます。例えば、アクセスログにHTTPエラー404が多数表示されている場合は、ユーザーが1つ以上の存在しないページにアクセスしようとしているか、サイトが間違ったURLを使用していることを意味します。
アクセスログは、重大なエラーのトラブルシューティングにも役立ちます。例えば、5xxエラーの数が多い場合は、Webサーバーで内部エラーが発生していることを示しています(サイトの一部がクラッシュしている可能性があります)。Webサーバーのエラーログをさらに詳しく調査することで、より多くの情報を得ることができます。
デジタルマーケティングも、Webサーバーのアクセスログが価値を持つ分野の1つです。デジタルマーケターはアクセスログのエントリを使用して、ユーザーがサイト内で訪れるページ、データをリクエストする場所、フォームを完了する箇所、ファイルをダウンロードするポイント、またはリンクをクリックするエリアを特定できます。これらすべてが、精密なユーザープロファイリングや検索エンジンの最適化を強化するのに役立ちます。
SecOpsエンジニアは、Webサーバーアクセスログを使用して、異常な振る舞いや異常を見つけます。例えば、特定の範囲のIPアドレスからのHTTP GETリクエストが予想外に急増した場合などがあります。これは侵害された一連のコンピューターからのDDoS攻撃の可能性を示しています。WebサーバーがWebアプリケーションファイアウォールからのHTTP/HTTPSトラフィックのみを受け入れることになっている場合、他のIPアドレスからの直接HTTPリクエストは、不正アクセスの可能性を示しています。
アクセスログに含まれる内容
通常、Webサーバーアクセスログには次の種類の情報が含まれています。
| 日付と時間 | サイト/ページがアクセスされた日時(UTCまたはWebサーバーの現地時間)。 |
|---|---|
| ソースIP | クライアントマシンのIPアドレス。 |
| 宛先IP | WebサーバーのIPアドレス。 |
| 宛先FQDN | Webサーバーの完全修飾ドメイン名。 |
| 宛先ポート | Webサーバー上の要求されたポート。これは通常、80(HTTPのデフォルト)または443(HTTPSのデフォルト)ですが、Webサイトが実行されているポートによっては異なる場合があります。 |
| プロトコル | クライアントアクセスネットワークプロトコル。一般的な例はHTTP 1.1です。 |
| ユーザー名 | Webサイトにアクセスしているユーザー(匿名の場合はハイフンで示されます)。 |
| リソース | 要求されたページまたは要素。 |
| HTTPメソッド | HTTPリクエストメソッド(GET、POSTなど)。 |
| HTTPステータスコード | Webサーバーから返されたステータスコード(例:200 OK、404ページが見つかりません)。 |
| URIクエリ | HTTPリクエストの一部としてWebサイトに送信されるアプリケーションクエリ。 |
| HTTP参照元 | クライアントをこのWebサイトに誘導したIPアドレスまたはURL。 |
| HTTPユーザーエージェント | クライアントブラウザのタイプとバージョン。 |
| 受信バイト数 | Webサーバーがクライアントから受信したバイト数。 |
| 送信バイト数 | Webサーバーがクライアントに送信したバイト数。 |
Apache Webサーバーアクセスログの次のスニペットで、これらのフィールドがどのように表示されるかを見てみましょう。
116.35.41.41 - - [21/May/2022:11:22:41 +0000] "GET /aboutus.html HTTP/1.1" 200 6430 "http://34.227.9.153/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Safari/605.1.15"
ここでアクセスログには、2022年5月21日の午前11時22分(サーバーの現地時間)にIPアドレス116.35.41.41から受信したクライアントリクエストが表示されています。クライアントがWebサイトのルートディレクトリにあるaboutus.htmlページにアクセスしました。HTTPステータスコードは200(クライアントリクエストが成功したなど)で、参照Webサイトアドレスはhttp://34.227.9.153/です。ユーザーのブラウザはAppleのSafariで、Webサーバーはページを提供するときに6430バイトをクライアントに送信しました。
アクセスログからこのような情報を集約することで、次の情報を得ることができます。
- ページごとのユニーク訪問者または訪問者あたりのユニークページの数
- サイト訪問者の位置情報
- サイトの最も頻繁にアクセスされる部分
- 最も一般的に使用されるクライアントクエリ
- さまざまなHTTPステータスコードの総数
アクセスログの検索方法
Webサーバーのアクセスログの場所は、オペレーティングシステムとWebサーバーによって異なります。
例えば、RHELベースのシステムでは、Apache Webサーバーのアクセスログのデフォルトの場所は/var/log/httpdです。UbuntuのようなDebianベースのシステムでは、この場所は/var/log/apache2になります。
Nginxの場合、デフォルトでは、RHELベースのシステムとDebianベースのシステムの両方でアクセスログは/var/log/nginxディレクトリにあります。
Windows Serverで実行されているInternet Information Service (IIS) のアクセスログのデフォルトの場所は%SystemDrive%inetpublogsLogFilesW3SVCです。通常、%SystemDrive%はC:で、site_idはIISでホストされているWebサイトのIDです。
管理者がWebサーバーのアクセスログを読み取る方法にはさまざまなものがあります。サイト管理者は、Linuxベースのシステムでは実際のWebサーバーのコンソールにSSHで接続し、cat、tail、grepなどのコマンドを使用してファイルを読み取ることができます。場合によっては、Webマスターはホスティングプロバイダーのコントロールパネル(cpanelなど)を使用してアクセスログを開いて読み取る必要があります。
アクセスログの設定方法
他のほとんどの設定と同様に、Webサーバーアクセスログのプロパティは、その設定ファイルで設定できます。Webサーバーのメイン設定ファイルの場所は、WebサーバーとOSによって異なります。次にそのリストを示します。
| Webサーバー | OS | メイン設定ファイル |
|---|---|---|
| Apache | RHELベース | /etc/httpd/conf/httpd.conf |
| Apache | Debianベース | /etc/apache2/apache2.conf |
| Nginx | RHELベース | /etc/nginx/nginx.conf |
| Nginx | Debianベース | /etc/nginx/nginx.conf |
| IIS | Windows Server | %WinDir%System32InetsrvConfigApplicationHost.config |
Webサーバーの一般的なアクセスログ設定には、次のようなものがあります。
- ログの場所
- ログ形式
- ログレベル
- ログローテーション
アクセスログの場所は、WebサーバーでホストされているWebサイトごとに異なる場合があります。例えば、Apacheでは、次のコマンドでサーバー全体のアクセスログの場所を設定します。
CustomLog "/var/log/httpd2/access_log" common
ただし、これはVirtualHostで上書きできます。
ServerName www.mysite.com
ServerAlias test.com
DocumentRoot /var/www/html/test.com
ErrorLog /var/log/httpd/mysite.com/error_log
CustomLog /var/log/httpd/mysite.com/access_log combined
アクセスログの形式設定では、ログエントリに含めるフィールドを指定します。アクセスログの形式は、commonまたはcombinedにすることができます。次のスニペットは、設定例を示しています。
LogFormat "%h %l %u %t "%r" %>s %b" common
こちら:
%hはリモートホスト名です。%lはidentdからのリモートログ名です(指定されている場合)。%uはクライアントのユーザーIDです(使用可能な場合)。%tはリクエストが受信されたタイムスタンプです。%rはHTTPリクエストの最初の行です。%>sは、Webサーバーによって返されるHTTPステータスコードです。%bは返されるリソースのサイズです(バイト単位)。
カスタムログモジュールを使用して独自のアクセスログ形式を設定する方法については、Apacheのドキュメントをご覧ください。
その他のApacheアクセスログ設定には、ログレベルとログローテーションを含めることができます。ログレベルによって、特定の重要度レベル以上を満たす特定のイベントのみを含めることができます。重要度レベルは、debug、info、notice、warn、error、crit、alert、emerg、trace1からtrace8までにすることができます。ログレベルが低いほど、ログエントリがより詳細になります。次のスニペットでは、警告レベル以上のメッセージのみが記録されるようにアクセスログを設定しています。
LogLevel warn
これはApache VirtualHostsで上書きできます。
Apacheのログローテーションは、LinuxのlogrotateユーティリティまたはApacheのrotatelogプログラムを使用して設定できます。
次世代SIEMおよびログ管理のための世界をリードするAIネイティブプラットフォームをお試しください
SIEMとログ管理のための最高水準のAIネイティブプラットフォーム、CrowdStrike Falcon®プラットフォームでサイバーセキュリティを強化しましょう。ペタバイト規模でのセキュリティログを体験してみてください。クラウドネイティブ型または自己ホスト型での展開が可能です。ボトルネックの生じない、強力でインデックスフリーのアーキテクチャを利用してデータをロギングすれば、1日あたり1PB以上のデータを取り込んで脅威ハンティングに役立てることができます。リアルタイムの検索機能により攻撃者をしのぐスピードで対策を実施できます。複雑なクエリを実行しても、そのレイテンシーは1秒未満です。360度の可視性によりデータを統合してサイロ化を解消し、セキュリティ、IT、DevOpsチームがシームレスに脅威のハンティング、パフォーマンスのモニタリング、コンプライアンスの確保を行うことができます。30億件ものイベントにわたる作業でも1秒未満で実施できます。