メールサーバの設定としてSPFをDNSに設定します。
メールの仕組みそのものは送信元を偽装できてしまうので、SPAMメールが簡単に送信できてしまいます。メールを送信する側にてSPAM判定されないようにメールの送信元を認証する意味でSPFを設定します。
SPFとは
SPF(Sender Policy Framework)はメールの『送信メールサーバのIPアドレス』と『エンベロープFromのドメイン』とを比較して正規のメールかどうかを判定する仕組みです。ここで比較するのは『エンベロープFrom』であって、『メール本文のFrom』ではありません。
エンベロープFromにはメールサーバのドメイン名が記載されていますので、このドメイン名をDNSで解決して得られたSPFレコードのルールに沿っているかを検査します。
DNSの設定
設定内容は比較的簡単で、TXTレコードを追加するだけです。
example.com. TXT "v=spf1 a:example.com a:mail.example.com -all"
注意点としてはSPFは1つしか記述できません。複数のレコードを記述してしまうとエラー扱いになり、SPFとして意味をなさなくなってしまいます。それに、エラーがあったとしても何処にもエラーが出力されませんから気付く事がありません。記述するときは注意が必要です。
SPFの記載方法
SPFはドメイン1つにつき1つしか記載できません。SPFが複雑になってくると複数に分けたくなるのが人情という物ですが、今の所できないのです。
SPFはTXTレコードとして記載されているのでほぼフリーフォーマットです。それぞれのキーワードは『スペース』で区切って指定します(『,(カンマ)』ではありません。
v=spf1
SPFの先頭に記載するお約束です。
a:
メールサーバのIPアドレスをドメインで指定します。仕組み上、このドメインを再度解決することになるため、若干の負荷が上がると思いますが、まぁ問題無い範囲でしょう。
ip4:
メールサーバのIPアドレスを指定します。『ipv4』ではなく『ip4』であることに注意。
IPアドレスのレンジを指定するときは『/』で区切ります。
"v=spf1 ip4:192.168.100.1 ip4:192.168.120.2 ip4:10.20.30.0/24 -all"
include:
他のSPFを取り込みます。SPFは1つしか記載できないため、大量のメールサーバがあると記載しきれません。そのためincludeで他のドメインのSPFを取り込むように記載方法になってしまいます。
example.com. TXT "v=spf1 include:spf1.example.com include:spf2.example.com -all"
spf1.example.com. TXT "v=spf1 ip4:192.168.100.0/24 -all"
spf2.example.com. TXT "v=spf1 ip4:10.10.10.0/24 -all"
-all / ~all
SPFの最後に書くキーワードです。『ハイフン』か『チルダ』の違いがあります。
『-all』と書くと、指定したIPアドレス以外からのメールは不正であって許可されないません。『~all』と書くと、指定したIPアドレス以外からは不正かもしれない怪しい扱いとなります。
どの程度役立つの?
メールは便利でインターネットでは欠かせない仕組みですが、その一方でSPAMメールは困り物です。SPAMメールが役に立ったという話は聞いた事がありません。いかにしてSPAMメールを避けるのかは悩ましい問題ですが、今から一からメールシステムを再設計して入れ替える事は現実的ではありません。既存のメール配信の仕組みへの影響を最小限にしつつ、効果的なSPAMメール避けが必要とされてきたわけです。
インターネットでのメールの配信は様々な構成が取り入れられていて、このSPFで全てのパターンに対応できるわけではありません。それでも、SPAMメール送信者はそもそも自身の存在を明らかにせずにメール受信者のフィルターを潜り抜けようと偽装するパターンが大半ですので、メールを送信する側で正規のメールであることを簡単に提示できるSPFは一定の役に立つと考えます。
コメント