概要
個人運営サイト が 大手ボットの大量アクセス によりリソース逼迫 Zabbix 等のモニタリングで異常検知と影響分析 nginx・Fail2Ban によるアクセス制限と自動BANの実施 ログ解析ツール (lnav, goaccess)で攻撃元やパターンを特定 人的アクセス重視 の姿勢と今後の防御体制強化
サイト運営者の苦悩とボットによる被害
- 小規模な個人サイト に突然の大量アクセス発生
- 通常は歓迎する来訪者 だが、今回は 悪質なボット によるデータスクレイピング
- Archive.org のような善良なクローラーは歓迎姿勢
- Amazon, Facebook, OpenAI など大手企業のボットが自己都合でアクセス
- AI学習や広告配信 など企業目的の大量データ取得
- 人的な読者 を大切にしたいという運営方針
異常検知と初動対応
- Zabbix によるサーバリソース監視で異常を早期発見
- ディスク使用量急増 や CPU・メモリアラート の多発
- Giteaインスタンス のデータ肥大化とリソース圧迫
- 一時的なサービス停止 やZFS拡張で応急対応
- 従来のクリーンアップだけでは不十分 と判明
ログ解析による原因特定
- lnav でnginxアクセスログをSQLライクに解析
- ユニークIP数 や リファラー、 User-Agent で傾向把握
- goaccess で過去ログも含めて詳細分析
- リクエスト数・頻度・ターゲットURL の可視化
- Amazonbot, OpenAI, Applebot, Facebook など明示的なボット
- User-Agent偽装 や連続アクセスも多数確認
- 人的アクセス阻害 につながる深刻な被害
nginxによる即時対策
- User-Agentによるフィルタリング で悪質ボットを403拒否
- mapディレクティブでブラックリスト化
- リクエストレート制限 で過剰アクセスを抑制
- limit_req_zone/limit_req設定
- 設定例
if ($badagent) { return 403; }limit_req zone=krei burst=20 nodelay;
- 403対応でも完全解決せず :リクエスト自体の処理負荷は残る
Fail2Banによる自動BANの導入
- nginxログの403判定 でFail2BanによるIP自動BAN
- 24時間BAN で再発防止
- 設定例
[nginx-forbidden] enabled = true port = http,https logpath = /var/log/nginx/access.log bantime = 86400
- 正規表現で403アクセスを検出 し即BAN
- 数百件規模のBANリスト が生成されるほどの被害規模
まとめと今後の展望
- 個人運営サイト でも 大手ボットの影響 は甚大
- 人的な読者 を守るためには 多層防御 と 自動化 の両立が必須
- ログ監視・アクセス制御・自動BAN の組み合わせが有効
- AI・大手企業のスクレイピング問題 は今後も継続的な課題
- 自分のインターネット空間を守る意識 と 技術的対応力 の重要性