CentOS 6.2 でpostfixにopendkimを導入する。
1)
epelにあるopendkimを利用するので、epelが使えない場合は
epelを使えるようにする。
具体的には、CentOS 6.2で64bitなら以下のようなコマンドを発行する。
wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-5.noarch.rpm
rpm -ivh epel-release-6-5.noarch.rpm
2)
yumを使ってopendkimを導入する。
yum -y install opendkim
3)
opendkim用のプライベートキーを用意する。
例えば、ドメインが hoge.co.jp とすると以下のようなコマンドを発行する。
mkdir /etc/opendkim/keys/hoge.co.jp
/usr/bin/opendkim-genkey -D /etc/opendkim/keys/hoge.co.jp/ -d hoge.co.jp -s default
chown -R opendkim:opendkim /etc/opendkim/keys
mv /etc/opendkim/keys/hoge.co.jp/default.private /etc/opendkim/keys/hoge.co.jp/default
4)
opendkimまわりの設定ファイルを修正する。
関係するのは、
/etc/opendkim.conf
/etc/opendkim/KeyTable
/etc/opendkim/TrustedHosts
/etc/opendkim/SigningTable
の4つのファイル。
/etc/opendkim.confの変更内容は以下のとおり。
Mode sv
#KeyFile /etc/opendkim/keys/default.private
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
/etc/opendkim/KeyTableの変更内容は以下のとおり。
default._domainkey.hoge.co.jp hoge.co.jp:default:/etc/opendkim/keys/hoge.co.jp/default
/etc/opendkim/TrustedHostsの変更内容は以下のとおり。
127.0.0.1
localhost
mail.hoge.co.jp
hoge.co.jp
/etc/opendkim/SigningTableの変更内容は以下のとおり。
hoge.co.jp default._domainkey.hoge.co.jp
5)
Postfixの設定も変更する。
/etc/postfix/main.cfに以下を追記する。
#opendkim
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
6)
DNSの設定も変更する。
cat /etc/opendkim/keys/hoge.co.jp/default.txt
で表示される内容をDNSサーバに設定する。
可能なら、以下のようなDKIMポリシーも設定する。
_adsp._domainkey.example.com IN TXT "dkim=unknown"
7)
opendkimの開始とpostfixの再起動。
/etc/rc.d/init.d/opendkim start
/etc/rc.d/init.d/postfix restart
これで終わりです。
ついでに、上記の処理をシェルスクリプトにしてみました。
良かったら自己責任で使ってください。(^^;)
#!/bin/sh
#DNS
#DNS=hoge.co.jp
echo "----> Start DKIM setting for ${DNS}"
####
# install epel
####
if [ ! -e /etc/yum.repos.d/epel.repo ]
then
echo '----> Install epel'
OSFILE=`ls /etc -F | grep "release$\|version$"`
OS=`cat /etc/${OSFILE}`
MACHINE=`uname -m`
if [[ "$OS" =~ "CentOS release 6" ]]; then
OSVER="6"
RPM="epel-release-6-5.noarch.rpm"
else
echo '---->fail'
exit;
fi
if [[ "$MACHINE" =~ "x86_64" ]]; then
MACHINEVER="x86_64"
else
MACHINEVER="i386"
fi
EPELURL="http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/${OSVER}/${MACHINEVER}/${RPM}"
wget $EPELURL
rpm -ivh $RPM
fi
###
# install opendkim
###
echo '----> Install opendkim'
yum -y install opendkim
if [ ! -e /etc/opendkim/keys/${DNS}/default ]
then
mkdir /etc/opendkim/keys/${DNS}
/usr/bin/opendkim-genkey -D /etc/opendkim/keys/${DNS}/ -d ${DNS} -s default
chown -R opendkim:opendkim /etc/opendkim/keys
mv /etc/opendkim/keys/${DNS}/default.private /etc/opendkim/keys/${DNS}/default
fi
DKIM_CONF=/etc/opendkim.conf
KEY_TABLE=/etc/opendkim/KeyTable
TRUSTED_HOSTS=/etc/opendkim/TrustedHosts
SIGNING_TABLE=/etc/opendkim/SigningTable
POSTFIX_CONF=/etc/postfix/main.cf
echo '----> Eidt opendkim.conf'
if [ -e $DKIM_CONF ]
then
if [ -e ${DKIM_CONF}.org ]
then
cp ${DKIM_CONF}.org ${DKIM_CONF}
else
cp ${DKIM_CONF} ${DKIM_CONF}.org
fi
sed -e 's/^Mode.*/Mode sv/' \
-e 's/^KeyFile/#KeyFile/' \
-e 's/^#KeyTable/KeyTable/' \
-e 's/^#SigningTable/SigningTable/' \
-e 's/^#ExternalIgnoreList/ExternalIgnoreList/' \
-e 's/^#InternalHosts/InternalHosts/' \
${DKIM_CONF} > ${DKIM_CONF}.tmp
cp ${DKIM_CONF}.tmp ${DKIM_CONF}
rm -f ${DKIM_CONF}.tmp
echo '----> Eidt KeyTable'
if [ -e ${KEY_TABLE}.org ]
then
cp ${KEY_TABLE}.org ${KEY_TABLE}
else
cp ${KEY_TABLE} ${KEY_TABLE}.org
fi
echo "default._domainkey.${DNS} ${DNS}:default:/etc/opendkim/keys/${DNS}/default" >> ${KEY_TABLE}
echo '----> Eidt TrustedHosts'
if [ -e ${TRUSTED_HOSTS}.org ]
then
cp ${TRUSTED_HOSTS}.org ${TRUSTED_HOSTS}
else
cp ${TRUSTED_HOSTS} ${TRUSTED_HOSTS}.org
fi
echo "localhost" >> ${TRUSTED_HOSTS}
echo "mail.${DNS}" >> ${TRUSTED_HOSTS}
echo "${DNS}" >> ${TRUSTED_HOSTS}
echo '----> Eidt SigningTable'
if [ -e ${SIGNING_TABLE}.org ]
then
cp ${SIGNING_TABLE}.org ${SIGNING_TABLE}
else
cp ${SIGNING_TABLE} ${SIGNING_TABLE}.org
fi
echo "${DNS} default._domainkey.${DNS}" >> ${SIGNING_TABLE}
echo '----> Eidt Postfix main.cf'
GRP=`cat ${POSTFIX_CONF}|grep 'smtpd_milters'`
if [ -z $GRP ]
then
echo "" >> ${POSTFIX_CONF}
echo "#opendkim" >> ${POSTFIX_CONF}
echo "smtpd_milters = inet:127.0.0.1:8891" >> ${POSTFIX_CONF}
echo 'non_smtpd_milters = $smtpd_milters' >> ${POSTFIX_CONF}
echo 'milter_default_action = accept' >> ${POSTFIX_CONF}
fi
echo '----> (re)start daemons'
if [ -e /etc/rc.d/init.d/opendkim ]
then
restatus=`/etc/rc.d/init.d/opendkim status`
if [[ "$restatus" =~ stopped ]]; then
/etc/rc.d/init.d/opendkim start
else
/etc/rc.d/init.d/opendkim restart
fi
else
echo '/etc/rc.d/init.d/opendkim not exists'
exit;
fi
/sbin/chkconfig opendkim on
if [ -e /etc/rc.d/init.d/postfix ]
then
restatus=`/etc/rc.d/init.d/postfix status`
if [[ "$restatus" =~ stopped ]]; then
/etc/rc.d/init.d/postfix start
else
/etc/rc.d/init.d/postfix restart
fi
else
echo '/etc/rc.d/init.d/postfix not exists'
exit;
fi
echo '#########################################'
echo 'INSTALL IS OVER'
echo '#########################################'
echo ''
echo 'Change DNS'
cat /etc/opendkim/keys/${DNS}/default.txt
echo "_adsp._domainkey"' IN TXT "dkim=unknown"'
else
echo "----> FAIL: ${DKIM_CONF} is not exists!"
exit;
fi