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

milter-managerが便利な話

 milter-managerが便利な話

2019/08/10のNSEG勉強会で話した内容です。
milter-managerがどんなツールで、どんな便利な使い方があるかを簡単に説明しています。

Avatar for SATOH Kiyoshi

SATOH Kiyoshi

March 22, 2022
Tweet

More Decks by SATOH Kiyoshi

Other Decks in Technology

Transcript

  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/