EC2から送信したメールがspam扱いされてたのを回避するまでの記録

EC2でサイトの運営を開始したのですが、そのIPがブラック(ブロック)リストに載っててメールが届かない人がいたので、それを回避するまでのメモを残します。
ウワサには聞いていたのですが、あまりに気していなかったのはテストとかで自分とか携帯とかに普通に送れてたのでリストに載ってなかったり、こういうスパムリストってあんまり使ってないのかなと軽く考えていたからでした。
で、何で発覚したかというとフツウにメールのログに見慣れない文字列が出てきたからです

Sep 1 15:03:43 xxxxxxxx postfix/smtp[7722]: 5DA663A64F: to=, relay=mail.xxxxxx.jp[xxx.xxx.xxx.xxx]:25, delay=4.4, delays=0.05/0/4.1/0.17, dsn=4.0.0, status=deferred (host mail.xxxxxx.jp[xxx.xxx.xxx.xxx] said: 451 http://www.spamhaus.org/query/bl?ip=xxx.xxx.xxx.xxx (in reply to RCPT TO command))

spamhausだと!?
ま、とりあえずサービス開始直後にコレなわけでw
ちょっと洒落にならず急いで以下の対処方法を考えてみた
・IPをリリースして再取得してリストから離れるのを待つ
 →EC2のシンガポールのIPすべてリストに載ってるらしいから却下w
  しかもDNSの浸透の関係で即効果がでないため現実的ではない。。。
・何にせよ削除申請
 →spamhausのAWSのレンジは削除申請できない?
  どうやら自動で削除されるらしいから何にせよすぐには反映されない
  いずれにせよDNSの逆引きとかの対処が必要
・他のサーバーへのRelay
 →幸いこのドメインはGoogle Appsでメールを運用しているのでとりまgmailを使ってメール送ることにする

DNSの逆引き設定

どうやらspamhausは動的IPアドレスということでリストに載せているらしい。確かにEC2でインスタンス立ち上げてメール大量送信してインスタンス落とせば簡単にspamを送信できるし、足もつきづらいよね。
だからと言ってEC2のレンジ全部入れるなよとw
で、DNSの逆引きレコードが登録されていたら動的IPじゃないと認めてくれるっぽいのでDNS逆引きレコードを登録する必要があるわけです。
正直この判定って気休めでしかないし共用サーバーとかでは不可能だわなw
そのへんがブロックリストに載ったらどうするんだろうね?w
とりあえず以下のページからAWSに申請する
https://aws-portal.amazon.com/gp/aws/html-forms-controller/contactus/ec2-email-limit-rdns-request
これ申請する直前にメール送信数制限解除の申請してたから(もちろんまだ制限解除されていない状態)連続でやるのは気まずい気がしたが、仕方なく送信。
簡単に説明を英語で書かないといけないけど、まぁ適当な英語でおk
んでこれ反映されるまで時間かかるのでその間にSPFの登録をする

SPFの設定(value-domainの場合)

メール送信者がドメインを偽装してないよって証明するのがSPF証明ってやつなのですが、仕組みを簡単に説明するとドメインに対してこのIPアドレスとかホストとかからメールを送信しますよってのをDNSに登録することです。
ようするに
・DNSの設定である → ドメインの所有者である
・DNSにこのIPからしかメール送りませんよと宣言
・登録されていないIPからメールが送信された → ドメインの所有者ではない
→偽装メールだよ
って仕組みです。
細かい仕様とか設定方法とかは他の賢い人に任せるとして、以下の前提の場合設定はこんな感じ
・IPアドレスがxxx.xxx.xxx.xxx
・google appsでメール使ってる

txtレコードとして以下を登録
v=spf1 ip4:xxx.xxx.xxx.xxx include:_spf.google.com ~all

試しにメールを送ってヘッダ情報を確認するとReceived-Spfってのがあると思います。

Gmailを使ってメール送信

DNSの逆引きやらSPFを登録したところで、今まさに送信できない状況をすぐに解決はできないので緊急手段としてGmailを使ってメールを送信することにした。
サーバーはDebian、メールはPostfixでとりあえず動いてる状態とする
・gmailのsmtpは認証が必要なのでSASL入れる
#apt-get install sasl2-bin
#apt-get install libsasl2-modules

・/etc/postfix/main.cf にrelayhostの設定する


relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_use_tls = yes
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

・認証用のパスワードファイル作る
#echo [smtp.gmail.com]:587 xxxxxxxx@xxxxxx.com:password > /etc/postfix/sasl/passwd
#postmap /etc/postfix/sasl/passwd

パスワードが平文で入ってるので気持ち悪いから見えないように
#chown root:root /etc/postfix/sasl/passwd
#chmod 600 /etc/postfix/sasl/passwd

・Postfixを再起動する
#/etc/init.d/postfix restart
これでgmailで送信できるようになったよと
もしエラーとか拒否のときだけgmail使うようにしたかったら、


relayhost =
fallback_relay = [smtp.google.com]:587

で行けると思われます

まとめ

結局当日には逆引きもリスト解除も間に合わなかったのでgmailでメール送信する形になっちゃいました。
翌日には逆引きも反映され、spamhausのリストからも外れていました。(ホントに自動だぜw)
ついでにmapsにも登録されていたっぽいので、逆引きも反映されたので削除申請しておきました。
なんつーか気持ちは分からないでもないけど、こういうスパムリスト的なものはあまり使ってほしくないなと思いましたw
大手だとhotmailはそうだし、独自ドメインとか自前サーバーとか使ってる人の中でもspamhausを使ってる人がいて困りましたね。
もし複数ドメイン運用しているサーバーとかだったら、全部のドメインでGoogle Apps使ったり送信者登録するのも現実的ではないしまた別の方法を考えないといけないかもですねぇ。
まぁちょっと不謹慎ですが、今回は色々勉強できて面白かったですw

ホーメル スパム 20%レスソルト 340g
ホーメル 売り上げランキング: 1136
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)
Filed under: AWS — maesan 1:42 PM