HTTP(S)ハニポを作ってみた

6589e3179283043e0f5907144b9ad6eb?s=47 ninoseki
September 28, 2018

 HTTP(S)ハニポを作ってみた

第5回 ハニーポッター技術交流会 LT資料

6589e3179283043e0f5907144b9ad6eb?s=128

ninoseki

September 28, 2018
Tweet

Transcript

  1. HTTP(S)ハニポを作ってみた Manabu Niseki (@ninoseki)

  2. TL; DR • WOWHoneypotを参考にRubyでHTTP(S)ハニーポットを作っ てみた ◦ Sleep Warm: https://github.com/ninoseki/sleep_warm ◦

    色々改良してみた • ハニポを作ってみるのはWebアプリケーションプログラミング の勉強にちょうどいいかも
  3. モチベーション • なんで作ったのか? ◦ WOWHoneypotに(個人的に)感じた課題: ▪ テストがない! ▪ デプロイは完全に自動化したい !

    ▪ 超個人的に・・・ • XMLは書きたくない! • PythonよりRubyが好き!
  4. 作った • Sleep Warm: ◦ https://github.com/ninoseki/sleep_warm ◦ Ruby + RackベースのWebアプリケーションとして実装

    ◦ Rack: ▪ RubyでデファクトのWebアプリケーションインターフェース • PythonでいうWSGI • PerlでいうPSGI
  5. アーキテクチャ

  6. 解決した課題 • テストがない! ◦ RSpec + rack/testでテストを実装 ▪ 1ルール =

    1テストを実装 ◦ テストカバレッジ 100%
  7. 解決した課題 • デプロイは完全に自動化したい! ◦ Itamaeによるデプロイの自動化 ▪ Itamae: Cookpad製のプロビジョニングツール • “Configuration

    management tool inspired by Chef, but simpler and lightweight.” OR ◦ “Deploy to Heroku”ボタンによるHerokuへのワンクリックデプロイ
  8. “Deploy to Heroku”ボタンとは • Webアプリケーションの構成情報が記述されたマニフェスト ファイル(app.json)を読み取り、自動的にHerokuにデプロイし てくれるというもの

  9. 備考: Logz.io + Heroku = ゼロ円ハニポ • Logz.io: https://logz.io ◦

    Logz.io = ELK as a service. ◦ フリー版: ▪ 3 GB / day ▪ 3 day retention • Heroku: https://heroku.com ◦ フリー版: ▪ 512 MB RAM ▪ 30 分間アクセス無しの状態だとスリープ状態に移行 • More details: ◦ Blog post: ゼロ円から始めるHTTP(S)ハニーポット ▪ https://ninoseki.github.io/2018/08/16/zero-yen-honeypot.html
  10. 解決した課題 • XMLは書きたくない! ◦ ルールはYAMLで1ファイルごとに記述

  11. 作ってみて思ったこと • WOWHoneypotクローンを作るのはWebアプリプログラミング の勉強にちょうどいいかも ◦ デフォルト 200 OK: ▪ 意外と最近の高級なWebアプリケーションフレームワークでこれを満たす

    のは難しい ▪ Webアプリケーションフレームワークのルーティング周りの仕様の深い理 解 or より低レイヤーのミドルウェア(= 今回の場合はRack)の理解が求め られる ◦ マッチ & レスポンス: ▪ 先ほどと同じルーティング周りの理解 + HTTPリクエスト/レスポンスの取 り扱われ方に対する理解が必要
  12. 最後に • ハニーポットの運用もいいけど・・・ • 自分で作ってみるのも面白いぞ!