Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

milter-managerが便利な話

300 views

Published on

milter-managerがどんなツールで、どんな便利な使い方があるかを説明する。

Published in: Software
  • Be the first to comment

  • Be the first to like this

milter-managerが便利な話

  1. 1. milter-managerが便利な話milter-managerが便利な話2019/8/10 さとうきよし
  2. 2. milterとはmilterとは(m)ail f(ilter)でmilter 元々sendmailで実装されたフィルタする仕組み post xの lterやpolicy委譲などに類するもの SMTPセッションのRCPT等コマンド毎に動作を規定可
  3. 3. milterどんなものがあるかmilterどんなものがあるかclamav-milter ウイルス対策フィルタ spamass-milter spamassassinのmilter版 milter-greylist greylisting⽤milter Rspamd スパム対策フィルタ
  4. 4. milter-managerとはmilter-managerとはmilterを組み合わせて使えるようにする 条件に応じてmilterを適⽤といった設定が可能に rubyで簡単にmilterを書けるライブラリも提供 オープンソース
  5. 5. milterのためのフレームワークmilterのためのフレームワークmilter-managerだけだと単にツールだが milter/clientライブラリで簡単にmilter作れる milterを使うためのフレームワークへと昇華されてる
  6. 6. 条件を絞って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 であると ころに注意
  7. 7. 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
  8. 8. MailParserMailParser MIMEのメールをパート毎にパースしたい パースだけしたかったので利⽤ 「ruby mime parse」で検索するとトップに MailParser - tmtm.org
  9. 9. 実⽤的な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"
  10. 10. 情報が少ない情報が少ないそもそもmilterの情報がない。 は消えてる… milter-managerについて実際の設定例が少ない milter-managerの公式サイトの情報が頼り ソース読んだり@ktouさんに直接教えてもらうなど milter.org
  11. 11. 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
  12. 12. 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/
  13. 13. milter-manager便利だよmilter-manager便利だよと⾔ってる僕も仕事で使うの初だった でもほんと便利だったからみんな使おう

×