MacBook Air M4 × 自作スクリプト|ログ解析を秒速で終わらせる「自分専用」防衛ツールの構築術 | UNIX Cafe

当サイトでは、コンテンツの一部に広告を掲載しています。
【実録】ログ解析スクリプト「check_all.sh」の全貌| UNIX Cafe

UNIX Cafe | 第97回

目次

ブログ運営者のためのログ監視環境|MacBook Air M4 × UNIX

「薄くて軽い」だけなら、これまでの MacBook Air と大きな違いはありません。
けれど、M4 チップの余裕ある処理性能とバッテリーの持ちは、ブログ運営者にとって“持ち歩ける作業拠点”が、より頼もしい存在になったことを意味します。

私は日々、複数のサイトの成果を確認しながら、アクセスログのチェックや不審な動きの確認を行っています。常に張り付いて監視しているわけではありませんが、毎日ログを抽出し、怪しいIPを洗い出し、必要に応じて対処する。そうした地道な作業の積み重ねが、サイトを安心して運営するための土台になります。

MacBook Air M4 は、こうしたブログ運営の裏側の仕事を、静かに、そして軽快に支えてくれる存在です。本記事では、ログ解析をシェルスクリプトで効率化し、最終判断は自分の目で行うという私の運用スタイルが、この一台によってどのように快適になったのかをご紹介します。

STEP
フェーズ 1:収集と待機

ログの源泉 (The Cloud): 24時間 365 日、世界中からのアクセスを記録し続けているのは、サイトが動いているレンタルサーバーです。ここには膨大な「生データ」が蓄積されています。

解析の司令室 (The Lab): 自宅の Mac mini M4 や、カフェに持ち出した MacBook Air M4 は、そのデータを「知恵」に変えるための拠点です。

接続 (Secure Link): 固定 IP 付きの VPN を通じて、サーバーにある最新のログを安全に手元へ引き寄せ、解析の準備を整えます。

STEP
フェーズ 2:解析(MacBook Air M4 の出番)

高速処理 (M4 Power): 自作スクリプト check_all.sh を実行。M4 チップのパワーで膨大なログを秒速で走査します。

抽出 (The Pipeline): grep / awk / sort を組み合わせ、無数のアクセスから「不審な IP」だけを炙り出します。

STEP
フェーズ 3:決断(管理者の判断)

正体判別 (Verification): 抽出された IP を whois で検証。有名クラウドか、あるいは悪意あるスキャンかを人間が判断します。

デプロイ (Final Defense): 拒否すべき IP を .htaccess に追記し、サーバーへ反映。サイトの安全を確定させます。

「抽出したIPをどうやって.htaccessに書けばいいの?」という方は、こちらの記事で具体的な書き方を解説しています。

あわせて読みたい
【Apache 2.4対応】攻撃者を「出禁」にするスマートな.htaccess防衛術 | UNIX Cafe UNIX Cafe | 第96回 ログ解析は自動、遮断は手動:私が辿り着いた「ハイブリッド防衛術」 お気に入りのコーヒーを淹れ、Google Adsenseやアフィリエイトサイトの成果...

この回でできるようになること

  • ログから wp-login / xmlrpc だけを抜き出し、「怪しい動き」だけを見られるようになる
  • awk で IP を取り出し、**攻撃者ランキング(Top10)**を作れるようになる
  • ランキング結果を見て、次にやるべき行動(確認・記録・対処)が分かる

難しい理論は後回しで大丈夫です。
読み終わったら、あなたのターミナルにもこのページのサンプルと同じ「ランキング表」が出ます。

必要なアクセスは残す。不正アクセスだけを「ログで仕分け」する

「不正アクセス対策」と聞くと、 “全てをブロックしたくなる”かもしれません。
でも、手当たり次第に全てのIPをブロックすると困ったことが起こります。

たとえば、こんなアクセスは止めたくありません。

  • Google などの検索エンジンの巡回(SEOに関わります)
  • 外部サービスの通知や連携(フォーム・決済・APIなど)
  • そして、あなた自身の管理画面アクセス
  • CDN / WAF / 死活監視(UptimeRobot等)のアクセス

IPアドレスを厳選する

無作為にIPを選んでブロック(=誤ブロック)してしまうと、必要なお客さんまで巻き込んでしまい、次のようなトラブルが発生します。

  • サイトが急に表示されない
  • WordPressにログインできない
  • サイトの機能が止まる

特に危険なのが、自分自身のIPを遮断してしまうケースです。
管理画面へのアクセスが遮断され、WordPressにログインできなくなるので注意が必要です。

そこで、 check_all.sh の登場です。

このスクリプトは、ログの中から 狙われやすい入口(wp-login / xmlrpc)だけを抜き出し、さらに 誰が何回試したかをランキングで表示することができます。

つまり、「遮断していい相手」を数字で特定できるということです。

この準備が整うと、次にやる作業(whoisで確認 → .htaccessでブロック)を、迷わずスムーズに進められます。

では次に、ログの中からwp-login / xmlrpc だけを抜き出し、IPを回数順に並べて「遮断候補」を見える化していきます。

スクリプトの設計図:UNIX哲学を体現する

このスクリプトは、複雑なAIや重いソフトウェアを使いません。以下の4つのフェーズを、パイプ(|)で繋ぐだけで完成します。

  1. 収集: リモートサーバーから最新のログを取得
  2. フィルタリング: 自分のアクセスを除外
  3. 抽出: 攻撃者が狙う「急所」へのアクセスを特定
  4. 整形: 攻撃回数順にランキング化

完成したランキング表

このスクリプトを実行すると、不正アクセスの「回数が多いIPが上に並ぶ表」を、いつでも必要な時に出せるようになります。

>>> サーバーから最新のログを取得中...
--- 攻撃者ランキング (Top 10) ---
  20 4.223.96.43
  19 173.244.55.55
   7 141.98.11.44
   6 104.215.29.182
   5 62.60.130.210
   5 4.217.197.7
   5 141.98.11.23
   4 4.214.32.32
   4 4.194.99.179
   4 4.189.120.199
----------------------------------------------------------
解析完了。上位のIPに対して whois 検証を行ってください。

あなたの環境に合わせるための3つの材料

スクリプトの仕組みはシンプルですが、あなたの環境で動作させる「材料」が3つ必要です。

  • 自分のIPアドレス(例:123.45.67.89)
  • ログファイル(例:access.log)
  • 見張る入口(例:wp-login.php / xmlrpc.php)

この3つの情報がわかれば、あとは設定を書き換えるだけで動かすことができます。

まだ、自分の固定IPアドレスを持っていない人は、1コインで使える【ロリポップ!固定IPアクセス】が便利です。固定IPアドレスを使うことで、Google アナリティクスのフィルター機能や、レンタルサーバーのホワイトリスト登録なども設定することができます。

【新機能】セキュリティ監査・トラブル対応を強化する「ログ機能」が登場

Lolipop VPN(固定IPアクセス)に、待望のログ記録オプションが加わりました。 「いつ、誰が、どこからアクセスしたか」を正確に把握することは、現代のシステム運用における「内部統制」と「安全確保」の基本です。

エンジニア・管理者に選ばれる3つのポイント:

  1. 確かな証跡管理: 接続元IPやハンドシェイク履歴を最長6ヶ月間保存。セキュリティ監査にも即座に対応可能です。
  2. 迅速な解析: 管理画面からCSV形式で一括ダウンロード。トラブル発生時の原因究明をスピードアップさせます。
  3. 圧倒的な低コスト: 1ライセンスあたり月額110円(税込)。自前でログサーバーを構築・保守する手間とコストを最小化します。

VPNによるセキュアなアクセスに、「記録」という安心を。 あなたの管理環境の信頼性を、さらに一段階引き上げましょう。

👉 ロリポップ!固定IPアクセス

4つのステップで構築する「自分専用」の防衛ツール

Step 1:ノイズを消し、急所を張る

まずは、膨大なログから「自分自身」のIPアドレスを除外し、攻撃者が必ず狙う WordPress のログイン画面(wp-login.php)などへのアクセスだけに絞り込みます。

# 自分のIP(123.45.67.89)を除外し、ターゲットを絞り込む
grep -v "123.45.67.89" access.log | grep -E "wp-login.php|xmlrpc.php"

Point: この一行だけで、画面には「自分以外の第三者が、こじ開けようとした記録」だけが流れます。

なぜ wp-login と xmlrpc は狙われるの?

wp-login.php は、WordPress に入るための正面玄関です。
ですから攻撃用ボットも、まずここを試します。

xmlrpc.php も、外部から操作できる窓口として使われることがあり、狙われやすい場所です。

最初は、この2つを「見張りポイント」にすることで、観察のコツを掴んでいきましょう。

ログイン画面を守るもう一つの強力な武器として「SiteGuard」というプラグインも有名です。これについては、また別の回で詳しくご紹介できればと思います。

Step 2:「誰が」来たのかを特定する

記録の中に含まれる時刻やブラウザ情報は、ここでは不要です。awk を使って、1列目のIPアドレスだけを抜き出します。

grep -E "wp-login.php|xmlrpc.php" access.log | awk -v ip="123.45.67.89" '$1 != ip {print $1}'

ログは物語です。IPアドレスは登場人物の名前。
まずは「名前だけを抜き出す」と、世界が一気に整理されます。

Step 3:攻撃の「熱量」を可視化する

バラバラのIPを並べ替え、同じIPが何回アクセスしたかをカウントします。

# sort で並べ、uniq -c で回数を数え、sort -nr で多い順に並べる
grep -v "123.45.67.89" access.log | grep -E "wp-login.php|xmlrpc.php" | awk '{print $1}' | sort | uniq -c | sort -nr

Point: これで「攻撃者ランキング」の完成です。上位に並ぶIPこそが、今すぐ対処すべき「要注意候補」です。

小さな道具が並べて、パイプでつなぐ

  • grep:ふるい(必要なものだけ残す)
  • awk:切り出し(欲しい部分だけ抜く)
  • sort:整列(並べて見やすくする)
  • uniq -c:集計(同じものを数える)
  • sort -nr:ランキング化(多い順に並べる)

どれも単体では小さい道具ですが、繋ぐとログの「観測装置」になります。

Step 4:完成!リモート解析スクリプト

最後に、これらを一つのファイルにまとめ、サーバーから自動でログをダウンロードする工程を加えます。

#!/bin/bash
set -euo pipefail

MY_IP="123.45.67.89"
FTP_HOST="ftp.example.com"
REMOTE_LOG="/logs/access.log"

tmp="$(mktemp)"
trap 'rm -f "$tmp"' EXIT

echo ">>> サーバーから最新のログを取得中..."
curl -s --netrc "ftp://${FTP_HOST}${REMOTE_LOG}" -o "$tmp"

echo "--- 攻撃者ランキング (Top 10) ---"
grep -E "wp-login.php|xmlrpc.php" "$tmp" \
  | awk -v ip="$MY_IP" '$1 != ip {print $1}' \
  | sort | uniq -c | sort -nr | head -n 10

echo "----------------------------------------------------------"
echo "解析完了。上位のIPに対して whois 検証を行ってください。"

.netrc を作成する

スクリプトを実行する前に.netrcを作成します。そうすることで、IDやパスワードを使わずに安全にサーバーに接続することができます。

vi ~/.netrc # FTPの設定内容を保存
chmod 600 ~/.netrc # 自分だけが読める設定に変更

詳しい設定方法は、次の章の「実際に動かしてみた結果」の後に書いています。

スクリプトを実行する

  • スクリプトを、「check_all.sh」という名前で保存
  • chmod +x で実行ファイルに変更
  • ./check_all.sh で実行
chmod +x check_all.sh # ファイルに実行権限を追加する
./check_all.sh       # ファイルを実行する

ここまでできたら、あとは実行するだけです。
“手作業で眺めるログ”が、“毎日同じ形式で出てくる表”に変わります。

実際に動かしてみた結果

このスクリプトを走らせると、ターミナルに以下のような「要注意候補」が表示されます。

>>> サーバーから最新のログを取得中...
--- 攻撃者ランキング (Top 10) ---
  20 4.223.96.43
  19 173.244.55.55
   7 141.98.11.44
   6 104.215.29.182
   5 62.60.130.210
   5 4.217.197.7
   5 141.98.11.23
   4 4.214.32.32
   4 4.194.99.179
   4 4.189.120.199
----------------------------------------------------------
解析完了。上位のIPに対して whois 検証を行ってください。

ランキング1位のIPは、短時間に20回もログインを試みています。これが、スクリプトが教えてくれた「今、観察すべき相手」です。

結果を見たら、次にやることは3つだけ

  1. 上位3つのIPをメモする
  2. 他の管理サイトでも同じIPが出るか確認する(複数サイト管理の強み)
  3. 「増えた・減った」を記録して、傾向をつかむ

この工程だけで、攻撃用ボットからの防衛が「不安」から「運用」に変わります。

.netrc の作成方法

.netrc は、FTPやcurlがログインするときの「IDとパスワード」を保存しておくメモ帳みたいなものです。

これを使うと、

  • スクリプト内に パスワードを書かなくて済む
  • curl –netrc のようにして 安全に自動ログインできる

というメリットがあります。

.netrc を作る場所

Mac / Linux なら、基本は ホームディレクトリ(~)直下に作ります。

vi ~/.netrc

書き方(最小の例)

machine ftp.example.com
login your_ftp_user
password your_ftp_password

各行の意味

  • machine:ログイン先のサーバー名(FTPホスト名)
  • login:FTPユーザー名
  • password:FTPパスワード

※ FTPソフトの設定内容と同じです。

超重要:権限を絞る(これを忘れると危険)

.netrc はパスワードが入るので、自分だけが読める状態にします。

chmod 600 ~/.netrc

確認:

ls -l ~/.netrc

-rw——- みたいになっていればOKです。

FTP_HOST と .netrc の “machine” は一致させる

例:スクリプトが ftp.example.com なら、.netrc も machine は同じに。

machine ftp.example.com
login your_id
password your_password

動作テスト(スクリプトの前に試す)

REMOTE_LOG の設定が /logs/access.log ならば、このように試せます。

curl --netrc ftp://ftp.example.com/logs/access.log -o /tmp/access_test.log

「ftp.example.com/logs/access.log」

この部分をサーバーの環境に合わせてください。ファイルが取れていれば成功です。

やってはいけないこと(事故ポイント)

  • .netrcGitHubに入れる(公開事故の王道です)
  • 記事に 実ユーザー名/実パスワード/実ホスト名 をそのまま書く
  • 権限 chmod 600 を忘れる

もし記事内で例を書くなら、いまの下書きのように
ftp.example.com / your_ftp_user などの ダミー表記にしてください。

2026年、ブログ運営を支える『最強の投資』

数万行のログを秒速で処理する、圧倒的なレスポンス

まとめ:道具を使いこなし、主導権を握る

MacBook Air M4という最新のハードウェアの上で、30年以上変わらない UNIXコマンド を繋げて、世界中からの攻撃をスクリプト1つで防御する。

このスクリプトが吐き出した結果を元に、whois で検証し、.htaccess を編集してセキュリティを強化する。この「道具と人間のハイブリッド」な防衛術こそが、多サイト管理を安定させる最適解だと思います。

ここに掲載したスクリプトは最小構成ですが、このコードに自分の欲しい機能を追加して、皆さんもぜひ、自分だけの check_all.sh を育ててみてください。

さらに学びたいあなたへ

📘 用途ごとに選ぶ Linux のおすすめ本

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

Created by UNIX Cafe

目次