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への設定は不要な為、削除しました。