Featured image of post ハニーポットの侵入ログ処理が if/else で膨らむ問題を、PerlとMooのObserverで解く全10回【目次】

ハニーポットの侵入ログ処理が if/else で膨らむ問題を、PerlとMooのObserverで解く全10回【目次】

ハニーポットに届く侵入ログを、Perl と Moo で脅威スコアやアラートまで連動して動かす侵入レーダーに育て、最後に Observer パターンと名前を付ける全10回の連載の目次です。どこから読むか、困りごとからも選べます。

Perl と Moo で、偽装サーバー(ハニーポット)に届く侵入イベントを「レーダー」のように見張るツールを作る全10回の連載です。侵入イベントをコンソールに表示するだけの最小構成から始め、脅威スコアやアラートを足すたびにループが膨らむ様子を確かめます。そのあと、通知係のクラス分離、Moo::Role による契約、IntrusionHub での一斉通知、実行中の登録・解除、does 制約、既存コードを変えない機能追加と進め、最終回で作ったものが GoF の Observer パターンだったと名前を付けます。

各回は前の回のコードに手を足していく作りなので、通して読むなら第1回からが早道です。このページは目次を兼ねた案内板です。入口は「どこから読むか」で、困りごとが決まっているなら「困りごとから探す」で、順に追うなら「全話一覧」で選んでください。

どこから読むか

  • 第1回 — 最初から順に作るなら。IntrusionEvent クラスで侵入イベントを表し、コンソールに表示する。前提は Moo のクラス定義の基礎
  • 第2回 — 機能追加でコードが膨らむ困りごとから入るなら。脅威スコアとアラートを足して、ループが破綻する様子を確かめる。前提は第1回のコード
  • 第10回 — Observer パターンとの対応関係から知りたいなら。IntrusionHub と通知係を Subject・Observer に対応づけ、Pub/Sub との違いも整理する

困りごとから探す

機能を足すたびに、1つのループが膨らんで書き換えている

  • 第2回 — 脅威スコアとアラートを足したら、ループに処理が積み重なった
  • 第3回 — ログ表示とスコア計算を、通知係のクラスに分けたい
  • 第8回 — RiskLevelObserver のような新しい機能を、既存コードに触れず足したい

通知先が増えて、呼び出しが散らばる・実装し忘れる

  • 第4回 — update の実装し忘れを、実行前に見つけたい
  • 第5回 — 複数の通知係への呼び出しを、1か所にまとめたい
  • 第7回 — update を持たない偽物が、通知係として登録されてしまう

状況によって通知先を切り替えたい

  • 第6回 — 日中はログとスコアだけ、深夜だけアラートも鳴らしたい

全話一覧

  1. 侵入イベントをコンソールに表示する最小構成
  2. 通知先を足してループが膨らむ破綻
  3. ログとスコアを通知係のクラスに分離
  4. Moo::Role の requires で契約化
  5. IntrusionHub で一斉通知
  6. 通知係を attach/detach で出し入れ
  7. does 制約で偽物を弾く
  8. 既存コードを変えず RiskLevelObserver を追加
  9. 全クラスを統合した完成コード
  10. Observer パターンの種明かし

前提知識

  • Perl v5.36 以降の基本文法(signatures、postfix dereference など)
  • Moo によるクラス定義の基礎(has、extends、with)と、Moo::Role の基礎
  • 「Mooで覚えるオブジェクト指向プログラミング」シリーズを読み終えていると、スムーズに進みます

完成するもの

侵入イベントのログ表示、脅威スコアの加算、リスクレベル表示、アラート通知が連動する侵入レーダー司令室です。通知係は独立したクラスで、新しい通知係を足しても既存コードを変更する必要がありません。

comments powered by Disqus
システム開発・AIワークフローのご相談は Meetsource へ
Hugo で構築されています。
テーマ Stack は Jimmy によって設計されています。