Tech-Blogカテゴリにおけるサードパーティ製品の設定内容につきましては、弊社サポート対象外となります。

当記事では、Apache(httpd)のアクセスログの収集について記載します。

前提条件

  • root権限にて操作しています。
  • Webサーバは以下の構成です。
OS CentOS Linux release 7.9.2009 (Core)
Webサーバ Apache/2.4.6 (CentOS)
Rsyslog rsyslogd 8.24.0-57.el7_9.1
  • SyslogサーバとしてLogStare Collector(以下、LSCと記載)を利用します。
  • Syslogサーバは以下の構成です。
LSCバージョン 2.1.1
OS CentOS Linux release 7.9.2009 (Core)
JAVA OpenJDK15

設定(Webサーバ)

本記事では2つの異なるログ転送方法を説明します。

loggerを利用したログ転送方法

  • /etc/httpd/conf/httpd.confを編集します。変更後にhttpdサービスを再起動します。本記事ではログ形式「combined」を対象とします。

変更前

変更後

  • 上記コマンド及びオプションにて収集したサンプルログは下記になります。
    ※loggerコマンドにて送信しているため、対象のログとは別で先頭にログ日時並びにタグが付与されています。

  • 上記設定にて利用しているloggerコマンドのオプションについて説明します。
    • p(小文字):ログメッセージに付与するファシリティとプライオリティを指定できます。本記事ではファシリティ、プライオリティの組み合わせとしてlocal0.infoを利用しています。このオプションを利用しない場合はファシリティ、プライオリティの組み合わせとしてuser.noticeが適用されます。
      ※本記事作成時における検証にてSyslogサーバ側でログメッセージを確認した際、ファシリティ、プライオリティの組み合わせはkern.noticeでした。当該オプションを利用しない場合でのSyslogサーバ側の受信設定には気を付けてください。
    • t:ログメッセージに任意のタグをつけることが可能です。当該オプションを利用しない場合、端末にログインしているユーザの名前もしくは実効ユーザ ID に基づいたユーザ名がタグとしてログメッセージに付与されます。サンプルログでは「httpd_access」に該当します。
    • n:ログメッセージ送信対象とするサーバを指定できます。
    • P(大文字):ログメッセージを送信する際に利用する宛先ポート番号を指定できます。

rsyslogのimfileモジュールを利用したログ転送方法

  • /etc/rsyslog.confを編集します。変更後にrsyslogdサービスを再起動します。

変更前

変更後

  • 上記設定にて収集したサンプルログは下記になります。
    ※rsyslogを介して送信しているため、対象のログとは別で先頭にログ日時並びにタグが付与されています。

  • 追記したimfileモジュールの各パラメータについて説明します。
    • $ModLoad imfile(必須):imfileモジュールを読み込むための記述です。
    • $InputFileName(必須):syslogとして読み込む対象のテキストファイルを指定する記述です。本記事では「/var/log/httpd/access_log」を指定しています。
    • $InputFileTag(必須):ログメッセージに任意のタグを付与するための記述です。サンプルログでは「apache_access.log:」に該当します。
    • $InputRunFileMonitor(必須):読み込み対象のテキストファイルの監視を有効化する記述です。
    • $InputFileFacility:ログメッセージに任意のファシリティを付与するための記述です。記述されていない場合、デフォルトでは「local0」が付与されます。
    • $InputFileSeverity:ログメッセージに任意のプライオリティを付与するための記述です。記述されていない場合、デフォルトでは「notice」が付与されます。

ログ形式

  • 本記事にて対象としているログ形式「combined」のデフォルトの構成要素は下記になります。

  • 各要素について説明します。
    • %h:アクセス元のホスト名(送信元IP)が表示されます。サンプルログでは「xxx.xxx.xxx.xxx」に該当します。
    • %l:設定ファイルにてIdentityCheckが「On」の場合にクライアント識別子が表示されます。IdentityCheckが「Off」の場合は「-」が表示されます。
    • %u:認証ユーザ名が表示されます。認証がない場合は「-」が表示されます。
    • %t:リクエストを受け付けた時刻が表示されます。 サンプルログでは「[15/Jun/2021:17:52:29 +0900]」に該当します。
    • %r:リクエストの最初の行が表示されます。サンプルログでは「GET / HTTP/1.1」に該当します。引用符(“)の前にエスケープ文字(\)が配置されているため、%rの前後に引用符が付与されています。
    • %>s:ステータスが表示されます。内部でリダイレクトされた場合は、最後のステータスが含まれます。サンプルログでは「403」に該当します。
    • %b:レスポンスのバイト数が表示されます。(HTTP ヘッダは除く)1バイトも送られなかった場合は 「-」 が表示されます。サンプルログでは「4897」に該当します。
    • %{xxx}i:サーバに送られたリクエストのヘッダより「xxx」 にて指定した値が表示されます。サンプルログでは「Referer」及び「User-Agent」がヘッダより取得されログに含まれています。

※以下のリンクより上記以外の構成要素に関する説明がありますのでご参照いただければと思います。
https://httpd.apache.org/docs/2.4/en/mod/mod_log_config.html

ログ形式の変更例

  • LB(ELB、ロードバランサー)やPROXYを経由したアクセスにおいて、元の送信元IPをログメッセージに含める場合は/etc/httpd/conf/httpd.confを編集し、ログ形式「combined」に「%{X-Forwarded-For}i」を追加します。
    ※Syslogサーバへの転送設定は記載しておりません。

変更前

変更後

  • X-Forwarded-Forが含まれたサンプルログは下記になります。
    ※下記サンプルログはクライアント_A(aaa.aaa.aaa.aaa)からWebサーバまでにPROXY_B(bbb.bbb.bbb.bbb)とPROXY_C(ccc.ccc.ccc.ccc)、PROXY_D(ddd.ddd.ddd.ddd)の3つPROXYを経由した場合における複数のX-Forwarded-Forが含まれたサンプルログになります。X-Forwarded-Forに該当する要素がない場合、「-」が表示されます。

error_logについて

error_logのSyslogサーバへの転送にはloggerおよびimfileモジュールを利用できます。

  • error_logのサンプルログは下記になります。

ログ形式

  • 上記サンプルログは以下の要素にて構成されています。
    ※ログイベントによって表示される要素は異なります。

  • 各構成要素について説明します。
    • %t:リクエストを受け付けた時刻が表示されます。サンプルログでは「Wed Jun 16 16:00:29.436183 2021」に該当します。
    • %l:ログメッセージのレベルが表示されます。サンプルログでは「autoindex:error」に該当します。
    • %P(大文字):プロセスIDが表示されます。サンプルログでは「8332」に該当します。
    • %a:リクエストの送信元IPと送信元ポートが表示されます。サンプルログでは「xxx.xxx.xxx.xxx:36930」に該当します。
    • %M:ログイベントの詳細が表示されます。サンプルログでは「AH01276: Cannot serve directory /var/www/html/: No matching DirectoryIndex (index.html) found, and server-generated directory index forbidden by Options directive」に該当します。

※以下のリンクより上記以外の構成要素に関する説明がありますのでご参照いただければと思います。
https://httpd.apache.org/docs/2.4/en/mod/mod_log_config.html

ログ形式の変更例

  • ユーザーエージェントをログに含める場合は/etc/httpd/conf/httpd.confを編集し、ErrorLogFormatを追加し「%{User-Agent}i」を含めたログ形式を定義します。
    ※Syslogサーバへの転送設定は記載しておりません。

変更前

変更後

  • ユーザーエージェントが含まれたサンプルログは下記になります。

ssl_access_logとssl_request_logについて

ssl_access_logとssl_request_logのSyslogサーバへの転送にはloggerおよびimfileモジュールを利用できます。

  • ssl_access_logのサンプルログは下記になります。

  • ssl_request_logのサンプルログは下記になります。

ログ形式

  • ssl_access_logの構成要素は下記になります。
    ※デフォルトではTransferlogディレクティブがssl_access_logに適用され明示的にログ形式が定義されてないので、出力されるログ形式は以下の形式となります。

  • ssl_request_logの構成要素は下記になります。
    ※デフォルトではCustomlogディレクティブがssl_request_logに適用され明示的にログ形式が定義されています。

  • 各構成要素について説明します。
    • %h:アクセス元のホスト名(送信元IP)が表示されます。デフォルトではssl_access_log、ssl_request_log共に含まれサンプルログでは「xxx.xxx.xxx.xxx」に該当します。
    • %l:設定ファイルにてIdentityCheckが「On」の場合にクライアント識別子が表示されます。IdentityCheckが「Off」の場合は「-」が表示されます。デフォルトではssl_access_logのみに含まれます。
    • %u:認証ユーザ名が表示されます。認証がない場合は「-」が表示されます。デフォルトではssl_access_logのみに含まれます。
    • %t:リクエストを受け付けた時刻が表示されます。デフォルトではssl_access_log、ssl_request_log共に含まれ サンプルログでは前者が「[23/Jun/2021:11:16:43 +0900]」、後者は「[23/Jun/2021:11:32:40 +0900]」に該当します。
    • %r:リクエストの最初の行が表示されます。デフォルトではssl_access_log、ssl_request_log共に含まれサンプルログでは「GET / HTTP/1.1」に該当します。引用符(“)の前にエスケープ文字(\)が配置されているため、%rの前後に引用符が付与されています。
    • %>s:ステータスが表示されます。内部でリダイレクトされた場合は、最後のステータスが含まれます。デフォルトではssl_access_logのみに含まれサンプルログでは「403」に該当します。
    • %b:レスポンスのバイト数が表示されます。(HTTP ヘッダは除く)1バイトも送られなかった場合は 「-」 が表示されます。デフォルトではssl_access_log、ssl_request_log共に含まれサンプルログでは「4897」に該当します。
    • %{varname}x:特定のモジュールを有効化することで追加されるログ形式です。デフォルトのssl_request_logでは、「SSL_PROTOCOL」と「SSL_CIPHER」が使用されています。デフォルトではssl_request_logのみに含まれサンプルログでは「SSL_PROTOCOL」が「TLSv1.2」であり、「SL_CIPHER」が「ECDHE-RSA-AES256-GCM-SHA384」となります。
      ※本記事ではmod_sslを有効化したことで、ssl.confファイルにて%{varname}xを利用しています。

※一部構成要素はaccess_logと同一となります。
※以下のリンクより上記以外の構成要素に関する説明がありますのでご参照いただければと思います。
https://httpd.apache.org/docs/2.4/en/mod/mod_log_config.html

ログ形式の変更例

  • ssl_access_logに「SSL_PROTOCOL」と「SL_CIPHER」を含める場合は/etc/httpd/conf.d/ssl.confを編集し、Transferlogディレクティブにて明示的にログ形式を定義します。
    ※Syslogサーバへの転送設定は記載しておりません。

変更前

変更後

  • ログ形式変更後のssl_access_logのサンプルログは下記になります。

ssl_error_logについて

ssl_error_logのSyslogサーバへの転送にはerror_logと同様にloggerおよびimfileモジュールを利用できます。

ログ形式

ログ形式はerror_logと同様です。サンプルログ含め、error_logの項を参照してください。

ログ形式の変更例

ログ形式の変更例についてはerror_logの項を参照してください。

設定(LSC側)

基本設定

  • syslogにて転送されたメッセージは「SYSLOG収集」にてLSCで受信します。「SYSLOG収集」につきましては、以下の記事をご参照ください。
    SYSLOG収集
  • 「SYSLOG収集」にて利用されるポート番号はデフォルトでtcp/udp共に514となっています。環境設定より「SYSLOG収集」にて利用されるポート番号を変更することで514以外のポートで「SYSLOG収集」が可能となります。環境設定につきましては、以下の記事をご参照ください。
    LogStare Collector における環境設定について

以上でApache(httpd)のアクセスログの収集についての説明は終了となります。


この情報の発信者

セキュアヴェイルグループ(SecuAvail Inc. | CareAvail Inc. | LogStare Inc.)