「ネットが遅い」…犯人は誰だ?
こんにちは!「LINUX工房」管理人の「リナックス先生」です。
前回は、キャッシュ機能をチューニングして、Squidを爆速化させる方法を学びました。
しかし、いくらサーバーをチューニングしても、一人の社員が業務中に巨大な動画ファイルをダウンロードし続けていたら、回線全体が詰まってしまいます。
そんな時、あなたは管理者として「今、誰が帯域を使っているのか?」を即座に特定できますか?
先生、それが難しいんです…。access.log を見てみたんですけど、数字の羅列ばかりでサッパリ読めなくて。
「1705482345.123」っていつですか? 未来ですか?
もっとパッと見て「田中さんがYouTube見てる!」って分かるようにしたいです。
Squidのデフォルトログは、機械が読むための形式だから人間には辛いわね。
今回は、このログを「人間が読める形式」に整形する方法と、コマンド一発で帯域ドロボウを見つけ出す監視テクニック、そして上司に提出できる綺麗なレポートを作るツール「SARG」の導入まで、徹底的にやるわよ!
本記事では、Squidのログフォーマットのカスタマイズから、Linuxコマンド駆使したリアルタイム解析、そして専用ツールによる可視化まで、ログ活用のすべてを網羅します。
🦑 Squid完全攻略講座(バックナンバー)
- 【第1回】プロキシサーバーとは?仕組みの完全図解とインストール
- 【第2回】アクセス制御の基礎(ACL)とポート設定
- 【第3回】「誰?」を識別する認証プロキシ(Basic/Digest)の構築
- 【第4回】暗号化通信の制御!HTTPSとSSL接続の仕組み
- 【第5回】爆速化!キャッシュ機能のチューニングとメモリ管理
- 【第6回】アクセスログ解析とモニタリングの極意
- 【第7回】鉄壁の守り!フィルタリング(ブラックリスト/ホワイトリスト)
- 【第8回】トラブルシューティングと冗長化構成(PACファイル)
第1章:デフォルトログの解読と限界
まずは敵を知りましょう。/var/log/squid/access.log のデフォルトの中身はこんな感じです。
1705482345.123 150 192.168.1.5 TCP_MISS/200 15432 GET http://www.yahoo.co.jp/ - HIER_DIRECT/182.22.59.229 text/html
各フィールドの意味
| 値 | 意味 | 解説 |
|---|---|---|
| 1705482345.123 | タイムスタンプ | 1970年1月1日からの経過秒数(UNIX時間)。人間には読めない。 |
| 150 | 応答時間 (ms) | 処理にかかったミリ秒。 |
| 192.168.1.5 | クライアントIP | 誰がアクセスしたか。 |
| TCP_MISS/200 | キャッシュ状態/ステータス | MISS=キャッシュになかった(取りに行った)。 HIT=キャッシュから返した(速い)。 DENIED=拒否した。 |
| 15432 | サイズ (Bytes) | 転送したデータ量。 |
| GET | メソッド | GET, POST, CONNECTなど。 |
| URL | アクセス先 | SSLバンピングなしの場合、HTTPSはドメインのみ。 |
最大の問題は「日時が直感的に分からない」ことです。
トラブル対応時、「今のログ」なのか「1時間前のログ」なのか瞬時に判断できないのは致命的です。
第2章:【必須設定】ログを見やすくカスタマイズする
Squidにはログ形式を自由に定義する機能があります。
一般的に見やすい形式(日付入り)に変更しましょう。
1. squid.confの編集
sudo nano /etc/squid/squid.conf を開き、以下の設定を追加します。
# 独自のログフォーマット "my_format" を定義 # 日時を見やすく、ユーザー名(ui)やUser-Agentも記録する logformat my_format %tl %6tr %>a %Ss/%03>Hs %h" # 定義したフォーマットを適用 access_log daemon:/var/log/squid/access.log my_format
2. 設定の反映
sudo systemctl reload squid
これで、ログが以下のように変わります。
17/Jan/2026:10:30:45 +0900 150 192.168.1.5 TCP_MISS/200 15432 GET http://www.yahoo.co.jp/ - HIER_DIRECT/... "Mozilla/5.0..."
「17/Jan/2026…」 と、日付がパッと見て分かるようになりました!
さらに、末尾にUser-Agent(ブラウザ情報)も出るので、PCなのかスマホなのかも判別可能です。
第3章:コマンドでリアルタイム監視(黒い画面の魔術)
GUIツールを入れる前に、現場のエンジニアが使う「コマンドでの速攻解析術」を伝授します。
サーバーに入って3秒で状況を把握できます。
1. リアルタイムで流し見する (tail)
sudo tail -f /var/log/squid/access.log
ログが流れる様子を眺めます。
「DENIED」(拒否)が大量に出ていないか、特定のIPばかり流れていないかを確認します。
2. 「拒否」された通信だけ抽出する (grep)
「繋がらない!」という問い合わせがあった時、拒否ログだけを見ます。
sudo grep "DENIED" /var/log/squid/access.log | tail -n 20
3. 【奥義】アクセス数ランキングを表示 (awk)
「今、誰が一番アクセスしているか?」をIPアドレスごとに集計してランキング表示するワンライナーです。
(※カスタマイズ後のログフォーマットを前提としています。列番号 $3 はIPアドレスの位置に合わせて調整してください)
sudo cat /var/log/squid/access.log | awk '{print $3}' | sort | uniq -c | sort -nr | head -10
実行結果例:
5432 192.168.1.50 ← 犯人はこのIP!
1200 192.168.1.12
800 192.168.1.5
これで、帯域を使いすぎている犯人を瞬時に特定できます。
第4章:ログローテーションの設定(ディスク溢れ防止)
アクセスログは放っておくと無限に増え続け、ディスクを埋め尽くしてサーバーを停止させます。
Linux標準の logrotate 機能を使って、定期的に圧縮・削除しましょう。
AlmaLinuxなどでSquidをパッケージインストールした場合、自動的に /etc/logrotate.d/squid が作られていますが、設定を確認・調整します。
# 設定ファイルを確認 cat /etc/logrotate.d/squid
推奨設定例:
/var/log/squid/*.log {
daily # 毎日ローテーション
rotate 90 # 90日分(約3ヶ月)保存
compress # 圧縮して容量節約
delaycompress # 圧縮を1日遅らせる(書き込みエラー防止)
missingok # ログがなくてもエラーにしない
nocreate # Squid自身がログを作るので新規作成しない
sharedscripts
postrotate
# ローテーション後にSquidにログを掴み直させる
/usr/sbin/squid -k rotate 2>/dev/null || true
endscript
}
これで、access.log.1.gz のように圧縮され、古いものは自動的に消えていきます。
第5章:【実践】可視化ツール「SARG」の導入
コマンドでの解析はエンジニアには便利ですが、上司に「この黒い画面を見てください」とは言えません。
そこで、ログを解析して綺麗なHTMLレポート(グラフ付き)を生成してくれるツール「SARG (Squid Analysis Report Generator)」を導入します。
ステップ1:SARGのインストール
AlmaLinux 9の場合、標準リポジトリにはないため、EPELリポジトリを利用するか、公式サイトからソースを入れます。
ここでは手軽なRPMパッケージを探すか、ビルド手順を紹介します。
(※環境によって異なるため、今回は汎用的なビルド手順を紹介します)
必要なコンパイラ等のインストール:
sudo dnf install gcc make wget gd-devel -y
ダウンロードとインストール:
# ソースのダウンロード(最新版を確認してください) wget https://sourceforge.net/projects/sarg/files/sarg/sarg-2.4.0/sarg-2.4.0.tar.gz # 解凍とコンパイル tar zxvf sarg-2.4.0.tar.gz cd sarg-2.4.0 ./configure make sudo make install
ステップ2:設定ファイルの編集
設定ファイルは /usr/local/etc/sarg.conf にあります。
sudo nano /usr/local/etc/sarg.conf
主な変更点:
# アクセスログの場所 access_log /var/log/squid/access.log # レポートの出力先(Webサーバーの公開ディレクトリなど) output_dir /var/www/html/squid-reports # 日付の形式 (e=dd/mm/yy) date_format e # 日本語対応(文字化け対策) charset UTF-8
ステップ3:レポートの生成
Webサーバー(Apache/Nginx)がインストールされている前提です。
以下のコマンド一発でレポートが生成されます。
sudo sarg -x
ブラウザで http://(サーバーIP)/squid-reports/ にアクセスしてみてください。
「ユーザー別」「サイト別」「時間帯別」のアクセス統計が、綺麗な表とグラフで表示されているはずです!
ステップ4:自動生成(cron)の設定
毎日深夜にレポートを自動生成するようにします。
sudo crontab -e
追記内容:
# 毎日午前1時にSARGを実行 00 01 * * * /usr/local/bin/sarg -x
第6章:ログから分かる「危険な兆候」
ログは見ているだけでは意味がありません。
以下のようなパターンを見つけたら、すぐに調査が必要です。
1. 深夜の大量アクセス
誰もいないはずの深夜2時に、特定のPCから大量の通信が発生している。
→ ウイルス感染や、不正なデータの持ち出し(バックドア)の可能性があります。
2. CONNECTメソッドの異常な多発
HTTPS(443ポート)以外のポート(22番や3389番)へのCONNECTメソッドが記録されている。
→ プロキシを踏み台にして、外部サーバーへSSHやRDP接続を試みている攻撃(トンネリング)かもしれません。
Squidの設定で、安全なポート(443, 563など)以外へのCONNECTを禁止するのが鉄則です。
3. 未知のドメインへの定期的な通信
ランダムな文字列のドメインへ、定期的(5分おきなど)にアクセスしている。
→ C&Cサーバー(攻撃指令サーバー)へのビーコン通信(ボットネット)の疑いがあります。
まとめ:ログは「サーバーの健康診断書」
お疲れ様でした!
今回は、Squid運用の中で最も発見が多い「ログ解析」をマスターしました。
今回の重要ポイント:
- デフォルトログは読みにくい。
logformatで人間用に整形する。 tail -fとgrepでリアルタイムに障害や拒否ログを監視する。logrotate設定は必須。ディスク溢れを防ぐ。- SARGを使えば、上司も納得する綺麗なレポートが自動で作れる。
これで、「誰が」「いつ」「何を」していたか、全て把握できるようになりました。
しかし、把握するだけでは不十分です。「見てはいけないサイト」へのアクセス自体をブロックしたいですよね?
次回、第7回は「鉄壁の守り!フィルタリング(ブラックリスト/ホワイトリスト)」です。
「アダルトサイト禁止」「業務外サイト禁止」といったフィルタリングルールを、テキストファイルを使って効率的に管理する方法を伝授します。
お楽しみに!
▼ エンジニアとしてのキャリアを加速させる ▼
ログ解析基盤を構築
「VPS」で自分専用環境
サーバー知識を年収に
「ITエンジニア転職」


コメント