Linuxのアクセスログを確認する方法|場所・見方・活用例をわかりやすく解説

Linux

Linuxサーバーを運用していると「どんなアクセスが来ているのか確認したい」「不審なアクセスや攻撃がないかチェックしたい」と思うことがよくありますよね。

こんな場面で必要になります

  • Webサイトにどのくらいアクセスが来ているか知りたい
  • 特定のページでエラーが頻発していないか確認したい
  • 不正アクセスや攻撃の痕跡を調べたい
  • サーバーへのSSHログイン履歴をチェックしたい
  • システムの問題を調査したい

そんなとき頼りになるのがアクセスログです。

この記事では、Linuxで代表的なアクセスログの場所と確認方法、実際の活用例を初心者向けにわかりやすく紹介します。コマンドをコピペして試すだけで、すぐにサーバーの状況が把握できるようになりますよ!

スポンサーリンク
  1. Linuxでのアクセスログの種類と場所
    1. Webサーバーのアクセスログ
    2. SSHログイン(サーバーアクセス)履歴
    3. その他の重要なログファイル
  2. アクセスログの基本的な見方
    1. tailコマンドでリアルタイムに監視
    2. 過去のログを確認する方法
    3. ログファイルのサイズを確認
  3. 代表的なログフォーマットの読み方
    1. Apacheのアクセスログ例
    2. Nginxのアクセスログ例
    3. SSHログの例
  4. 実用的なアクセスログ解析コマンド
    1. 特定IPからのアクセス数を調べる
    2. アクセス数の多いIPアドレスTop10
    3. 特定のステータスコードを調べる
    4. 時間帯別のアクセス解析
    5. 人気ページのランキング
    6. 特定の文字列を含むアクセスを検索
  5. 日付範囲でログを絞り込む
    1. sedを使った日付範囲指定
    2. awkを使ったより柔軟な検索
  6. ログファイルが大きい場合の対処法
    1. ログローテーションの確認
    2. 圧縮されたログの確認
    3. 大きなファイルの効率的な処理
  7. セキュリティ監視でよく使うコマンド
    1. 不正アクセスの検出
    2. アクセス元の地理的分析
  8. よくある質問
    1. Q:ログファイルが見つからない場合はどうすればいいですか?
    2. Q:ログの容量が心配です。自動削除される設定になっていますか?
    3. Q:リアルタイムでアクセス数をカウントしたいのですが?
    4. Q:ログから個人情報を除外したいのですが?
  9. まとめ:アクセスログでサーバーを守ろう

Linuxでのアクセスログの種類と場所

Webサーバーのアクセスログ

多くのLinuxサーバーではApacheやNginxが使われていて、それぞれアクセスログが標準で設定されています。

Apache(アパッチ)

CentOS/RHEL系

/var/log/httpd/access_log

Ubuntu/Debian系

/var/log/apache2/access.log

エラーログも一緒に確認

/var/log/httpd/error_log        # CentOS/RHEL系
/var/log/apache2/error.log      # Ubuntu/Debian系

Nginx(エンジンエックス)

アクセスログ

/var/log/nginx/access.log

エラーログ

/var/log/nginx/error.log

これらのログには、アクセスがあるたびにリクエスト元IP、アクセス時刻、URL、ステータスコードなどが記録されます。

SSHログイン(サーバーアクセス)履歴

サーバー自体へのログイン履歴も重要なアクセスログです。

CentOS/RHEL系

/var/log/secure

Ubuntu/Debian系

/var/log/auth.log

全ディストリビューション共通

/var/log/messages    # システム全般のログ
/var/log/syslog      # システムログ(Ubuntu/Debian)

これらには以下の情報が記録されます:

  • SSHログインの成功・失敗
  • sudo実行の履歴
  • ユーザーの認証情報
  • システムサービスの起動・停止

その他の重要なログファイル

FTPアクセスログ

/var/log/vsftpd.log     # vsftpd使用時
/var/log/proftpd.log    # ProFTPD使用時

メールサーバーログ

/var/log/maillog        # Postfix等
/var/log/mail.log       # Ubuntu/Debian系

アクセスログの基本的な見方

tailコマンドでリアルタイムに監視

基本の使い方

tail -f /var/log/nginx/access.log

このコマンドを実行すると、新しいアクセスがあるたびにその行をリアルタイムで確認できます。Ctrl + Cで終了します。

複数のログを同時に監視

tail -f /var/log/nginx/access.log /var/log/nginx/error.log

最新の50行を表示してから監視開始

tail -n 50 -f /var/log/nginx/access.log

過去のログを確認する方法

最初の10行を表示

head /var/log/nginx/access.log

最後の20行を表示

tail -n 20 /var/log/nginx/access.log

ページ単位でスクロール表示

less /var/log/nginx/access.log

lessコマンドでは以下の操作ができます:

  • スペースキー:次のページ
  • b:前のページ
  • /:文字列検索
  • q:終了

ログファイルのサイズを確認

ls -lh /var/log/nginx/access.log

大きなログファイルは処理に時間がかかるので、事前にサイズを確認しておくと良いでしょう。

代表的なログフォーマットの読み方

Apacheのアクセスログ例

192.168.1.100 - - [30/Jun/2025:12:34:56 +0900] "GET /index.html HTTP/1.1" 200 1234 "https://example.com" "Mozilla/5.0"

各項目の意味

  1. 192.168.1.100:アクセス元のIPアドレス
  2. :リモートログ名(通常は-
  3. :認証ユーザー名(認証なしなら-
  4. [30/Jun/2025:12:34:56 +0900]:アクセス日時
  5. “GET /index.html HTTP/1.1”:HTTPリクエスト内容
  6. 200:HTTPステータスコード
  7. 1234:レスポンスサイズ(バイト)
  8. “https://example.com”:リファラー(参照元URL)
  9. “Mozilla/5.0”:ユーザーエージェント(ブラウザ情報)

Nginxのアクセスログ例

203.0.113.1 - - [30/Jun/2025:12:34:56 +0900] "GET /api/users HTTP/1.1" 404 162 "-" "curl/7.68.0"

基本的にはApacheと同じ形式ですが、設定によって項目が増減することがあります。

SSHログの例

Jun 30 12:34:56 myserver sshd[12345]: Accepted publickey for user from 192.168.1.100 port 22 ssh2
Jun 30 12:35:10 myserver sudo: user : TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/bin/ls

重要な項目

  • Accepted publickey:SSH認証成功
  • Failed password:パスワード認証失敗
  • sudo:管理者権限でのコマンド実行

実用的なアクセスログ解析コマンド

特定IPからのアクセス数を調べる

grep "192.168.1.100" /var/log/nginx/access.log | wc -l

特定期間のアクセス数

grep "30/Jun/2025" /var/log/nginx/access.log | grep "192.168.1.100" | wc -l

アクセス数の多いIPアドレスTop10

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

特定のステータスコードを調べる

404エラーのみ抽出

grep ' 404 ' /var/log/nginx/access.log

エラーコード別の件数

awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr

時間帯別のアクセス解析

時間別アクセス数

awk '{print $4}' /var/log/nginx/access.log | cut -c14-15 | sort | uniq -c

人気ページのランキング

アクセスの多いURLトップ10

awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

特定の文字列を含むアクセスを検索

SQLインジェクション攻撃の検出

grep -i "union\|select\|insert\|update\|delete" /var/log/nginx/access.log

ボット・クローラーのアクセス

grep -i "bot\|crawler\|spider" /var/log/nginx/access.log

日付範囲でログを絞り込む

sedを使った日付範囲指定

特定の1日のログのみ

sed -n '/30\/Jun\/2025/p' /var/log/nginx/access.log

特定時間帯のログ(12時台)

sed -n '/30\/Jun\/2025:12:/p' /var/log/nginx/access.log

awkを使ったより柔軟な検索

特定時間以降のアクセス

awk '$4 >= "[30/Jun/2025:12:00:00" && $4 <= "[30/Jun/2025:18:59:59"' /var/log/nginx/access.log

ログファイルが大きい場合の対処法

ログローテーションの確認

ls -la /var/log/nginx/

通常、ログは自動的にローテーション(日付別分割)されます:

  • access.log:現在のログ
  • access.log.1:1日前のログ
  • access.log.2.gz:2日前のログ(圧縮済み)

圧縮されたログの確認

# 圧縮ログの中身を確認
zcat /var/log/nginx/access.log.2.gz | head

# 圧縮ログから検索
zgrep "192.168.1.100" /var/log/nginx/access.log.*.gz

大きなファイルの効率的な処理

ファイルサイズが大きい場合の分割処理

split -l 100000 /var/log/nginx/access.log access_part_

セキュリティ監視でよく使うコマンド

不正アクセスの検出

ブルートフォース攻撃の検出

grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr

短時間に大量アクセスしているIP

awk '{print $4, $1}' /var/log/nginx/access.log | grep "30/Jun/2025:12:" | awk '{print $2}' | sort | uniq -c | sort -nr | head -5

異常なUser-Agentの検出

awk -F\" '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

アクセス元の地理的分析

外部IPアドレスの確認

awk '{print $1}' /var/log/nginx/access.log | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | grep -v "^192\.168\." | grep -v "^10\." | grep -v "^172\." | sort | uniq -c | sort -nr

よくある質問

Q:ログファイルが見つからない場合はどうすればいいですか?

A:設定ファイルでログの出力先を確認してください。Apache なら/etc/httpd/conf/httpd.conf、Nginxなら/etc/nginx/nginx.confを確認しましょう。

Q:ログの容量が心配です。自動削除される設定になっていますか?

A:通常はlogrotateで自動管理されています。/etc/logrotate.d/ディレクトリの設定を確認してください。

Q:リアルタイムでアクセス数をカウントしたいのですが?

A:tail -fwc -lを組み合わせるか、専用ツール(GoAccess、awstats等)の使用をおすすめします。

Q:ログから個人情報を除外したいのですが?

A:IPアドレスを匿名化する設定や、特定の情報を記録しない設定が可能です。各Webサーバーの設定ファイルで調整できます。

まとめ:アクセスログでサーバーを守ろう

この記事で紹介した主要コマンド

目的コマンド例
リアルタイムでログ監視tail -f /var/log/nginx/access.log
過去のログをじっくり確認less /var/log/nginx/access.log
IPごとのアクセス件数grep "IP" ログファイル | wc -l
エラーコードだけを抽出grep ' 404 ' /var/log/nginx/access.log
アクセス数Top10のIPawk '{print $1}' ログファイル | sort | uniq -c | sort -nr | head -10
人気ページランキングawk '{print $7}' ログファイル | sort | uniq -c | sort -nr | head -10

覚えておくべきポイント

  • WebサーバーログSSHログは分けて管理されている
  • tail -fでリアルタイム監視ができる
  • grepawkの組み合わせで柔軟な解析が可能
  • ログローテーションで古いログは自動的に圧縮・削除される
  • セキュリティ監視には定期的なログチェックが重要

アクセスログはサーバー運用やセキュリティ対策の第一歩です。これらの方法を使って、あなたのLinuxサーバーを安全に運用してください。

コメント

タイトルとURLをコピーしました