してみるテストロゴ
Apache 2.4系でHTTP/2サーバを構築してみるテスト。

Sender Policy Framework(SPF)で嵌まった話。

OpenSSLのメーリングリストを受信していたのですが、今回、2017年11月2日に公開された、OpenSSLの脆弱性情報について、アナウンスのメールが私のメールアドレスに届きませんでした。

他のメールなら受信しなくても慌てることは無いのですが、今回は、セキュリティ関連の貴重な情報源であるOpenSSLのメーリングリストのメールが届かなかったため、ちゃんと調べることにしました。

タイトルから、ネタバレしていますが、SPFの設定を厳しくしたことが原因でした。

Sender Policy Framework(SPF)とは?

今回のお話の対象は、電子メールのアドレス(ドメイン名)から、送信元IPを認証するSPFです。

仕組みとしては、受信した電子メールのドメイン名を所有している組織のIPアドレスから、送信された電子メールか否かを判断します。

メールアドレスのドメインを所有している組織のIPアドレスから送信されているメールだけを受信すれば、スパムメールとおさらばできるという目論見です。

 

具体的には、メールサーバが、メールを受信する際に、メールアドレスのドメイン名から、DNSのTXTレコードを調査します。

TXTレコードの先頭に「v=spf1」と、あればSPFレコードです。SPFレコードに記載のあるIPアドレスから、送信されていれば、スパムメールではないと判断します。

SPFを使って、スパムっぽいメールをメールサーバで受信拒否することもできますし、それだと受信漏れがあって怖いという人は、とりあえずメールサーバで受信だけして、受信したメールのヘッダにSPFの認証結果だけを付加し、メールクライアントソフト側で迷惑メールの判断を行うこともできます。 この動作は設定ファイルから制御します。

怖い物知らずだった私は、メールサーバでSPF設定の無いドメインまで受信拒否していたのでした・・・

OpenSSLのアナウンスメーリングリストが受信できない!

今回、私が気がついたのは、OpenSSLのアナウンスメーリングリストです。

このメーリングストからのメールが届かなくなっていました。

前回、このメーリングリストから受信したのは2017年8月10日なので、ここ3ヶ月ほどの間に行った作業を思い起こすと、Sender Policy Framework(SPF)のポリシーを厳しめにしたことを思い出しました。

私の使っているMTAは、qmailに、SPFのパッチ(http://www.saout.de/misc/spf/)を充てています。

この環境では、Sender Policy Framework(SPF)の動作は、/var/qmail/control/spfbehaviorのテキストファイルに、数値を入れることで制御します。

0がSPFを使用しない設定、6が最も厳しく、SPFレコードに記載のIPアドレスが送信したメールだけを受信し、さらに、SPFレコードが存在しないメールは受信を拒否する設定です。

 

そういえば私は、2ヶ月ほど前に、SPFの設定を、それまでの緩い設定から、spfbehaviorを6、すなわち一番厳しい設定にしていました。

調べてみると、OpenSSLドメイン(openssl.org)にはSPFレコードが見当たりません。

 

SPFレコードは、DNSのTXTレコードとして公開される情報なので、調べ方は以下の通りです。

 # nslookup
> set q=TXT
> openssl.org
Non-authoritative answer:
 *** Can't find openssl.org: No answer

赤い部分にあるとおり、TXTレコード自体が無いようです。

つまり、openssl.orgにはSPF設定の無いため、私のMTAは、openssl.orgドメインのメールを拒否していました…

SPFの例外設定

手っ取り早く解決するには、/var/qmail/control/spfbehaviorの設定を3辺りまで下げればopenssl.orgからのメールを受信できるのですが、それはそれでせっかく防いだスパムが、また来るようになってしまいます。

そこで、今回は、spfbehaviorの設定は6のままで、SPFレコードが存在していない場合に利用する例外設定をいれて、openssl.orgからのメールを受信できるようにします。

 

qmailのSPFのパッチ(http://www.saout.de/misc/spf/)には、ドメイン名にSPFレコードが存在していない場合に、適用されるSPFレコードを設定することができます。

この機能を使えば、SPFレコードが設定されていないドメインのメールを受信することができます。

今回はopenssl.orgからのメールを受信したいので、まず、メールサーバのホストを調べます。

 # nslookup
> set q=MX
> openssl.org

Non-authoritative answer:
openssl.org     mail exchanger = 50 mta.openssl.org.

Authoritative answers can be found from:
mta.openssl.org internet address = 194.97.150.230
mta.openssl.org has AAAA address 2001:608:c00:180::1:e6 

MXレコードは宛先、つまりメールを受信するホストを調べるときに使うのですが、たいていの場合、メールの送信も同じIPから行われます。

openssl.orgのメールは、 「mta.openssl.org」から送信されると想定して設定します。実際このアドレスから送信されるようです。

 

続いてこのアドレスを/var/qmail/control/spfrulesのファイルに設定します。

このファイルの書式は、SPFレコードの書式そのものです。詳しくはコチラをご覧ください。

簡単に説明すると、先頭に「v=spf1 」と記述します。その後ろに、FQDNやIPアドレスを入れます。

FQDNを使って設定する場合、FQDNの前に「a:」を付けます。 「mta.openssl.org」を追加する例だと、以下のようになります。

# vi /var/qmail/control/spfrules
/var/qmail/control/spfrules
v=spf1 a:mta.openssl.org -all

ちなみに、IPアドレスを設定する場合は、「ip4:」を付けます。

/var/qmail/control/spfrules
v=spf1 ip4:194.97.150.230/32 -all

となります。「ip4:~」や「a:~」の記載はスペース区切りを入れて複数のアドレス(FQDN/IP)を続けることができます。

最後に-allを入れるのを忘れないでください。

Apacheのメーリングリストは大丈夫?

ところで、 Apacheはどうかというと、以下の通りSPFレコードが存在しています。

 # nslookup
> set q=TXT
> apache.org
Non-authoritative answer:
apache.org      text = "google-site-verification=y9Wki74vQ-HO4aXrJ-TzmPvLf8itBqrQTPjyAHktuMo"
apache.org      text =  "v=spf1 include:spf.mandrillapp.com +a +mx ip4:140.211.11.3 ip4:140.211.11.15 ip4:209.188.14.139 ip4:209.188.14.144 ip4:209.188.14.142 ~all"

Authoritative answers can be found from:

青い部分にあるとおり、SPFレコードが存在しています。

ということで、apache.orgからのアナウンスメールはSPF設定を厳しくしても、そのまま受信できます!

NEXT >> トップページに戻る

©Copyrights 2015-2018, non-standard programmer

このサイトは、あくまでも私の個人的体験を、綴ったものです。 軽く参考程度にご利用ください。