dkim-milterをmilter-manager経由で使う

今日Postfix-jpメーリングリストに「milter manager 1.4.0(安定版)がリリースされました」とのメールが投稿されてきました。

milter managerとは、複数のmilterのラッパーとして動作し、より柔軟なmilter活用が可能になるソフトウェアらしい。
詳細は、以下のURLにある「はじめに」を参照してください。

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

機能の一つに「milter自動検出」があるのですが、dkim-milterは対応していない様子。
うちではmilterと言えばそれしか使っていないのですが、設定も簡単そうなので導入してみました。

以下はその設定、およびちょっとしたカスタマイズです。

環境は以下です。

CentOS 5.3
Postfix 2.3.3-2.1
dkim-milter 2.8.3
milter-manager 1.4.0

 


インストール

基本的にはサイトにある通りです。

CentOSへインストール - milter manager

ここではmilter類のインストールをしていません。また、rpmforgeレポジトリは使えるように設定されているとしています。
(参考 : RPMforgeリポジトリ導入(RPMforge) - CentOSで自宅サーバー構築

# yum install -y libtool intltool gcc glib2-devel ruby ruby-devel
# yum install -y --enablerepo=rpmforge ruby-rrdtool
# cd /var/tmp
# wget http://dennou-k.kugi.kyoto-u.ac.jp/arch/ruby/products/rpm/RPMS/CentOS/5/x86_64/ruby-glib2-0.16.0-1dc.x86_64.rpm
# rpm -Uvh ruby-glib2-0.16.0-1dc.x86_64.rpm
# wget http://downloads.sourceforge.net/milter-manager/milter-manager-1.4.0-0.x86_64.rpm
# rpm -ivh milter-manager-1.4.0-0.x86_64.rpm

前提

dkim-milterは以下のサイトを参考にインストール・設定がされているものとします。

www.moritox.jp : DKIM 設定

postfix <-> milter-manager <-> dkim-milter 間は、unixソケットを使って通信させます。
ここで、postfixはユーザ:postfix・グループ:postfix,mail、dkim-milterはユーザ:milter・グループ:milter,mailで動作しているとします。

設定

milter-managerユーザをmailグループに入れます。

# usermod -G mail milter-manager

/etc/milter-manager/milter-manager.local.conf に以下を書き込みます。

security.effective_group = "mail"

manager.unix_socket_mode = 0660

controller.unix_socket_mode = 0660

define_milter("dkim-milter") do |milter|
    milter.connection_spec = "unix:/var/run/milter/dkim-milter.socket"
    milter.description = "DKIM milter with Domainkeys Verification"
    milter.enabled = true
    milter.fallback_status = "accept"
    milter.evaluation_mode = false
    #milter.command = "/etc/init.d/dkim-milter"
    #milter.command_options = "start"
end

起動スクリプトで様々な設定が上書きされてしまい、上記コンフィグファイルが意味をなしていません。
/etc/init.d/milter-manager の36~63行目を以下のように書き換えます。

これはバグに近い気がする

DAEMON_ARGS="--daemon"
#DAEMON_ARGS="--daemon --pid-file ${PIDFILE}"
#if [ -n "${CONNECTION_SPEC}" ]; then
#       DAEMON_ARGS="${DAEMON_ARGS} --connection-spec ${CONNECTION_SPEC}"
#fi
#if [ -n "${USER}" ]; then
#       if ! getent passwd | grep -q "^${USER}:"; then
#               echo "$0: user for running $prog doesn't exist: ${USER}" >&2
#               exit 1
#       fi
#       mkdir -p `dirname ${PIDFILE}`
#       chown -R ${USER} `dirname ${PIDFILE}`
#       DAEMON_ARGS="${DAEMON_ARGS} --user-name ${USER}"
#fi
#if [ -n "${GROUP}" ]; then
#       if ! getent group | grep -q "^${GROUP}:"; then
#               echo "$0: group for running $prog doesn't exist: ${GROUP}" >&2
#               exit 1
#       fi
#       DAEMON_ARGS="${DAEMON_ARGS} --group-name ${GROUP}"
#fi
#if [ -n "${SOCKET_GROUP}" ]; then
#       if ! getent group | grep -q "^${SOCKET_GROUP}:"; then
#               echo "$0: group for socket doesn't exist: ${SOCKET_GROUP}" >&2
#               exit 1
#       fi
#       DAEMON_ARGS="${DAEMON_ARGS} --socket-group-name ${SOCKET_GROUP}"
#fi
DAEMON_ARGS="${DAEMON_ARGS} ${OPTION_ARGS}"

milter-managerを登録・起動し、動作を確認します。

# chkconfig --add milter-manager
# chkconfig milter-manager on
# service milter-manager start
# milter-test-server -s unix:/var/run/milter-manager/milter-manager.sock
status: accept
elapsed-time: 0.017699 seconds

postfixの設定を変えます。

# vi /etc/postfix/main.cf
smtpd_milters = unix:/var/run/milter/dkim-milter.socket
  ↓
smtpd_milters = unix:/var/run/milter/milter-manager.socket

# service postfix reload

sa-test@sendmail.net などへメールをして、動作を確認してください。
/var/log/maillog にログが出るので、tail -f で監視していると良いと思います。

カスタマイズ

うちの環境に沿わせるカスタマイズです。ご参考程度に。

  • 実行ユーザはmilterに変更
  • ソケットなどは/var/run/milterに変更
  • milter-manager-log-analyzerのログは/var/www/milter-managerへ

/etc/milter-manager/milter-manager.local.conf

#security.privilege_mode = true
security.effective_user = "milter"
security.effective_group = "mail"

manager.connection_spec = "unix:/var/run/milter/milter-manager.socket"
manager.unix_socket_mode = 0660
manager.pid_file = "/var/run/milter/milter-manager.pid"
manager.custom_configuration_directory = "/var/www/milter-manager/"

controller.connection_spec = "unix:/var/run/milter/milter-manager-controller.socket"
controller.unix_socket_mode = 0660

define_milter("dkim-milter") do |milter|
    milter.connection_spec = "unix:/var/run/milter/dkim-milter.socket"
    milter.description = "DKIM milter with Domainkeys Verification"
    milter.enabled = true
    milter.fallback_status = "accept"
    milter.evaluation_mode = false
    #milter.command = "/etc/init.d/dkim-milter"
    #milter.command_options = "start"
end

/etc/httpd/conf.d/milter-manager-log.conf

Alias /milter-manager /var/www/milter-manager

<Directory /var/www/milter-manager>
        SSLRequireSSL
</Directory>

/etc/cron.d/milter-manager-log

PATH=/bin:/usr/local/bin:/usr/bin
*/30 * * * * root cat /var/log/maillog | su milter -s /bin/sh -c "milter-manager-log-analyzer --output-directory /var/www/milter-manager/log"

/var/www/milter-manager は milter, apache が読み書きできるように。

 


以上です。

spamassassin は milter を通さず、procmail で配送しているのですが、milter-managerを経由させるようにしてもいいかなと思いました。

 

トラックバック(0)


トラックバックを送る際には、この記事へのリンクを記事内につけてください。

トラックバックはありません。

コメント(2)

#1: 投稿者: kou [RES]

手動でインストールしたRPMの自動検出には対応していません。どのようなconfigureオプションが師弟されているか分からないので。。。
RPMforgeやEPELでインストールしたmilterには対応しています。

/etc/sysconfig/milter-managerでなにか設定していませんか?
デフォルトでは/etc/sysconfig/milter-managerの設定はすべてコメントアウトされているので、
/etc/init.d/milter-managerの該当部分は実行されません。

#2: 投稿者: ゴリ丸 Author Profile Page [RES]

>>1 kou さん
コメントありがとうございます。

> 手動でインストールしたRPMの自動検出には対応していません。どのようなconfigureオプションが師弟されているか分からないので。。。
> RPMforgeやEPELでインストールしたmilterには対応しています。

それは考えてみれば当たり前のことですね。
DKIMもいずれ普及すれば。。。

> /etc/sysconfig/milter-managerでなにか設定していませんか?
> デフォルトでは/etc/sysconfig/milter-managerの設定はすべてコメントアウトされているので、
> /etc/init.d/milter-managerの該当部分は実行されません。

/etc/rc.d/init.d/milter-managerの先頭部分で以下の変数がハードコーディングされているため、
それぞれのif文内部が実行され、DAEMON_ARGSに引数が加えられていってしまいます。

USER, GROUP, SOCKET_GROUP, PIDFILE, CONNECTION_SPEC

こちらはメーリングリストで改めて提起させて頂きますので、そちらをご参照ください。

コメントを投稿してください。