弊社は制服屋さんを運営しております。
メールでお問い合わせをいただくことも多く、また、こちらからご注文に関しましてメールでお聞きすることもあります。ですが、こちらからお送りしたメールが届かないというお客さまがいらっしゃいます。
実際には、迷惑メールに分類されている場合がほとんどです。携帯電話ですと、キャリア側がはじいていて端末に届いていない場合もあります。
さて、これを防ぐ方法はあるのでしょうか。
いろいろ試した結果、「DNSサーバ(BIND)のZONEファイルにSPFレコードを追加する」方法である程度回避できることがわかりました。とても簡単な方法でした。
SPFレコードの文法や詳しい使い方は、もっと詳しく説明しているサイトや専門書を参考にしていただきたいです。とりあえずうちで成功した方法を書いてみますね。単なる事例なので、すべての環境に当てはまるわけではありませんのであしからず。
試したのは、上記の通り、/var/named下にあるゾーンファイルにSPFレコードを書き加えただけ。PostfixにもDovecotにも、何の設定もしてないです。弊社からお客さまに送信する際の問題を解決したいだけなので。
で、そのSPFレコードの記述はこれだけ。
@ IN TXT “v=spf1 +mx ~all”
ん? 他のサイトの説明と違う??
・・・ですよね。他のサイトではもっと詳しく説明してますから。こんな簡単にうまくいくもんですか・・・。
実際、極めて限定された環境でのみ適用できるお話しであることを前提としてください。
さてその環境とは。
メールを受信しているサーバ(MSA)と同じPostfixでのみ、メールを送信(MTA)する場合
要は、そのドメインのMXレコードに記述しているメールサーバで、受信だけではなく、送信も行う場合は、これでOK、ということなんです。
ただ、メールサーバはiptablesでガチガチに固めてしまっていて、外部から接続するのは特定のサーバだけ(Webフォーム送信のため、HTTPサーバからの接続を受け付ける)にしていました。以前、送信サーバをスパムの土台にされてしまった悪夢があるからです。
なので、会社の事務所のネット回線のISPを固定IPアドレスにして、そのIPアドレスからのサブミッションポートの通信を許可するようiptablesを設定。その上で、MXレコードに記述されているメールサーバでSMTP送信が行えるようにし、その場合のみ、SPFの認証が通るようにした、というわけなんです。
もし、プロバイダのSMTPサーバを使いたい場合は、次のようにするといいでしょう。
@ IN TXT “v=spf1 +ip4:100.AAA.0.1 +ip4:100.BBB.0.1 +mx ~all”
+は許可という意味なので、IPv4アドレスで100.AAA.0.1、100.BBB.0.1を許可するという意味になります。100.AAA.0.1や100.BBB.0.1には、ISPのSMTPサーバのIPアドレスを入れます。たくさんのIPアドレスを羅列することも出来ますので、プロバイダのSMTPサーバのアドレスをdigって、AレコードのIPアドレスを列挙しておくとよいです。
エラーメールを送信するときのために、+mxも指定してあります。試してはいませんが、固定IPにしなくても、これでうまくいくと思います。ただし、ISPを変えたら、指定も変える必要があります。
うまくいくと、メールのヘッダに、次のように記述されます。
Authentication-Results: mx.google.com;
spf=pass (google.com: domain of メールアドレス designates メールサーバ as permitted sender) smtp.mailfrom=メールアドレス
Gmailで試しました。メールアドレスには、送信した弊社のメールアドレス、メールサーバには、MTAのIPアドレスが入っていました。成功です。
CentOS7.1で試しました。