2012年8月1日水曜日

CentOS 6.2 でpostfixにopendkimを導入する。


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

0 件のコメント:

コメントを投稿