💬 くるるちゃんのワンポイント図解解説
【技術背景・解説】
この記事(個人開発のオープンソースIPS「kururuIPROS」を公開しました)におけるIT技術の基本概念と重要ポイントを、わかりやすく整理・解説しています。
【アイキャッチ図解のポイント】
構成要素とデータフローを視覚的に整理し、初心者でも要点を掴みやすいグラフィック構造で表示しています。
【資格・要点ノート】
シラバス用語、基本概念の理解、実務への応用ポイント
2026年3月9日、自作のオープンソースIPS(侵入防止システム)プロジェクト「kururuIPROS」をGitHubで公開しました。本記事では、このプロジェクトの概要・技術的な特徴・想定される活用シーンについて紹介します。
kururuIPROSとは
kururuIPROSは、軽量なIPSセンサーとWebダッシュボードを組み合わせた、オープンソースの侵入検知・防止システムです。もともと自分が運用していたDjangoベースのセキュリティオペレーション基盤から、IPSセンサーと監視ダッシュボード部分だけを切り出し、誰でも単体で使える形に再設計したものです。
商用IDS/IPS製品の全機能を置き換えるものではありませんが、個人サーバーや中小規模のVPS環境において、不正アクセスの検知とブロックを手軽に始めるための実用的なツールを目指しています。
アーキテクチャの特徴
本プロジェクトの大きな特徴は、依存関係を極限まで絞った軽量構成です。ダッシュボード側はPythonのASGIアプリケーションとSQLiteだけで動作し、PostgreSQLやRedisといった重量級のミドルウェアは不要です。uvicornで起動すればすぐにダッシュボードとAPIが使えるようになります。
一方、ネットワーク上で実際にトラフィックを監視するセンサー部分はRustで実装しています。Rustを選んだ理由は、パフォーマンスとメモリ安全性の両立です。センサーはnginxのアクセスログを解析し、検知結果をダッシュボードAPIへ送信します。nftablesとの連携により、検知したIPアドレスを実際にファイアウォールレベルでブロックすることも可能です。
センサーとダッシュボード間の通信は、HMAC-SHA256による署名認証で保護されています。センサーが送信するイベントにはX-IPS-*ヘッダによる署名が付与され、改ざんや成りすましを防止します。管理APIへのアクセスはBearer tokenによる認証が必須で、デフォルトでは20文字以上のトークン長が要求されます。
3層判定エンジンと段階的緩和
kururuIPROSの検知ロジックは、ルールベースの判定、User-Agent分類、脅威インテリジェンス照合の3層で構成されています。
まずルールエンジンがアクセスパターンを評価し、該当するルールに基づいてイベントを生成します。次にUA分類器が、リクエストのUser-Agentをbrowser、crawler、tooling、scanner、internalの5カテゴリに分類します。HeadlessChrome、python-requests、Scrapyなどの自動化ツールや空UAも検知対象です。さらに、AbuseIPDB、Spamhaus、GreyNoise、TorExitなどの外部脅威インテリジェンスと照合し、既知の悪性IPからのアクセスにはseverityを引き上げます。
ブロック判定後のアクションも段階的です。allow → observe → limit → challenge → block という緩和ラダー(mitigation ladder)を採用しており、いきなり全遮断するのではなく、状況に応じて段階的に対応を強めることができます。初期導入時はdry-runモードで実際のブロックを行わずに検知だけを確認でき、安全に運用を開始できます。
SOC運用を意識した設計
単なるログ可視化に留まらず、SOC(セキュリティオペレーションセンター)運用を意識した機能を備えています。rule → event → incident → triage という一連のチェーンを追跡でき、高/重大レベルのイベントからインシデントが自動生成されます。管理APIからtriage(トリアージ)やclose、reopenの操作を記録することもできます。
SCAN-*系のシグネチャはcampaign単位で集約され、同一攻撃キャンペーンが大量のアラートを生成しても、1件のインシデントに集約される仕組みです。これにより、アラート疲れを軽減しつつ、重要な脅威を見逃さない運用が可能になります。
また、誤検知が発生した場合のフィードバック機構も実装しています。管理APIからfeedbackを登録すると、一定の閾値を超えた場合にルールの自動調整(override)が行われ、運用しながら検知精度を改善していくことができます。
公開向けのセキュリティハードニング
オープンソースとして公開する以上、デフォルトで安全側に倒す設計を徹底しています。バインドアドレスは127.0.0.1固定がデフォルトで、うっかり外部に公開してしまうリスクを低減しています。全レスポンスにセキュリティヘッダ(X-Content-Type-Options、X-Frame-Options、Referrer-Policy、Permissions-Policy)を付与し、CORS設定はデフォルト無効です。
X-Forwarded-Forの偽装対策も実装しており、信頼できるプロキシを明示的に指定しない限り、XFFヘッダは無視してソケットの接続元IPのみを使用します。管理APIのアクセスは監査ログに記録され、保持期間を過ぎたログは自動削除されます。
E2E評価の実測値
公開可能な合成テストデータ(実IPや個人情報を含まない)を同梱しており、誰でも検知精度を再現・検証できます。現行の実測値は以下の通りです。
- 不正アクセス防御率: 95.78%
- 正常アクセス誤検知率: 0.36%(1%未満)
通知・監視連携
Discord、Slack、Grafana(Webhook)への通知チャネルをサポートしており、ブロック発生時や高severityイベント検知時に即座に通知を受け取れます。Prometheus形式のメトリクスエンドポイントも提供しているため、既存のGrafanaダッシュボードに組み込んで長期的な可視化を行うことも可能です。
GitHub公開について
kururuIPROSはGitHubで公開しています。リポジトリにはGitHub Actions CIも同梱されており、Python側の構文チェックとRustセンサーのcargo checkが自動実行されます。負荷試験スクリプト、障害注入テスト、ロールバック手順書も含まれているため、導入前の検証から運用まで一通りカバーしています。
おわりに
kururuIPROSは、大規模な商用製品には手が届かないが、自分のサーバーを最低限しっかり守りたいという個人開発者やスモールチーム向けのツールです。SQLiteベースの軽量構成でありながら、SOC運用品質に寄せた検知・対応フローを備えている点が特徴です。
今後はPostgreSQL対応、GeoIP/ASNエンリッチメント、WebSocketによるリアルタイム更新、ルールエディタUIなどの拡張を検討しています。興味のある方はぜひGitHubリポジトリをご覧ください。
コメント(0件)
まだコメントはありません。最初のコメントを投稿してください!