Linux のアクセスログの場所、エラーログの場所、確認すべきログファイル、使用するコマンドについてまとめておきます。Linux/CentOS サーバーの Apache のアクセスログ、エラーログの場所を例に記載しています。
構成: レンタルサーバー(ConoHa VPS)、Linux (CentOS)、Apache
背景
サーバーをレンタルして、Linux/Apache で Webサイトを運用しています。
サーバーを運用するにあたり、セキュリティ確保などの観点で、常時、アクセスログを確認する必要が生じます。
そこで、Linux の access log、error log 等に関するコマンドや手順についてまとめておきます。
Web サイトへのアクセスログの確認方法
Apache のアクセスログの場所、エラーログの場所
Apache のアクセスログ ssl_access_log やエラーログ ssl_error_log は、デフォルトの設定で、以下の場所に出力されます。
/var/log/httpd
Apache のログファイルの一覧表示
ログファイルの一覧は、つぎのコマンドを実行することで表示できます(デフォルト設定で)。
# ls -alh /var/log/httpd/ ※1 CentOS の場合
・ Ubuntu の場合は、/var/log/apache2/ の下にありますので、”ls -alh /var/log/apache2/” となります。
・ 設定がデフォルトのままとなっている場合は、このあたりを探せばログファイルが出てくると思います。
・ ファイル名について、サイトを SSL化している場合、SSLでのアクセスログ、エラーログのファイル名は ssl_access_log、ssl_error_log となっていると思います。
SSLではないアクセスは、access_log、error_log となっていると思います。
・ ls -al ではなく、ls -alh として、-h オプションをつけています。
・ -h オプションをつけたのは、単位をバイトから、キロバイト(K)、メガバイト(M)とするためです。表示されたファイルの単位に K や M がついている場合は、そのままログを表示をさせると表示に時間がかかります。
・ なお、Permission denied と表示される場合は、管理者の権限でサーバーにログインする必要があります。
Apache のアクセスログ access_log 及びエラーログ error_log の内容を表示する
以下のコマンドで、Apache の各ログファイルの内容を表示できますが、ファイルサイズが大きい場合、単純に表示をすると、負荷がサーバーにかかるため注意が必要です。下の項目で挙げているように、アクセス回数でランキングを取るようにすると、表示にかかる処理を軽くできると思います。
# cat /var/log/httpd/ssl_access_log ※2
# cat /var/log/httpd/access_log
# cat /var/log/httpd/ssl_error_log ※3
# cat /var/log/httpd/error_log
・ ログファイルの中身は、アクセス元とアクセス先(自分のサイトのページ)などとなっています。
・ 過去のログファイル(※1で表示させた、日付つきのファイル)の内容についても、これらのコマンドとおなじ要領で、表示させることが可能です。
・ もし、アクセスログ access_log やエラーログ error_log に異常なアクセスが見つかったら、過去の日付に遡って確認していくことが可能です。
アクセス回数でランキングを取る場合
アクセス数によってアクセス元のランキングを取る場合は、例えば以下を実行してみてください。ログの各行を1件とカウントして、ランキングを集計します。
# cat /var/log/httpd/ssl_access_log | cut -d " " -f 1 | sort | uniq -c | sort -n ※4
あるいは
# cat /var/log/httpd/ssl_access_log | cut -d " " -f 1 | sort | uniq -c | sort -nr (降順とする場合)
・ ここで、”cut … -f 1 ” としたところで、スペース ” ” でカットして、1つ目の文字列を取得しています。
ログファイルのフォーマットにより、切り出す文字 ” ” や、切り出す場所 ” -f 1 ” の値は変えてみてください。
・ また、ファイル名 ssl_access_log は、上記で表示させたファイル名です。適宜、差し替えて使ってください。
・ エラーログを解析する場合、まずは体裁は無視し、以下のあたりでアクセスの多い IP アドレスを取得できるかと思います。
# cat /var/log/httpd/ssl_error_log | cut -d " " -f 11 | sort | uniq -c | sort -n
アクセスログとエラーログの場所の確認方法
なお、デフォルトの出力場所を探してもログファイルが見つからない場合、アクセスログの場所を定義している /etc/httpd/conf/httpd.conf を参照することで確認できます。
以下のコマンドで、アクセスログとエラーログの場所を確認できると思います。
# vi /etc/httpd/conf/httpd.conf
・ CustomLog …で始まる行と、ErroLog … で始まる行に、出力場所が定義されていると思います。
ログイン記録の確認方法
サーバーのログイン履歴は、以下で確認できます。
# last -n 30 ※5 (表示数の 30 は自由に変えてください)
# lastlog
# lastb | more ※6 [space] キーでつぎのページを表示します。"q" で表示を中断します。
・ ※5で、ログイン記録を確認できます。ログインに成功した履歴を表示させる場合です。
自分の IPアドレスか、サーバーのレンタル会社の IPアドレス程度しかないはずです。
・ 一方、※6は、ログインに失敗した履歴です。
各ユーザ名で SSH 接続を試みた履歴、元IPアドレスが表示されると思います。
もし、※6で、アクセス数が多い場合は、以下のようにして、ランキングを取得することができます。Linux 環境によっては表示が変わる可能性もあるため、適宜、アレンジしてみてください。
# lastb | cut -d ":" -f 2 | cut -d " " -f 5 | sort | uniq -c | sort -nr ※7
・ 通常、ログインの成功履歴(※5)と失敗履歴(※6)をセットで確認していくことになると思います。
稼働中のサービスの確認方法
Apache など、稼働中のサービスは以下で確認できます。(どちらでも可)
# systemctl list-unit-files -t service
# systemctl list-unit-files -t service | grep -e enabled
・ 最初のコマンド(grep を入れていないもの)を実行した場合、[space] キーを押すと次のページが表示されます。[q] キーで終了します。
・ Web サーバー(Apache)が稼働中であれば、httpd.service は enabled になっているはずです。
・ また、ファイアウォール firewalld.service も、つねに enable になっている(enable にしておく)必要があります。動いていなければ、速やかに稼働させましょう。
異常なアクセスがあったとき
上記のコマンドでログを確認して、異常なアクセスがあったとき、対策をする必要が出てきます。
アクセスの種類と典型的な対策例をパターン分けすると、以下となります。
アクセス対象 | アクセス経路 | アクセス管理/ログイン時の権限 | アクセスする人 | 主な用途 | ログファイル /履歴確認コマンド |
セキュリティ対策の例 |
---|---|---|---|---|---|---|
レンタルサーバー会社の管理ページ サーバー(コンソール画面) |
ブラウザ | サーバー契約時のパスワード管理 管理者権限(root) |
・ 管理者(自分) | サーバー費用の支払い サーバーの構築/設定/管理 |
ssl_access_log ssl_error_log last -n 30 lastb |
パスワード管理 二段階認証の設定も可 |
サーバー(コンソール画面) | SSH 接続 | 管理者権限(root) | – | – | – | 管理者権限(root)でのログインができないよう設定しておく |
サーバー(コンソール画面) | SSH 接続 | 一般ユーザー権限 | ・ 自分 ・ 攻撃者 |
サーバーの通常使用 | レンタルサーバー会社のサイトから管理者権限でログインして last -n 30 lastb |
公開鍵認証の設定をしておく IPアドレスでの制限も可 |
サイト(HTTP)のページ | ブラウザ | なし | – | – | access_log error_log |
Webサイトを HTTPS 化しておく HTTP でのアクセスをしないよう設定しておく |
サイト(HTTPS)のページ | ブラウザ | なし | ・ 一般ユーザー ・ 管理者(自分) ・ 攻撃者 |
ネット検索からのアクセス | ssl_access_log ssl_error_log |
異常なアクセスがあったときはIPアドレスで排除(.htaccess) |
サイトの管理画面 (ワードプレス) |
ブラウザ | パスワード管理 | ・ 管理者(自分) ・ 攻撃者 |
記事の作成/追加 サイトの修正 |
ssl_access_log ssl_error_log |
・ ログイン画面に自分のIPアドレスだけがアクセスできるよう設定しておく ・ プラグイン SiteGuard WP Plugin などでセキュリティを強化 |
前述の ※2、※3で、サイトへの異常なアクセスがある場合は、サイトが重くなったり、ワードプレスの管理者としてログイン等をされてしまう危険があります。
以下のリンクで、主な対策の例などをまとめていますので、参考にしてみてください。
・ Web サーバーへの異常なアクセスを排除する 【Linux】
・ ログイン画面へのアクセスを IP アドレスで制限する方法【WordPress】
また、※5、※6で、Web サーバーに異常なログインが試みられている場合、時間が経つとパスワードが破られる可能性があります(ブルートフォース攻撃など)。
SSH のログインに関しては、Tera Term などのソフトウェアで公開鍵認証方式の設定をするのがオーソドックスな対策です。未設定の場合は、設定を済ませてしまいましょう。グーグル検索をすると、設定方法が多数出てくると思います。
加えて、root での SSH ログインを禁止しておくのが安心です。手順は以下にまとめています。参照してみてください。
・ root での SSH ログインを禁止する 【Linux】
まとめ
Linux/Apache の log(アクセスログ、エラーログなど)の場所、よく使うコマンドについてまとめました。
異常なアクセスがないかなど、このあたりを確認すれば、まずは安心できるかと思います。
異常なアクセスがあったときは対策等についてもまとめています。
もし関心があるようでしたらリンクを参考にしてみてください。
関連リンク
・ アパッチ Apache とは何か
・ サーバーの管理画面での定型作業まとめ 【VPS】
・ よく使う Web サーバー関連コマンド 【Linux】
・ Webサーバーへのアクセスをリアルタイムで確認する 【Linux】
・ ログイン画面へのアクセスを IP アドレスで制限する方法 【WordPress】
・ Web サーバーへの異常なアクセスを排除する 【Linux】
・ ファイアーウォール関連でよく使うコマンド 【Linux】
・ パーミッション関連でよく使うコマンド 【Linux】
・ SSL 証明書の自動更新まとめ 【Let’s Encrypt】