dkim-milter の DNSクエリキャッシュを有効にしてみた時の備忘録です。

■説明
dkim-milterでは、DNSへの負荷を軽減するのにクエリキャッシュを持つことが可能です。
※DNSクエリキャッシュを有効にするには、ビルド時にオプションを指定してあげる必要があります。
ここでは、DNSクエリキャッシュを有効にしてみてインストールしてみました。
ちなみにインストールは、自作srcRPMから行いました。

■OSバージョン
CentOS release 6.3 64bit

■dkim-milterバージョン
dkim-milter-2.8.3

■dkim-milterのsrcRPM
dkim-milter-2.8.3-4.el6.src.rpm
MD5(dkim-milter-2.8.3-4.el6.src.rpm)= 5a19ed82ca740bffce6b0bfddc5262cd

(1)dkim-milterのsrcRPMをダウンロード

[root@example ~]# wget http://www.kurobuti.com/download/dkim-milter/dkim-milter-2.8.3-4.el6.src.rpm
[root@example ~]# openssl md5 dkim-milter-2.8.3-4.el6.src.rpm

※MD5ハッシュ値に間違いがないこと

(2)dkim-milterのRPMを作成

[root@example ~]# rpm -ivh dkim-milter-2.8.3-4.el6.src.rpm
[root@example SPECS]# rpmbuild -bb dkim-milter.spec

ちなみに、DNSキャッシュクエリを有効にしている部分はこれです。

・DNSキャッシュ有効部分

# Options
# When you validate the DNS_CACHE option, please set 1.
%define         DNS_CACHE       1

(snip)

%if %{DNS_CACHE}
BuildRequires:  db4-devel
%endif

%description
The dkim-milter package is an open source implementation of the DKIM
sender authentication system proposed by the E-mail Signing Technology
Group (ESTG), now a proposed standard of the IETF (RFC4871).

DKIM is an amalgamation of the DomainKeys (DK) proposal by Yahoo!, Inc.
and the Internet Identified Mail (IIM) proposal by Cisco.

This package consists of a library that implements the DKIM service and a
milter-based filter application that can plug in to the sendmail MTA to
provide that service to sufficiently recent sendmail MTAs and other MTAs
that support the milter protocol.

%prep
%setup -q
echo define\(\`confMBINDIR\', \`%{_sbindir}\'\) > %{option_file}
echo define\(\`confSBINDIR\', \`%{_sbindir}\'\) >> %{option_file}
echo define\(\`confMBINDIR\', \`%{_sbindir}\'\) >> %{option_file}
echo define\(\`confEBINDIR\', \`%{_sbindir}\'\) >> %{option_file}
echo define\(\`confUBINDIR\', \`%{_bindir}\'\) >> %{option_file}
echo define\(\`confINCLUDEDIR\', \`%{_includedir}\'\) >> %{option_file}
echo define\(\`confLIBDIR\', \`%{_libdir}\'\) >> %{option_file}
echo define\(\`confMANROOT\', \`%{_mandir}\'\) >> %{option_file}

%if %{DNS_CACHE}
echo APPENDDEF\(\`confENVDEF\', \`-DQUERY_CACHE \'\) >> %{option_file}
echo APPENDDEF\(\`confLIBS\', \`-ldb \'\) >>  %{option_file}
%endif

37行目が無いと以下のエラーが発生します。

・エラー

cc -o dkim-filter -lpthread  config.o dkim-ar.o dkim-arf.o dkim-crypto.o dkim-db.o dkim-filter.o stats.o test.o util.o      -lmilter  /root/rpmbuild/BUILD/dkim-milter-2.8.3/obj.Linux.2.6.32-279.11.1.el6.x86_64.x86_64/libdkim/libdkim.a /root/rpmbuild/BUILD/dkim-milter-2.8.3/obj.Linux.2.6.32-279.11.1.el6.x86_64.x86_64/libsm/libsm.a  -ldl -lssl -lcrypto
dkim-db.o: In function `dkimf_db_open':
dkim-db.c:(.text+0x606): undefined reference to `db_create'
/root/rpmbuild/BUILD/dkim-milter-2.8.3/obj.Linux.2.6.32-279.11.1.el6.x86_64.x86_64/libdkim/libdkim.a(dkim-cache.o): In function `dkim_cache_init':
dkim-cache.c:(.text+0x8b5): undefined reference to `db_create'
collect2: ld returned 1 exit status
make[1]: *** [dkim-filter] Error 1
make[1]: Leaving directory `/root/rpmbuild/BUILD/dkim-milter-2.8.3/obj.Linux.2.6.32-279.11.1.el6.x86_64.x86_64/dkim-filter'
make: *** [all] Error 2


(3)dkim-milterのRPMパッケージをインストール

[root@example SPECS]# cd ../RPMS/x86_64/
[root@example x86_64]# rpm -ivh dkim-milter-2.8.3-4.el6.x86_64.rpm
準備中...                ########################################### [100%]
   1:dkim-milter            ########################################### [100%]


(4)DNSキャッシュの有効設定

[root@example ~]# cd /etc/mail
[root@example mail]# vi dkim-filter.conf
# QueryCache            No
↓ # 変更
QueryCache            yes


・注意点
クエリキャッシュは間違った情報であってもキャッシュしてしまいます。
例えば、登録されている公開鍵が担当者のミスで登録されていた場合、その鍵をキャッシュしてしまった後に正規の鍵を再登録したとしてもキャッシュにより古い情報でDKIMの検証が行われてしまいます。


10月 21, 2012 at 4:23 pm by 黒ぶちメガネ
Category: Linux, Postfix, spam対策