{}const=>[]async()letfn</>var
基礎開発キャリア

「誰が私のサーバーをノックしているのか?」—ログを読み、ハッカーの手を捕まえる

アクセスログを細かく分析します。ブルートフォース、SQLインジェクション、脆弱性スキャンが実際のログでどのように見えるか、どのコマンドが攻撃を1分で見つけるのに役立つか、そして疑わしいものを見つけたときに何をすべきかを説明します。

К

Kodik

著者

2分で読める

あなたは最初のサーバーを起動し、アプリケーションをデプロイしました。美しい。しかし、ある日ログを開くと、まるで別の惑星からのメッセージのように見える何百もの行が表示されます。この人たちは誰ですか?WordPressもないのに、なぜ誰かが/wp-login.phpをノックするのでしょうか?そして、午前3時のPOSTリクエストとは何でしょうか?一緒に見ていきましょう。

🔍ログファイルの構造

Nginxアクセスログから典型的な行を取得します。

access.log

185.220.101.42 - - [15/Feb/2026:03:14:22 +0300] "GET /admin HTTP/1.1" 404 162 "-" "Mozilla/5.0"

細かく分析してみましょう。

  • 185.220.101.42 — リクエストを行ったユーザーのIPアドレス

  • [15/Feb/2026:03:14:22] — 日時

  • GET /admin HTTP/1.1 — メソッド、パス、プロトコル

  • 404 — 応答コード(ページが見つかりません)

  • 162 — バイト単位の応答サイズ

  • Mozilla/5.0 — ユーザーエージェント(ブラウザまたはボット)

無害に見えますか?それでは、1つのIPから1分間に1000行のようなものが送られてくることを想像してみてください。そして、それらすべてが異なる方法でノックしています。ここからが面白いところです。

🔥 10万人以上の学生が参加中

理論を読むのに疲れた?
コーディングの時間だ!

Kodik — 実践でプログラミングを学ぶアプリ。AIメンター、インタラクティブなレッスン、実際のプロジェクト。

🤖 AI 24時間
🎓 修了証
💰 無料
🚀 始める
今日参加

🚩 赤い旗:攻撃の兆候

1 ディレクトリのブルートフォース攻撃

ボットは、何か興味深いものに出会うことを期待して、標準的なパスを並べ替えます。

185.220.101.42  GET /admin           404185.220.101.42  GET /wp-admin        404185.220.101.42  GET /phpmyadmin      404185.220.101.42  GET /.env            403185.220.101.42  GET /backup.sql      404185.220.101.42  GET /.git/config     200  ⚠️ НАШЁЛ!

⚠️ 危険

もし404エラーが点滅している場合 200 — 何かが本当に利用可能であることを意味します。ファイル .env, .git/config, backup.sql 一度もない サーバーから返されないようにする必要があります。

2 ブルートフォース認証

何十回ものログイン試行に失敗しました。誰かがパスワードを試行しています。

POST /login  401POST /login  401POST /login  401POST /login  401POST /login  200  ⚠️ ПОДОБРАЛ ПАРОЛЬ!
  • 1つのIPから連続して多くの401/403

  • 高頻度で /login/auth/api/token に POST

  • 異なる「ユーザー」で同じユーザーエージェント

  • 夜間または週末にリクエストが行われる

3 URLへのSQLインジェクション

攻撃者はデータベースへの要求を「破壊」しようとします。

GET /products?id=1' OR '1'='1
GET /search?q=admin'--
GET /user?name='; DROP TABLE users;--

パラメータにOR 1=1、引用符、--UNION SELECTDROP TABLEが点滅している場合、それはそれです。

4 XSS試行

ユーザー入力による悪意のある JavaScript の実装:

GET /search?q=<script>alert('xss')</script>
GET /comment?text=<img src=x onerror=alert(1)>

パラメータのタグ <script>、ハンドラ onerroronload は、このジャンルの定番です。

5 疑わしいユーザーエージェント

通常のユーザーエージェントはブラウザです。しかし、これらのものは疑問を生じさせます。

sqlmap/1.5                    ← сканер SQL-инъекцийnikto/2.1.6                   ← сканер уязвимостейpython-requests/2.28.0         ← скрипт на Python() { :; }; /bin/bash -c "..."  ← Shellshock-эксплойт!

⚡分析に役立つコマンド

ログを1行ずつ読む必要はありません。時間を節約できるコマンドのセットは次のとおりです。

bash

# クエリ数の上位20のIP awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20

# すべての失敗した認証(401/403)grep -E '"(401 | 403)'access.log
# Search for SQL injections in parametersgrep -iE "1=1)" access.logパラメータでのSQLインジェクションの検索

# Search for XSS attemptsgrep -iE "pt|onerror|onload|javascript:)" access.log

# Requests to dangerous filesgrep -iE "|bak|config|yml|git)" access.log

# 午前1時から5時までのアクティビティawk -F'[/: ]' '$7 >= 1 && $7 <= 5' access.log | head -50

🛡️ 怪しいものを見つけたときの対処法

  1. IPをブロックする 明らかな攻撃が見られる場合は、iptablesufw または Nginx レベルで禁止します。

  2. fail2banの設定 N 回の試行に失敗した後、IP を自動的に禁止します。15分で設定でき、あらゆる種類の攻撃から保護します。

  3. エンドポイントを確認する 機密ファイルがアクセスできないこと、フォームがレート制限で保護されていること、入力がエスケープされていることを確認してください。

  4. アラートを設定する 異常が発生したときに通知を送信するシンプルなcronスクリプトは、プロジェクト全体を保存できます。

nginx.conf

# Nginxdeny 185.220.101.42レベルでのIPブロック。

# 非表示ファイルへのアクセスを禁止するlocation ~ /\. {
    deny all;
    return 404;
}

bash

# ファイアウォールによるブロックsudo ufw deny from 185.220.101.42

🚀 スキルをレベルアップすることが最高の防御

ログを読む能力は、練習を重ねることで身につくスキルです。開発者として体系的に成長し、すべてがどのように機能するかを理解したい場合は、こちらをご覧ください。

「コディック」アプリケーション — 実践を通じてプログラミングを学ぶプラットフォーム。単なる理論ではなく、理解を深めるための実際のタスク。

そして私たちの Telegramコミュニティ 開発の世界からの役立つ投稿、分析、ライフハックが定期的に公開されます。朝のコーヒーを飲みながら読んで、携帯電話から直接知識を強化しましょう。

ログはサーバーのブラックボックスです。ログを読み解くことができれば、誰がアクセスしたか、何をしたか、そして心配すべきかどうかを常に把握することができます。

安全性は製品ではなく、プロセスです。
そして、それはログから始まります。

🎯先延ばしをやめよう

記事は気に入った?
実践の時間だ!

Kodikでは読むだけでなく、すぐにコードを書く。理論 + 実践 = 本当のスキル。

即座に実践
🧠AIがコードを説明
🏆修了証

登録不要 • カード不要