【実践公開】
サーバ攻撃を「検知 → 排除 → 記録 → 通知」まで自動化した構成と手順
はじめに(背景)
近年、ランサムウェアやWeb改ざんの被害は
**「侵入されてから数か月後に発覚」**するケースが後を絶ちません。
原因の多くは以下です。
- ログを見ていない
- 監視が人任せ・目視任せ
- 攻撃が「404」や「403」なので軽視されている
そこで本記事では、
私自身のサーバ環境で実際に構築・運用している防御体制を
分かりやすく公開します。
全体像(結論)
私のサーバでは、以下を 完全自動 で行っています。
① 検知 → ログから不正兆候を検出
② 排除 → 攻撃元IPを自動BAN
③ 記録 → ログ・レポートを保存
④ 通知 → メールで即時通知
人が24時間張り付く必要はありません。
① 検知:ログから不正アクセスを検出
対象ログ
- Apache access log / error log
- systemd journal(httpd)
- Fail2Ban のBAN情報
検知対象の例
/cgi-bin/への実行試行.env/.git/configxmlrpc.phpphp-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日、無人監視が成立しています。
まとめ(伝えたいこと)
- 攻撃は「来る前提」で考える
- 気合や人手では守れない
- 自動化すれば防げる
この構成により、
「数か月侵入されていた」
「気づいたら暗号化されていた」
という事態は 構造的に起こりません。
最後に
この記事は、
実際に稼働している構成をそのまま公開しています。
同じような環境の方の参考になれば幸いです。
