Ubuntuへインストール

Ubuntuへインストール — Ubuntuへのmilter managerのインストール方法

このドキュメントについて

Ubuntu Linuxに特化したmilter managerのインストール方法につい て説明します。Ubuntuに依存しない一般的なインストール情報は インストール を見てください。

パッケージのインストール

以下のパッケージをインストールすることにより、関連するパッケー ジもインストールされます。

% sudo aptitude -V -D install libtool intltool libglib2.0-dev ruby ruby1.8-dev libglib2-ruby1.8

MTAはPostfixを利用することとします。

% sudo aptitude -V -D install postfix

milterはspamass-milter、clamav-milter、milter-greylistを使用 することとします。

% sudo aptitude -V -D install spamass-milter clamav-milter
% sudo aptitude -V -D --without-recommends install milter-greylist

--without-recommendsを指定しているのは、Postfixが削除されて Sendmailがインストールされてしまうからです。これは、 milter-greylistの推奨パッケージとしてsendmailが登録されている ためです。

ビルドとインストール

~/src/以下で作業をすることとします。また、/usr/local/以下に インストールします。

% mkdir -p ~/src/
% cd ~/src/
% wget http://downloads.sourceforge.net/milter-manager/milter-manager-0.8.0.tar.gz
% tar xvzf milter-manager-0.8.0.tar.gz
% cd milter-manager-0.8.0
% ./configure
% make
% sudo make install
% sudo /sbin/ldconfig

milter-manager用のユーザを作成します。

% sudo /usr/sbin/adduser --system milter-manager --group

設定

milterの基本的な設定方針は以下の通りです。

UNIXドメインソケットで接続を受け付けるようにします。これは、 セキュリティ面と速度面の理由からです。

UNIXドメインソケットはpostfixグループでの読み書き権限を設定し ます。これは、既存のmilterパッケージの設定をできるだけ利用す るためです。

必要のない配送遅延をできるだけ抑えるため、milter-greylistは S25R にマッチする ときのみ適用します。しかし、これはmilter-managerが自動で行う ため、特に設定する必要はありません。

spamass-milterの設定

まず、spamdの設定をします。

/etc/spamassassin/local.cfに以下の内容を追加します。これで、 スパム判定された場合のみ、その詳細をヘッダに追加するようにな ります。

remove_header ham Status
remove_header ham Level

spamdを有効にするため、/etc/default/spamassassinを以下のよう に変更します。

変更前:

ENABLED=0

変更後:

ENABLED=1

spamdを起動します。

% sudo /etc/init.d/spamassassin start

spamass-milterはデフォルトの設定で問題ありません。


clamav-milterの設定

clamav-milterはpostfixグループでソケットに読み書きできるよう に、以下のように/etc/default/clamav-milterを変更します。

変更前:

# USE_POSTFIX='yes'

変更後:

USE_POSTFIX='yes'

clamav-milterを再起動します。

% sudo /etc/init.d/clamav-milter restart

milter-greylistの設定

/etc/milter-greylist/greylist.confを編集し、デフォルトで Greylistを使うようにします。

変更前:

racl whitelist default

変更後:

racl greylist default

次に、/etc/default/milter-greylistを変更し、milter-greylist を有効にします。milter-greylistの起動ファイルではソケットファ イルをpostfixグループで作成できないため、IPv4で接続すること とします。ただし、ローカルホストからの接続のみを受け付けること にします。

変更前:

ENABLED=0

変更後:

ENABLED=1
SOCKET="inet:11125@[127.0.0.1]"

milter-greylistを起動します。

% sudo /etc/init.d/milter-greylist start

milter-managerの設定

milter-managerはシステムにインストールされているmilterを検出 します。以下のコマンドでspamass-milter、clamav-milter、 milter-greylistを検出していることを確認してください。

% /usr/local/sbin/milter-manager --show-config

以下のように表示されていれば検出は成功しています。

...
define_milter("milter-greylist") do |milter|
  milter.connection_spec = "inet:11125@[127.0.0.1]"
  ...
  milter.enabled = true
  ...
end
..
define_milter("clamav-milter") do |milter|
  milter.connection_spec = "local:/var/run/clamav/clamav-milter.ctl"
  ...
  milter.enabled = true
  ...
end
..
define_milter("spamass-milter") do |milter|
  milter.connection_spec = "unix:/var/spool/postfix/spamass/spamass.sock"
  ...
  milter.enabled = true
  ...
end
..

milterの名前、ソケットのパス、enabledがtrueになっていることを 確認してください。異なっていた場合は、 設定 を参考に /usr/local/etc/milter-manager/milter-manager.confを編集してく ださい。ただ、できれば、設定を変更せずに使用できるようにした いと考えています。もし、検出できなかった環境のことを教えても らえれば、milter-manager.confを編集しなくとも使用できるように 検出方法を改良することができるかもしれません。

Ubuntu上ではデフォルトでは /var/run/milter-manager/milter-manager.pidにプロセスIDを記録 します。そのため、事前に/var/run/milter-manager/ディレクトリ を作成しておく必要があります。

% sudo mkdir -p /var/run/milter-manager
% sudo chown -R milter-manager:milter-manager /var/run/milter-manager

また、Postfixは/var/spool/postfix/にchrootして動作するため、 ソケットファイルは/var/spool/postfix/以下に作成する必要があり ます。ここでは、 /var/spool/postfix/milter-manager/milter-manager.sockに作成す ることにします。そのため、事前に /var/spool/postfix/milter-manager/ディレクトリを作成しておく 必要があります。

% sudo mkdir -p /var/spool/postfix/milter-manager
% sudo chown -R milter-manager:milter-manager /var/spool/postfix/milter-manager

最後に、実効グループと接続受付先の設定をします。実効グループ はpostfixグループで、接続受付先は /var/spool/postfix/milter-manager/milter-manager.sockになるの で、以下のような内容の/etc/default/milter-managerを作成します。

GROUP=postfix
CONNECTION_SPEC=unix:/var/spool/postfix/milter-manager/milter-manager.sock

milter-managerの設定が完了したので、起動の設定をします。

Ubuntu用の起動スクリプトが /usr/local/etc/milter-manager/init.d/debian/milter-managerに インストールされています。/etc/init.d/以下にシンボリックリン クを作成し、自動起動するようにします。

% cd /etc/init.d
% sudo ln -s /usr/local/etc/milter-manager/init.d/debian/milter-manager ./
% sudo /usr/sbin/update-rc.d milter-manager defaults

起動スクリプトはmilter-managerコマンドが /usr/sbin/milter-managerにインストールされていることを前提と しているため、シンボリックリンクを作成します。

% cd /usr/sbin
% sudo ln -s /usr/local/sbin/milter-manager ./

milter-managerを起動します。

% sudo /etc/init.d/milter-manager start

/usr/local/bin/milter-test-serverで起動の確認をすることがで きます。

% sudo -u postfix milter-test-server -s unix:/var/spool/postfix/milter-manager/milter-manager.sock

このように表示されれば成功です。

status: pass
elapsed-time: 0.128 seconds

起動に失敗しているときはこのように表示されます。

Failed to connect to unix:/var/spool/postfix/milter-manager/milter-manager.sock: No such file or directory

失敗している時はログを頼りに問題を解決します。--verboseオプショ ンをつけると詳細なログが表示されます。また、デーモンプロセス にしないことにより、標準出力にもログが表示されます。

/etc/default/milter-managerに以下の内容を追加します。これによ り、標準出力に詳細なログが表示されます。

OPTION_ARGS="--verbose --no-daemon"

milter-managerをもう一度起動します。

% sudo /etc/init.d/milter-manager start

問題があればログが表示されます。起動しているmilter-managerは Ctrl+cで終了することができます。

問題が解決した後は、/etc/default/milter-managerに追加した OPTION_ARGSをコメントアウトし、デーモンプロセスで起動するよう に戻してから、milter-managerを起動しなおしてください。


Postfixの設定

まず、milterの設定をします。

/etc/postfix/main.cfに以下を追加します。

milter_default_action = accept
milter_mail_macros = {auth_author} {auth_type} {auth_authen}

それぞれ以下のような設定です。

milter_default_action = accept

milterに接続できないときはメールを受信します。milterとの 通信に問題がある場合でもメールサーバの機能を停止させない ためには、この設定が有効です。ただし、milterを復旧させる までの間に、スパムメールやウィルスメールを受信してしまう 可能性が高くなります。

迅速に復旧できる体制がととのっているのであれば、acceptで はなく、tempfailを指定するのがよいでしょう。デフォルトで はtempfailになっています。

milter_mail_macros = {auth_author} {auth_type} {auth_authen}

SMTP Auth関連の情報をmilterに渡します。milter-greylistな どが使用します。

続いて、Postfixにmilter-milterを登録します。spamass-milter、 clamav-milter、milter-greylistはmilter-manager経由で利用する ので、Postfixにはmilter-managerだけを登録すればよいことに注 意してください。

/etc/postfix/main.cfに以下を追加します。Postfixは /var/spool/postfix/にchrootすることに注意してください。

smtpd_milters = unix:/milter-manager/milter-manager.sock

Postfixの設定を再読み込みします。

% sudo /etc/init.d/postfix reload

以上で設定は完了です。

milter-managerはいくつかsyslogにログを出力します。mail.info に出力するので、正常に動作していればmilter-managerからのログ が/var/log/mail.infoにログがでるはずです。テストメールを送信 して確認してください。

まとめ

milter-managerを導入することにより、milterとPostfixを連携さ せる手間が削減されています。

通常であれば、Postfixのsmtpd_miltersにspamass-milter、 clamav-milter、miler-greylistのソケットを指定する必要がありま す。しかし、milter-managerを導入することにより、 milter-managerのソケットのみを指定するだけですむようになりま した。各milterのソケットはmilter-managerが検出するため、typo などの小さいですが気づきにくいミスに惑わされることがなくなり ます。

また、ここでは触れませんでしたが、milter-managerは /etc/default/milter-greylist内にあるようなENABLEDの設定も検出 します。そのため、milterを無効にしたい場合は、以下のような手 順になります。

% sudo /etc/init.d/milter-greylist stop
% sudo vim /etc/default/milter-greylist # ENABLED=1 => ENABLED=0

milterを無効にしたら、milter-managerの設定を再読み込みします。 milter-managerはmilterが無効になったことを検出し、無効になっ たmilter とは接続しなくなります。

% sudo /etc/init.d/milter-manager reload

Postfixのmain.cfを変更する必要はありません。

Ubuntu上でmilterを複数使っている場合は、milter-managerを導入 して、管理コストを削減することができます。