dkim-milterをmilter-manager経由で使う
- Next Page: Windows起動時にVirtualBoxゲストOSを自動起動させる
- Prev Page: 働く理由について考えてみた
今日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は以下のサイトを参考にインストール・設定がされているものとします。
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)
手動でインストールしたRPMの自動検出には対応していません。どのようなconfigureオプションが師弟されているか分からないので。。。
RPMforgeやEPELでインストールしたmilterには対応しています。
/etc/sysconfig/milter-managerでなにか設定していませんか?
デフォルトでは/etc/sysconfig/milter-managerの設定はすべてコメントアウトされているので、
/etc/init.d/milter-managerの該当部分は実行されません。
>>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
こちらはメーリングリストで改めて提起させて頂きますので、そちらをご参照ください。
コメントを投稿してください。