PostfixにDKIMを対応させる。(CentOS-5のみ)

元ネタ tkoshima.net

※dkim-milterの最新バージョンは2.8.3だが、CentOSのm4のバージョンが古い為にビルドできません。

下準備
CentOSに開発環境がインストールされていない場合は開発環境をインストールする。

yum -y groupinsall "Deveropment Tools"

dkim-milterのビルドに必要なものをインストールする。

yum -y install openssl-devel
yum -y install sendmail-devel

rpmパッケージを作成するために Checkinstallをインストールする。

yum --enablerepo=rpmforge -y install checkinstall

dkim-milter とdk-milter をダウンロードする。(要バージョンの確認)

cd /usr/src/
wget http://jaist.dl.sourceforge.net/sourceforge/dkim-milter/
     dkim-milter-2.8.0.Beta6.tar.gz (1行で記述)
wget http://jaist.dl.sourceforge.net/sourceforge/dk-milter/dk-milter-1.0.1.tar.gz

解凍する。

tar zxvf dkim-milter-2.8.0.Beta6.tar.gz
tar zxvf dk-milter-1.0.1.tar.gz

dk-milterにリンクして、DomainKeyにも対応させる。

cd dkim-milter-2.8.0.Beta6
ln -s ../dk-milter-1.0.0/libdk ./

コンフィグファイルをコピー

cp site.config.m4.dist devtools/Site/site.config.m4

site.config.m4ファイルに追記する。

vi devtools/Site/site.config.m4
define(`bld_VERIFY_DOMAINKEYS', `true')
define(`confMANROOT', `/usr/share/man/man')

ビルドする。

./Build

rpmパッケージを作成する。

checkinstall --exclude=/selinux -R

rpmパッケージは /usr/src/redhat/RPMS/i386/dkim-milter-2.8.0.Beta6-1.i386.rpm として、作成されている。

rpmパッケージをメールサーバにインストールする。

rpm -ivh /usr/src/redhat/RPMS/i386/dkim-milter-2.8.0.Beta6-1.i386.rpm

dkim-milter用ユーザの作成

useradd -g mail -m -d /var/milter -s /sbin/nologin milter
chmod 755 /var/milter

秘密鍵、証明書の作成

mkdir /etc/pki/dkim-milter
cd /etc/pki/dkim-milter
dkim-genkey -s セレクタ名 -d ドメイン名
(例) dkim-genkey -s selector -d example.com
chmod 440 selector.private
chown milter:mail selector.private

署名をつけるInternalネットワークのリストを設定

vi /etc/pki/dkim-filter/ilist
127.0.0.1
192.168.1.0/24

DNSへの設定

_policy._domainkey IN TXT "t=y; o=~"
_domainkey IN TXT "t=y; o=~"
selector._domainkey IN TXT "v=DKIM1; g=*; k=rsa; p=
~省略~" ;----- DKIM selector for example.com

dkim-milterの起動スクリプト作成

vi /etc/init.d/dkim-milter

#!/bin/bash
#
#
# dkim-milter:
#
# chkconfig: 2345 75 35
# processname: dkim-milter
# description: dkim milter
source /etc/rc.d/init.d/functions

PROG=/usr/sbin/dkim-filter

PID=/var/milter/dkim-milter.pid
SOCKET=inet:10026   #ここでinetの番号を指定する
#SOCKET=/var/milter/dkim-milter.socket   #Socketの場合

DOMAINLIST="example.com"  #カンマ区切り
SELECTOR="selector"       #セレクタ名
KEY="/etc/pki/dkim-milter/${SELECTOR}.private"
ILIST="/etc/pki/dkim-milter/ilist"

RETVAL=0

start() {
    echo -n $"Starting dkim-milter: "
    daemon --user milter \
   "umask 117; $PROG -p $SOCKET -d $DOMAINLIST -k $KEY -l -P \
    $PID -s $SELECTOR -i $ILIST"
#  "umask 117; $PROG -p local:$SOCKET -d $DOMAINLIST -k $KEY -l -P \
    $PID -s $SELECTOR -i $ILIST"   #Socketの場合
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] >> touch /var/lock/subsys/dkim-milter
    return $RETVAL
}

stop() {
    echo -n $"Shutting down dkim-milter: "
    killproc $PROG
#    rm -f $SOCKET
    RETVAL=$?
    echo
    [ "$RETVAL" = 0 ] >> rm -f /var/lock/subsys/dkim-milter
    return $RETVAL
}

restart() {
    stop
    start
}

case "$1" in
  start)
    start
    ;;

  stop)
    stop
    ;;
  restart)
    restart
    ;;
  status)
    status $PROG
    RETVAL=$?
    ;;
  *)
    echo $"Usage: $0 {start|stop|restart|status}"
    RETVAL=1
esac

exit;

dkim-milter起動スクリプトをchkconfigに登録する

chmod 755 dkim-milter
chkconfig --add dkim-milter
chkconfig dkim-milter on

Postfixの設定

vi /etc/postfix/main.cf
#DKIM
smtpd_milters = inet:10026
#smtpd_milters = unix:/var/milter/dkim-milter.socket  #Socketの場合
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

2009/11/19 master.cfへの設定は不要な為、削除しました。