【実践公開】

サーバ攻撃を「検知 → 排除 → 記録 → 通知」まで自動化した構成と手順


はじめに(背景)

近年、ランサムウェアやWeb改ざんの被害は
**「侵入されてから数か月後に発覚」**するケースが後を絶ちません。

原因の多くは以下です。

  • ログを見ていない
  • 監視が人任せ・目視任せ
  • 攻撃が「404」や「403」なので軽視されている

そこで本記事では、
私自身のサーバ環境で実際に構築・運用している防御体制
分かりやすく公開します。


全体像(結論)

私のサーバでは、以下を 完全自動 で行っています。

① 検知   → ログから不正兆候を検出
② 排除   → 攻撃元IPを自動BAN
③ 記録   → ログ・レポートを保存
④ 通知   → メールで即時通知

人が24時間張り付く必要はありません。


① 検知:ログから不正アクセスを検出

対象ログ

  • Apache access log / error log
  • systemd journal(httpd)
  • Fail2Ban のBAN情報

検知対象の例

  • /cgi-bin/ への実行試行
  • .env / .git/config
  • xmlrpc.php
  • php-cgi.exe
  • WordPress管理画面への不審アクセス

実装方法(概要)

journalctl -u httpd --since "5 min ago"

直近5分だけを見ることで、

  • 古いログによる誤検知を防止
  • 処理を軽量化

② 排除:Fail2Banで即時BAN

使用ツール

  • Fail2Ban

有効な Jail

  • sshd
  • apache-404
  • apache-noscript
  • wordpress
  • postfix

ポイント

  • 攻撃が始まった時点で 即BAN
  • 何度も同じIPが来る前に遮断
  • ファイアウォール連携(iptables / firewalld)

③ 記録:証跡を必ず残す

なぜ記録が重要か

  • 「気づいていた」証明になる
  • 被害発生時に説明できる
  • 再発防止の分析ができる

記録している内容

  • 不正アクセス行(生ログ)
  • 攻撃元IP
  • 攻撃パターン
  • 時刻(JST)

形式

  • /var/log/ 配下に保存
  • 日付付きレポート
  • 自動ローテーション

④ 通知:即時メールで把握

通知方法

  • サーバの 既存メール設定をそのまま利用
  • 外部サービス不要
  • Gmailで即受信

通知条件

  • 新しい不正兆候があった場合のみ
  • 自分のアクセス(127.0.0.1 / プライベートIP)は除外

実際の通知例

[ALERT] secwatch on example.com

[WEB Suspicious Access]
193.xxx.xxx.xxx "POST /cgi-bin/runsh.cgi ..."

誤検知を防ぐ工夫(重要)

プライベートIPは除外

grep -vE '^(127\.|10\.|192\.168\.|172\.(1[6-9]|2[0-9]|3[0-1])\.)'

これにより、

  • 自分のcurlテスト
  • cronのヘルスチェック
  • 内部通信

誤ってBAN・通知しません


運用負荷はどれくらい?

  • 日常作業:ゼロ
  • メールを流し見するだけ
  • 1日1〜2通程度(攻撃があれば)

👉
24時間365日、無人監視が成立しています。


まとめ(伝えたいこと)

  • 攻撃は「来る前提」で考える
  • 気合や人手では守れない
  • 自動化すれば防げる

この構成により、

「数か月侵入されていた」
「気づいたら暗号化されていた」

という事態は 構造的に起こりません


最後に

この記事は、
実際に稼働している構成をそのまま公開しています。

同じような環境の方の参考になれば幸いです。

\ 最新情報をチェック /

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です