milterを使った効果的な迷惑メール対策 - milter manager

2009|04|05|06|07|08|09|10|11|
2010|03|05|08|
2011|01|06|11|
2012|05|11|12|
2013|03|06|07|
2014|01|08|12|
2015|11|
2016|06|11|
2017|06|
2019|09|
2021|06|

milter-managerはpackagecloud.ioの支援を受けています

2016年の10月頃から milter-manager はpackagecloud.ioの支援を受けています。 これまでpackagecloud.ioがOSS向けのプランを提供してくれているおかげでAPT/YUMリポジトリを提供できました。

インタビュー形式でmilter-managerのユースーケースを紹介します。

packagecloudがもたらした定量的なインパクトと、その他のメリットはなんでしたか?

milter-managerをリリースするたびに、APT/YUMのリポジトリを自分たちで更新しなくてもよくなりました。 milter-managerはそれなりに歴史があるプロジェクトなので、パッケージ数も多いですし、ディスク容量も必要です。 packagecloud.ioは十分なディスク容量を提供してくれています。

そして、自分たちで署名用の鍵を維持しなくてもよくなりました!

packagecloudの他に検討したものはありますか?

移行に取り掛かった当時、OSDNを検討していました。 ただそのときはOSDNはAPT/YUMリポジトリのホスティングに対応していませんでした。 そのため、packagecloud.ioへ移行することにしたのです。

packagecloudを使う前はどんなでしたか?

packagecloud.io前に私達はSourceforge.netを使っていました。 当時APT/YUMリポジトリもそこでメンテナンスしていたのですが、あまり安定して使えませんでした。 ダウンロードURLが事前のアナウンスなしに変わるということがしばしばあったからです。随時対応しないといけませんでした。

packagecloudが解決した問題はなんですか?

すでに述べたように、APT/YUMリポジトリのメンテンナンス作業から開放されました。 そのため、milter-managerの開発に注力できるようになりました。

packagecloud.ioがスポンサーしてくれていることは大変ありがたいです!

2021-06-30

milter manager 2.1.5

milter manager 2.1.5をリリースしました。

今回のリリースはメンテナンスリリースです。新機能の追加はありません。

  • CentOS 6のサポートをやめました
  • Ubuntuのパッケージのバージョンの付け方をアップグレード時に問題にならないようにしました。
2019-09-09

milter manager 2.1.1

milter manager 2.1.1 をリリースしました。

サポートしているディストリビューションを整理しました。

  • Ubuntu Precise Pangolin (12.04) サポートをやめました
  • Ubuntu Zesty Zapus (17.04) サポート追加
  • Debian Buster サポート追加

実験的にRmilterRspamd proxyの自動検出をサポートしました。 RmilterはRspamd1.6から非推奨なのでRspamdを使うようにしてください。

デフォルトではRmilterとRspamd proxyの両方を検出するようになっているので、使わない方を検出しないようにするか、使わないようにmilter-manager.local.confに設定を書くとよいと思います。

2017-06-28

milter manager 2.1.0

milter manager 2.1.0 をリリースしました。

プロジェクトサイトを sourceforge.net から OSDN に移行しました。

  • https://milter-manager.osdn.jp/

以下の各機能をsourceforge.netから移行しました。

  • ウェブサイト
    • milter-manager.sourceforge.net から milter-manager.osdn.jp に移行しました
  • ファイルリリース
    • 過去に sourceforge.net にリリースしたファイルは全て移行しました
  • メーリングリスト
    • 登録済みメンバーの移行は行いました
    • アーカイブの移行は行いません

パッケージの配布場所は以下の通りです:

2016-11-21

milter manager 2.0.8

milter manager 2.0.8 をリリースしました。

このリリースではパッケージのsystemd対応を改善しました。

また、SourceForge.netの仕様変更に対応してパッケージのインストール方法を更新しました。

すでにmilter-managerをインストールしている場合、パッケージを更新する前に次の作業が必要です。

Debianの場合: /etc/apt/sources.list.d/milter-manager.listを更新する(以下はjessieの例です)

deb http://downloads.sourceforge.net/project/milter-manager/debian/stable jessie main
deb-src http://downloads.sourceforge.net/project/milter-manager/debian/stable jessie main

Ubuntuの場合: ppa:milter-manager/ppa を追加する

% sudo apt-get -y install software-properties-common
% sudo add-apt-repository -y ppa:milter-manager/ppa
% sudo apt-get update

CentOSの場合: milter-manager-releaseパッケージを1.3.0に更新する

% sudo yum install -y \
http://sourceforge.net/projects/milter-manager/files/centos/milter-manager-release-1.3.0-1.noarch.rpm
2016-06-15

milter manager 2.0.6 and 2.0.7

milter manager 2.0.6 と 2.0.7 をリリースしました。 前回のリリースから約1年ぶりです。

milter manager 2.0.6 で同梱のドキュメント類が正しく生成されていなかったため、正しく生成したものを milter manager 2.0.7 としてリリースしました。

milter manager 2.0.6 では CentOS7 に systemd のサポートを実験的に追加しました。

サポートしているUbuntuのバージョンを整理しました。

Debian Wheezy 向けのパッケージはこのリリースで終了します。

2015-11-30

milter manager 2.0.5

milter manager 2.0.5 をリリースしました。

CentOS7のサポートを追加しました。*1

佐々木さんの協力でdebパッケージをクリーンルームビルドするようにしまし た。wheezy, jessie, sid, trusty, utopic ではシステムの libev や ruby-glib2 を利用するようになりました。

実験的な機能としてメールトランザクション(SMTPコマンドのMAILコマンドか らDATAコマンドの終わりまで)の間データを保持できるAPIを追加しました。こ れにより milter の適用条件がより柔軟に書けるようになりました。

詳しくは2.0.4から2.0.5の変更点を参照してください。

*1 が systemd への対応はまだできていません。。。

2014-12-11

Rubyで書いたmilterをテストするには

先日リリースしたmilter manager 2.0.4でmilterのテストを自動化するのに便利な機能を追加したので紹介します。

ここではテスティングフレームワークとしてtest-unitを使います。 なおmilter managerはインストール済みであるとします。*1

milter-test-sample にサンプルコードを置いておきます。

件名に「EMERGENCY」と入っていたら、定められた宛先にもメールを送信するという動作をするmilterを作成します。 件名で判断して宛先を追加するのはPostfixではheader_checksのフィルタアクションを使えばできなくはないですが、少々手間がかかります。

milterのコードはこんな感じです。*2 *3

# source: ruby
require "milter/client"

class MilterTransfer < Milter::ClientSession

  EMERGENCY_ADDRESSES = [
    "emergency@example.com",
    "root@example.com",
  ]


  def initialize(context, options)
    super(context)
  end

  def header(name, value)
    if /\ASubject\z/i =~ name
      @need_transfer = true if /EMERGENCY/ =~ value
    end
  end

  def end_of_message
    if @need_transfer
      EMERGENCY_ADDRESSES.each do |address|
        add_recipient(address)
      end
    end
  end

  def reset
    @need_transfer = false
  end
end

テストは以下のように書くことができます。一部を抜粋します。全体はリポジトリを見てください。

# source: ruby
class TestMilterTransfer < Test::Unit::TestCase

  SPEC = "inet:20025"

  def setup
    @server = ::Milter::TestServer.new
    @milter_runner = ::Milter::Client::Test::MilterRunner.new(milter_path("milter-transfer"))
    @milter_runner.run
  end

  def teardown
    @milter_runner.stop
  end

  def test_no_emergency_mail
    result = @server.run(["--connection-spec", SPEC],
                         ["--mail-file", fixture_path("no-emergency.eml")],
                         ["--envelope-from", "from@example.com"],
                         ["--envelope-recipient", "to@example.com"])
    assert_equal("pass", result.status)
    assert_recipients(["to@example.com"], result.envelope_recipients)
  end

  def test_emergency_mail
    result = @server.run(["--connection-spec", SPEC],
                         ["--mail-file", fixture_path("emergency.eml")],
                         ["--envelope-from", "from@example.com"],
                         ["--envelope-recipient", "to@example.com"])
    assert_equal("pass", result.status)
    assert_recipients(["to@example.com"] + MilterTransfer::EMERGENCY_ADDRESSES,
                      result.envelope_recipients)
  end
end

milterを起動してmilter-test-server*4で叩いて結果をチェックしています。 milterプロトコルを使ってテストしているので、このテストが全部パスしていればMTAに組み込んだ場合でも正常に動作することが期待できます。

また MTA に組み込んだあとに、発生した不具合を修正したときに書くリグレッションテストにも使うことができます。

まとめ

Rubyで書いたmilterのテストを書く方法を紹介しました。

*1 インストール方法についてはmilter managerリファレンスマニュアルを参照してください。

*2 Rubyでのmilter開発についてはRubyでmilter開発を参照してください。

*3 NKFを使えばMIMEエンコードされたヘッダも簡単に処理することができます。

*4 milter managerに同梱されているmilterプロトコルを話すプログラム

2014-08-18

milter manager 2.0.2

milter manager 2.0.2 をリリースしました。

変更点

Ubuntu Lucid (10.04) のサポートを復活させました。 その他の変更点はありません。

メンテナンスポリシー

[milter-manager-users-ja:00230] をまとめ直したものです。大体こんな感じにしようと考えているものです。

まだ確定していないので、意見のある方は ML でお願いします。

milter manager のバージョン番号とサポートするディストリビューションの間に関係はない。

CentOS

CentOS でサポートするバージョンは2つまでとする。

例えば、CentOS 7 がリリースされたが、CentOS 5 も CentOS プロジェクトがサポートを続けるという場合でも milter manager プロジェクトでは CentOS 5 のサポートは終了し、CentOS 6 と CentOS 7 のみをサポートすることにする。

Debian

stable, testing, unstable の3つをサポートする。

oldstable についてはサポートしない。(パッケージをリリースしない)

新しい stable がリリースされたら、一度だけ oldstable でもパッケージをリリースし、そこで次のリリースからは oldstable のサポートを止めることを明言する。

Ubuntu

ディストリビュータによるサポート期間が明記されているので LTS についてはEOL までサポート対象とする。LTS 以外については、ディストリビュータによるサポート期間が終了したら、サポート対象から外れる。

古いリリースについてサポートが困難になった場合、ディストリビュータによるサポート期間内であっても、サポート対象から外れることがある。ただし、その場合は事前に ML で告知する。

2014-01-27

milter manager 2.0.1

milter manager 2.0.1 をリリースしました。

変更点

Ubuntu Saucy (13.10) に対応し、Ubuntu Licid (10.04) のサポートをやめました。また、milter manager がクラッシュしたときに、スタックトレースを出力する機能があったのですが、危険であることがわかったため、その機能を削除しました。

詳しい変更点は、以下を参照してください。

2014-01-24

2009|04|05|06|07|08|09|10|11|
2010|03|05|08|
2011|01|06|11|
2012|05|11|12|
2013|03|06|07|
2014|01|08|12|
2015|11|
2016|06|11|
2017|06|
2019|09|
2021|06|