ご注意下さい
この記事は3年以上前に書かれた記事ですので、内容が古い可能性があります。
今回は前回のように詐称されるのを防ぐのではなく、詐称メールを受け付けないようにする設定について考えておきます。
qmailにパッチを当てる
qmail SPF (Sender Policy Framework) patch
上記よりパッチをダウンロードしてqmailにパッチを適用しましょう。
ただし、SMTP認証のパッチとは相性が悪いので先にqmail-spf-rc5.patchを適用して、その後qmail-smtpd-auth-0.31パッチを適用した方が楽だと思います。
qmail-smtpd-auth-0.31.tar.gz [8798 bytes] - Download Mirrors (1/10)
上記パッチを適用してもエラーが出ますので修正が必要となります。ただbase64.h、base64.cを組み込むだけなのでそんなに大変じゃないはず。この辺はいつか時間があったら全てのパッチを適用するやり方を別途記事にしてみたいと思います。
このqmailをインストールすることで、メールヘッダに以下のような情報が付くようになると思います。
Received: from 74.125.82.175 by kamataxxx (envelope-from <xxxxxxx@gmail.com>, uid 501) with qmail-scanner-2.08st (f-prot: 6.3.3.5015/. spamassassin: 3.3.1. perlscan: 2.08st. Clear:RC:0(74.125.82.175):SA:0(-94.9/10.0):. Processed in 13.316466 secs); 22 Feb 2014 06:42:37 -0000 X-Spam-Status: No, hits=-94.9 required=10.0 Received: from unknown (HELO mail-we0-f175.google.com) (74.125.82.175) by 0 with SMTP; 22 Feb 2014 15:42:23 +0900 Received-SPF: pass (0: SPF record at _netblocks.google.com designates 74.125.82.175 as permitted sender) Received: by mail-we0-f175.google.com with SMTP id q59so3225224wes.34 for <xxxxx@kamata-net.com>; Fri, 21 Feb 2014 22:42:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=86az/MDV1abafTwvO9F01SY3s/WMKO/X7hVq1gSlTa4=; b=0byTMvMaXTPUdbgl4Lf/eRCrFhV4estfm7bQrv/vKTdi1hmnmdr8nxgmK9XRqBSkLy +VT8jBi0ukOQf+gEuB6C/5nNR4bfEcrU+q4Hisgx7sKw+h5aWFBtiGcOkK0YYHacyo5l KZwI8PT18BR4paiWKw5dM2Lzku3ItS7TRrgXTkcKNhMLMOeyKX47ZvnQIKU7qwdLfEH9 dsQv8JgWF8EgA7syJanyzomOD051ZjdZH6uq7NJ/0ctkkdJ+SKjaCz8nJNQ/uVBmiHyt vDtpf2GwYKehd1vz0+fBRtm2EBrX8JVnV6aPuznVoEG65/bhyLzefzzx9q8k62XHUNka Zdyg== MIME-Version: 1.0
DNSでSPFレコードをまだ公開しておらず、メールなりすましの問合せに対応していない送信元からのメールは例えば以下のようなメールヘッダになります
Received-SPF: none (0: domain at mail.viewsnet.jp does not designate permitted sender hosts)
SA(SpamAssassin)の設定を行う(SPF)
SPFパッチをqmailに適用すれば、それでOKかと思っていたのですが、SAのスコアリングにSPFを用いることができるようです。つまりReceive-SPF: failとかsoftfailなどのメールはなりすましメールの可能性が高い(スパムメールの可能性が高い)ということで判定に加味することができます。
実は、init.preに下記のように記述があったのですでに対応できていると思っていたのですが、明示的に設定しないといけないことが今回分かりました。
# SPF - perform SPF verification. # loadplugin Mail::SpamAssassin::Plugin::SPF
maillogを見てもSPFに関する判定結果が皆無だったからです。例えば
このようにSPF_HELO_PASS,SPF_PASS,USER_IN_SPF_WHITELISTなど、SPFと名の付くものが一切出ていなかったんですね。そこで以下のコマンドを打って調べてみるとMail::SPFがインストールされていない…と。
2月 21 10:16:07.568 [543] dbg: diag: [...] module not installed: Mail::SPF ('require' failed)
2月 21 10:16:07.579 [543] dbg: config: read file /usr/share/spamassassin/25_spf.cf
2月 21 10:16:07.598 [543] dbg: config: read file /usr/share/spamassassin/60_whitelist_spf.cf
2月 21 10:16:07.649 [543] dbg: plugin: loading Mail::SpamAssassin::Plugin::SPF from @INC
2月 21 10:16:08.513 [543] dbg: plugin: did not register Mail::SpamAssassin::Plugin::SPF, already registered
2月 21 10:16:18.966 [543] dbg: spf: cannot get Envelope-From, cannot use SPF
2月 21 10:16:18.966 [543] dbg: spf: def_spf_whitelist_from: could not find useable envelope sender
2月 21 10:16:18.968 [543] dbg: spf: spf_whitelist_from: could not find useable envelope sender
そこでMail::SPFをインストールするのですが、私の環境ではNet::DNSとNet::DNS::Resolver::Programmableも依存関係にあるようで不足していたため(Mail::SPFをインストールしようとすると怒られる)、追加でインストールします。
# perl -MCPAN -e 'install Net::DNS::Resolver::Programmable';
# perl -MCPAN -e 'install Mail::SPF';
その上でlocal.confでスコアを決めます。SPF_PASSは加点せず、それ以外の場合にはSPAMに近くなるようにします。
また、whitelist_from_spfでSPF_PASSのメールはSPAMメールでない、と判定しちゃっています。
(やりすぎか?後からチューニングの必要はありそうです。そもそも世の中SPFレコードを導入している会社がどれぐらいあるのかも怪しいですし)
# SPF score SPF_HELO_SOFTFAIL 2.5 score SPF_SOFTFAIL 2.5 score SPF_FAIL 3.0 score SPF_PASS 0 ~ # SPF チェック whitelist_from_spf *@*.co.jp whitelist_from_spf *@*.go.jp whitelist_from_spf *@*.ac.jp whitelist_from_spf *@kamata-net.com whitelist_from_spf *@docomo.ne.jp whitelist_from_spf *@ezweb.ne.jp whitelist_from_spf *@i.softbank.jp whitelist_from_spf *@softbank.ne.jp whitelist_from_spf *@*.pdx.ne.jp whitelist_from_spf *@pdx.ne.jp whitelist_from_spf *@willcom.com whitelist_from_spf *@yahoo.com whitelist_from_spf *@gmail.com whitelist_from_spf *@hotmail.com whitelist_from_spf *@goo.ne.jp whitelist_from_spf *@nifty.com #whitelist_from_spf *@excite.co.jp whitelist_from_spf *@apple.com whitelist_from_spf *@*.apple.com whitelist_from_spf *@*.ocn.ne.jp whitelist_from_spf *@jcom.home.ne.jp whitelist_from_spf *@*.biglobe.ne.jp whitelist_from_spf *@goo.ne.jp whitelist_from_spf *@mixi.jp whitelist_from_spf *@postmaster.twitter.com whitelist_from_spf *@facebookmail.com whitelist_from_spf *@jp.sony.com whitelist_from_spf *@mydocomo.com whitelist_from_spf *@aol.com #whitelist_from_spf *@amazon.co.jp whitelist_from_spf *@replay1.ebay.com whitelist_from_spf *@ebay.com whitelist_from_spf *@itunes.com whitelist_from_spf *@*.paypal.com whitelist_from_spf *@paypal.com whitelist_from_spf *@*.plala.or.jp
docomoからメールを送ってみると
Feb 22 21:06:48 mailhost spamd[18190]: spamd: connection from mailhost [127.0.0.1] at port 56210
Feb 22 21:06:48 mailhost spamd[18190]: spamd: setuid to qscand succeeded
Feb 22 21:06:48 mailhost spamd[18190]: spamd: checking message <0B3CCB2D2AE04F8381A76007E8FCB577@docomo.ne.jp> for qscand:601
Feb 22 21:06:49 mailhost spamd[18190]: spamd: clean message (-105.2/10.0) for qscand:601 in 1.7 seconds, 1395 bytes.
Feb 22 21:06:49 mailhost spamd[18190]: spamd: result: . -105 - BAYES_05,CONTENT_TYPE_PRESENT,DIRECTUNKNOWN,HTML_MESSAGE,JPHANDPHONE,MULTIPART_ALTERNATIVE,RCVD_IN_DNSWL_NONE,RDNS_NONE,REVDNSUNKNOWN,SPF_HELO_PASS,USER_IN_SPF_WHITELIST,UTF8,VALIDDOCOMO scantime=1.7,size=1395,user=qscand,uid=601,required_score=10.0,rhost=mailhost,raddr=127.0.0.1,rport=56210,mid=<0B3CCB2D2AE04F8381A76007E8FCB577@docomo.ne.jp>,bayes=0.012083,autolearn=ham
Feb 22 21:06:50 mailhost qmail: 1393070810.012886 new msg 559653
Feb 22 21:06:50 mailhost qmail: 1393070810.017303 info msg 559653: bytes 1765 from
whitelist_from_spfが効いていてスコアが-105になっていますが、狙い通りには出来ています。
SA(SpamAssassin)の設定を行う(DKIM/DomainKeys)
googleやyahooなどはメールヘッダを見てみると分かるのですが電子署名を付けて来ます。
gmailの場合
Received: by mail-we0-f175.google.com with SMTP id q59so3225224wes.34 for <xxxxx@kamata-net.com>; Fri, 21 Feb 2014 22:42:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=86az/MDV1abafTwvO9F01SY3s/WMKO/X7hVq1gSlTa4=; b=0byTMvMaXTPUdbgl4Lf/eRCrFhV4estfm7bQrv/vKTdi1hmnmdr8nxgmK9XRqBSkLy +VT8jBi0ukOQf+gEuB6C/5nNR4bfEcrU+q4Hisgx7sKw+h5aWFBtiGcOkK0YYHacyo5l KZwI8PT18BR4paiWKw5dM2Lzku3ItS7TRrgXTkcKNhMLMOeyKX47ZvnQIKU7qwdLfEH9 dsQv8JgWF8EgA7syJanyzomOD051ZjdZH6uq7NJ/0ctkkdJ+SKjaCz8nJNQ/uVBmiHyt vDtpf2GwYKehd1vz0+fBRtm2EBrX8JVnV6aPuznVoEG65/bhyLzefzzx9q8k62XHUNka Zdyg== MIME-Version: 1.0
Yahoo!メールの場合
Received-SPF: pass (0: SPF record at spf03.yahoo.co.jp designates 183.79.150.37 as permitted sender) Received: (qmail 9156 invoked by uid 60001); 22 Feb 2014 08:13:58 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.co.jp; s=yj20110701; t=1393056838; bh=d/yc9Ut/+A1ZbBwqZkJC+SJw90nU+KW9ubJ8Uw0MHtY=; h=Message-ID:X-YMail-OSG:Received:X-Mailer:Date:From:Reply-To:Subject:To:MIME-Version:Content-Type; b=A7XONzfmr4PGsLIAV/WcpH6dC3bu0RlPDH60CFDdIjFZ332xd6qSyinU5T+Gxh4OJM83R74EDbWnHZQl6SN5KtNosHBoX63l+/z2Y97JOG9yjkLnF3WIcxQdqP5LFhlryWViCow/rcstvWaMMamd/GFo+A6cC8PV+Zgs6XhS+tA= DomainKey-Signature:a=rsa-sha1; q=dns; c=nofws; s=yj20110701; d=yahoo.co.jp;
この電子署名をチェックして本物のメールかどうかを見極められればそれに越したことはありません。
v312.preを読むと、Mail::DKIMをインストールせよ、と書いてあります。
# DKIM - perform DKIM verification # # Mail::DKIM module required for use, see INSTALL for more information. # # Note that if C<Mail::DKIM> version 0.20 or later is installed, this # renders the DomainKeys plugin redundant. # loadplugin Mail::SpamAssassin::Plugin::DKIM
例によっていろいろなものが追加で足りなかったので以下の順番にインストールしました。
# perl -MCPAN -e 'install Crypt::OpenSSL::RSA';
# perl -MCPAN -e 'install Date::Format';
# perl -MCPAN -e 'install Date::Parse';
# perl -MCPAN -e 'install Mail::Address';
# perl -MCPAN -e 'install Mail::DKIM';
local.confは以下のように設定します。電子署名のチェックが通っている場合にはSPFよりも信頼できるのでスコアを下げます。電子署名が付いていなくても加点はしません。また、whitelist_from_dkimの設定をホワイトリストの先頭に持ってきてDKIMチェック→SPFチェック→個別ホワイトリストに順番に見ていくことにします。
score DKIM_VERIFIED -2.0 score DKIM_SIGNED -1.0 ~ # DKIM チェック whitelist_from_dkim *@*.ne.jp whitelist_from_dkim *@*.co.jp whitelist_from_dkim *@*.com whitelist_from_dkim *@*.net # SPF チェック whitelist_from_spf *@*.co.jp
gmailからメールを送って確認してみます。
Feb 22 18:10:28 mailhost spamd[6428]: spamd: setuid to qscand succeeded
Feb 22 18:10:28 mailhost spamd[6428]: spamd: checking message
Feb 22 18:10:28 mailhost spamd[6428]: spamd: clean message (-198.0/10.0) for qscand:601 in 0.4 seconds, 1742 bytes.
Feb 22 18:10:28 mailhost spamd[6428]: spamd: result: . -198 - ARIN,BAYES_50,CONTENT_TYPE_PRESENT,DIRECTUNKNOWN,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VERIFIED,FREEMAIL_FROM,HTML_MESSAGE,MULTIPART_ALTERNATIVE,ONLY1HOPDIRECT,ONLY1HOPDIRECTARIN,QENCPTR1,RDNS_NONE,USER_IN_DKIM_WHITELIST,USER_IN_SPF_WHITELIST scantime=0.4,size=1742,user=qscand,uid=601,required_score=10.0,rhost=mailhost,raddr=127.0.0.1,rport=55784,mid=
Feb 22 18:10:28 mailhost qmail: 1393060228.529877 new msg 560115
Feb 22 18:10:28 mailhost qmail: 1393060228.530135 info msg 560115: bytes 2109 from
DKIM_SIGNED,DKIM_VALIDで電子署名の確認が取れ、ホワイトリストもDKIM、SPFともに効いているようです。
記事はここまで。