Upgrade to Pro — share decks privately, control downloads, hide ads and more …




SATOH Kiyoshi

March 22, 2022

More Decks by SATOH Kiyoshi

Other Decks in Technology


  1. milter とは milter とは (m)ail f(ilter) でmilter 元々sendmail で実装されたフィルタする仕組み post

    x の lter やpolicy 委譲などに類するもの SMTP セッションのRCPT 等コマンド毎に動作を規定可
  2. 条件を絞ってmilter を当てる 条件を絞ってmilter を当てる 例)特定のSASL ユーザ名のみチェックを掛ける defile_milter("viruscheck-milter") do |milter| milter.connection_spec

    = "inet:8025@localhost" # ウイルスチェック⽤ milter milter.add_applicable_condition("sasl-username-check") end define_applicable_condition("sasl-username-check") do |condition| condition.define_envelope_from_stopper do |context, from| if context.authenticated? and context["auth_authen"] == "testuser" th false else true end end end auth 名取得のためにpost x 側の設定も必要 true/false 返す場合に、milter 掛けるほうが false であると ころに注意
  3. milter を作ってみる milter を作ってみる これだけでmilter が作れる require 'milter/client' class MilterClient

    < Milter::ClientSession def initialize(context) super(context) end def header(name, value) @headers << [name, value] end def body(chunk) @body << chunk end def end_of_message @headers.each do |name, value| case name
  4. 実⽤的なmilter を作る 実⽤的なmilter を作る 例)ウイルスチェックで引っかかったパートのみを削除 require 'milter/client' require 'mailparser' class

    MilterCutThreat < Milter::ClientSession def initialize(context) super(context) @header_raw = "" @body_raw = "" end def header(name, value) @headers << [name, value] @header_raw += name + ": " + value + "\n" end def body(chunk) @body << chunk @body raw += chunk + "\n"
  5. milter-manager 使うための情報 milter-manager 使うための情報 設定: milter manager リファレンスマニュアル Ruby でmilter

    開発: milter manager リファレンスマニュアル github のruby バインディング⽤ソース https://milter- manager.osdn.jp/reference/ja/con guration.html https://milter-manager.osdn.jp/reference/ja/ruby-milter- tutorial.html https://github.com/milter-manager/milter- manager/blob/master/binding/ruby/lib/milter/client/session.rb
  6. milter を作るための雛形 milter を作るための雛形 github の milter-manager/binding/ruby/sample/ 以下にい くつかサンプルがある milter-test-client.rb

    各種パラメータの取得⽅法がわかる milter-replace.rb 本⽂の書き換え⽅法がわかる https://github.com/milter-manager/milter- manager/blob/master/binding/ruby/sample/