Apacheにはアクセスログ(access_log)とエラーログ(error_log)というログを取得しているファイルがあります。
アクセス(access_log)は、Apacheサーバーで提供している情報に外部からアクセスがある都度、ログを取得しています。また、エラーログ(error_log)は、設定によるエラーやアクセスされたファイルが見つからないなどのエラーが発生した場合にそのログを取得しています。
今回は、当サイトで発生したApacheのエラーを参考に、エラーログを説明していきます。
①File does not existのエラーについて
存在しないファイルへのアクセスを要求された場合に記録されるエラーです。
例えば、サイトのページが削除されていたり、ページ内の画像がリンク切れを起こしている場合などに発生します。
いくつかのFile does not existのエラー例を見てみましょう。
[日付] [error] [client 接続元IPアドレス] File does not exist: /var/www/example.com/image.gif, referer: http://example.com/index.html
上記エラーは、index.htmlのページで使用されているimage.gifという画像が存在しないというエラーです。
このエラーが発生している場合には、ページに設定してある画像の名前やリンクが正しいか、または画像自体が存在しているか確認してください。
[日付] [error] [client 接続元IPアドレス] File does not exist: /var/www/example.com/sample.html
上記エラーは、sample.htmlというページにアクセスしようとしたが、そのページが存在しなかったというエラーです。現在使用しているページでエラーが発生している場合には、ページが削除されていないかなど確認する必要があります。
また、過去に使用していたページで発生してる場合には、過去に使用していたファイル名で「このページは移動しました」といった表示設定することで、ユーザーを新しいページへ誘導することができます。
[日付] [error] [client 接続元IPアドレス] File does not exist: /var/www/example.com/favicon.ico
上記エラーは、IEやFirefoxなどのブラウザでアクセスするとアイコンファイルを自動的に読み込もうとするのですが、その際アイコンファイルが見つからなかった場合に発生するエラーです。
アイコンファイルを設定していない場合には、全く気にする必要がないエラーですが、エラーログを不要に記録したくない場合には、アイコンファイルを設置するか、またはhttpd.confでicoファイルに関するエラーを記録しない設定をします。
[日付] [error] [client 接続元IPアドレス] File does not exist: /var/www/example.com/robots.txt
上記エラーは、検索エンジンのロボットがクロールした際にrobots.txtファイルを見つけられなかった場合にエラーとして記録されます。
このエラーも気にする必要はありませんが、回避する場合にはrobots.txtファイルを設置してください。
[日付] [error] [client 接続元IPアドレス] File does not exist: /var/www/html/.ssh [日付] [error] [client 接続元IPアドレス] File does not exist: /var/www/html/.ssh [日付] [error] [client 接続元IPアドレス] File does not exist: /var/www/html/.ssh [日付] [error] [client 接続元IPアドレス] File does not exist: /var/www/html/.ssh [日付] [error] [client 接続元IPアドレス] File does not exist: /var/www/html/.ssh [日付] [error] [client 接続元IPアドレス] File does not exist: /var/www/html/passwd [日付] [error] [client 接続元IPアドレス] File does not exist: /var/www/html/passwd [日付] [error] [client 接続元IPアドレス] File does not exist: /var/www/html/password [日付] [error] [client 接続元IPアドレス] File does not exist: /var/www/html/passwords.txt
このように連続して複数回エラーが発生している場合、攻撃者が不正アクセスを試みようとしていると考えられます。
しかし、ファイルが見つからず不正アクセスが失敗したというエラーですので、エラーログとしては正常なものとなります。
②client denied by server configurationのエラーについて
これはアクセス制限がかかっているエリアへのアクセス失敗や、IPアドレスなどによるアクセス制限によりアクセスが失敗した場合に記録されます。
File does not existエラーはファイルが見つからない場合に発生しますが、このエラーはファイルやエリアへのアクセスを拒否した場合に発生します。
[日付] [error] [client 接続元IPアドレス] client denied by server configuration: /var/www/example/
上記エラーは、/var/www/example/にアクセスしようとしたが、アクセス制限などによりアクセス失敗したエラー例です。
/var/www/example/へのアクセス制限を設定している場合には、アクセス制限が成功しているという正常なエラーログとなりますが、設定ミスによるアクセス失敗でも同様のログが残ります。
アクセス制限を設定していないディレクトリやページでこのエラーが発生する場合は、httpd.conf内のorder allow,denyなどの設定が不足しているか、間違っている可能性がありますので確認してください。
[日付] [error] [client 接続元IPアドレス] client denied by server configuration: /var/www/html/, referer: http://知らないドメイン
「知らないドメインのDNSをアクセス制御する」のような設定を行った場合には、上記のエラーが記録されました。
[Mon Jul 01 05:32:43 2014] [error] [client 接続元IPアドレス] client denied by server configuration: /var/www/httpdocs/ [Mon Jul 01 05:32:43 2014] [error] [client 接続元IPアドレス] client denied by server configuration: /var/www/httpdocs/ [Mon Jul 01 05:32:43 2014] [error] [client 接続元IPアドレス] client denied by server configuration: /var/www/httpdocs/ [Mon Jul 01 05:32:43 2014] [error] [client 接続元IPアドレス] client denied by server configuration: /var/www/httpdocs/ [Mon Jul 01 05:32:43 2014] [error] [client 接続元IPアドレス] client denied by server configuration: /var/www/httpdocs/ [Mon Jul 01 05:32:45 2014] [error] [client 接続元IPアドレス] client denied by server configuration: /var/www/httpdocs/ [Mon Jul 01 05:32:45 2014] [error] [client 接続元IPアドレス] client denied by server configuration: /var/www/httpdocs/ [Mon Jul 01 05:32:45 2014] [error] [client 接続元IPアドレス] client denied by server configuration: /var/www/httpdocs/
上記のように短時間に何度もアクセスを試みようとしている場合、DOS攻撃やDDOS攻撃と考えられますので注意が必要です。
③Fatal error(フェイタルエラー)について
このFatal errorは、PHPで処理を停止する程の致命的なエラーが発生した場合に記録されます。
例えば、存在しない関数を呼び出したり、ユーザー定義関数を重複して定義したりすることで発生し、エラーが発生した時点でプログラムの処理が停止していることになります。
PHPで発生するエラーには軽度から重度のものまでレベル分けされており、処理を停止する程のFatal errorは重度のエラーになりますので、早急に改善する必要があります。
[Tue Oct 10 15:24:54 2018] [error] [client 接続元IPアドレス] PHP Fatal error: Call to undefined function get_header() in /var/www/example.com/blog/wp-content/themes/example/index.php on line 1 [Tue Oct 10 15:24:55 2018] [error] [client 接続元IPアドレス] PHP Fatal error: Call to undefined function get_header() in /var/www/example.com/blog/wp-content/themes/example/index.php on line 1
このFatal errorを改善するためのヒントは、エラーログに残されています。
上記の例では、…/themes/exampleディレクトリにあるindex.phpの1行目に書かれているget_header()という定義において、Call to undefined function(定義されていない関数が呼び出された)というエラーが発生していることが分かります。
このヒントから、関数名をもう一度確認してみたり、スペルミスがないか確認することなどで改善することがあります。
但し、このエラーログは、あくまでヒントであってエラーの根本原因を得られるとは限りません。そのため、記録された行番号は参考程度にして、その行番号周辺からエラーとなっている原因を探すことをお勧めします。
まとめ
エラーログは、サイトの状況や問題点を報告してくれる重要な情報です。
その情報を基にVPSサーバーの設定やサイトの構成を改善することで、ユーザーのアクセシビリティを向上させることにも繋がります。
VPSサーバーを運営する上では、ログを監視することは重要は作業ですので、ぜひ活用してください。