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|

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

milter manager 2.0.0

約2年ぶりのメジャーバージョンアップリリースです!

メジャーバージョンアップリリースだからといって非互換があるわけではあり ません。1.8系とは互換性があるため、設定ファイルを変更せずにそのまま簡単 にアップデートできます。

前回のリリースから大きな変更もないのにどうしてメジャーバージョンをあげ て2.0.0にしたかというと、開発が継続していることと安定していることをアピー ルするためです。

milter managerは約25ヶ月前の2011/06/10に前回のマイナーバージョンである 1.8.0をリリースしました。そこから、10回目のリリースが今回のメジャーバー ジョンアップリリースです。長いときでリリースの間が6ヶ月あいたこともあり ましたが、こつこつと改良を続けてきました。この間のマイナーバージョンが あがるリリースは既存のmilter managerユーザーが見えるところでだけアナウ ンスしているため、既存のmilter managerユーザー以外には開発の様子が見え づらいものです。しかし、こうしてこつこつと開発を継続しています。メジャー バージョンアップというのは大きなイベントです。これを機に、既存のmilter managerユーザー以外にも広くアピールします。milter managerの開発が継続し ていて、より便利になり、また、より安定したことをアピールします。

より安定したことをアピールすると書いた通り、1.8.0の頃よりさらに安定しま した。これは、動作実績が増え、ユーザーのみなさんから問題を報告してもらっ たおかげです。問題を教えてもらえたのでさまざまな問題を修正できました。 milter manager本体はもちろんですが、Rubyでmilterを書くための機能である Ruby/milterはかなり安定しました。Rubyでmilterを実装する機会が増え、さま ざまなノウハウが溜まりました。これらのノウハウがRuby/milterに反映されて います。

2.0.0は1.8.0よりも確実によくなっていると自信を持って言えます。これまで milter managerを使ったことがなかったみなさんもぜひ試してみてください!

変更点

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

テスト用メールを共有するプロジェクトを始めました

milter manager の関連プロジェクトとして milter-manager/test-mails プロジェクトを始めました。

このプロジェクトでは、メールシステムのテストをするためのメールを共有します。

メールシステムの開発をしていると、テストのために多くのパターンのメールが必要になります。そのようなメールを個人で集めたり作成したりするのは大変です。そんなとき、自由に再利用できるテストメール集があれば便利だと思いませんか?

メール集の各メールに対して一通り動作を確認して期待する動作をしていれば、おおよそシステムが正しく動いていることを確認できるようなメール集です。

このようなメール集を共有できれば、網羅的なテストをしやすくなったり、自分で多くのテスト用メールを作成したり管理したりするコストが削減できます。

興味のある人はリンク先のREADME.mdや各サブディレクトリに用意しているREADME.mdを参照してください。

2013-07-29

milter manager 1.8.9

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

変更点

milter-greylist の設定ファイル greylist.conf でソケットのパスが書かれた行にパーミッションの情報が含まれていると mitler manager の milter 自動検出がうまく動かなくなっていた問題を修正しました。

また、CentOS6.4向けに提供しているRubyのパッケージをRuby1.9.3-p448に更新しました。Ruby1.9.3-p448にはセキュリティFIXが含まれているので、使用している場合はアップデートしてください。詳しくはRubyのリリースアナウンスを参照してください。

2013-06-28

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|