はじめに
ある仕事で他人が面倒見ていたサーバの保守運用的な仕事を引き受けた。そこにはバーチャルドメインで多数のサービスが稼動していて、自分が今まで扱ったサーバでは込み入った方だと思う。サービスの数が多いだけで、難易度は高くない。
ただ、恐らく前任者の考えはコスト削減に走りすぎていて、セキュリティやバックアップ等に不安のある状態だった。修正できるものは修正して、提案できるものは提案するのが今後のタスクになるはず。とは言えコスト超過は困るので相談しつつ進めねばならない。
そんな中、以前インドへ外注して作らせたと言う、あるWEBサービスのメール機能について依頼されて弄ったので記しておく。
状況
- Postfix利用。
- WEBのシステムに情報を入力すると応答の為ユーザへメールが飛ぶ良くある形。
- 応答のメールはFROMが別の任意のドメインのユーザ名で記述される。
- 送信したメールが迷惑メール扱いされることが多い。以前別のサーバ環境では完全にスパム登録されたこともある、(悪い)実績のあるシステム。
- メールの文字が化けることがソコソコな頻度である。
- /etc/postfix/virtual_domain_mapになにやら手を加えて動かしている。
状況が良くわからないだろうが、ザックリ書けば、メールちゃんとした形式で届かないってことだ。
経過
あまりに長くなる前段があるのだが、割愛。mb_send_mailで文字化けしないメールが送信できるようになったとしよう。それまでは自前でプロトコルから実装していたようだが、利用するのをやめた。
本来はサービスが提供されているドメインからメールの返信をしてやりたいのだが、今の自分の知識では少し難しいようだと分かった。と言うのも、当該サーバにはPostfixのデーモンは一つで、smtpサーバの設定で$myhostnameは固定で一つ持つことになるだろうからだ。細かいことは後で調べるとして、まず迷惑メール扱いされてしまう原因を調べてみた。
またこのブログのお世話になる。本当にいつもお世話になっている。作者に多謝。
http://d.hatena.ne.jp/rx7/20100319/p1
EC2向けに書かれているが、厳しい環境でモノにしている方が頼れる気もする。
参考になりそうなのは下記の内容だろうか。
- DNSの逆引き
- SPF
DNSの逆引きができるようにしてやると良いそうなので、nslookupでチェックする。
$ nslookup xxx.com Server: xxx.xxx.xxx.xxx Address: xxx.xxx.xxx.xxx#53 Non-authoritative answer: Name: xxx.com Address: xxx.yyy.zzz.xxx
xxx.comのIPアドレスはxxx.yyy.zzz.xxx。今度は逆にxxx.yyy.zzz.xxxを引いてみる。
$ nslookup xxx.yyy.zzz.xxx Server: xxx.xxx.xxx.xxx Address: xxx.xxx.xxx.xxx#53 Non-authoritative answer: xxx.xxx.xxx.xxx.xxx name = xxx.com. Authoritative answers can be found from: …以下略
ちゃんとxxx.comが返ってきた。
SPFに関してはFROMのアドレスが別の任意のアドレスになる為に仕掛けることができない。とすると今できるのはここまでか。
試しにGmailやHotmailに送っても、迷惑メールフィルタにはかからない。調子に乗ってYahooでも試みたところ、迷惑メール扱いされてしまった。まだ何か足らないのかもしれない。
http://www.gabacho-net.jp/whims/whim0156.html
を見ると、どうやら自分は逆引きの意味を勘違いしていたようだ。HELOやEHLOの応答からIPを逆引きしたものが一致するのかを見なければならないらしい。smtpサーバが名乗っている名前と、DNSから引いた名前が一致するのかを調査するのだから、当たり前と言えば当たり前なことだった。
nslookupにはmxレコードについて確認するオプションがあるので、これをやってみることにした。
http://www.atmarkit.co.jp/fwin2k/win2ktips/370nslookupmx/nslookupmx.html
「-type=mx」を付けるらしい。
$ nslookup -type=mx xxx.com Server: xxx.xxx.xxx.xxx Address: xxx.xxx.xxx.xxx#53 Non-authoritative answer: xxx.com mail exchanger = 10 mx.xxx.com. Authoritative answers can be found from:
なにやらおかしい。mx.xxx.comという名前は見たことが無い。Postfixの設定では$myhostname=smtp.xxx.comと書いていたはずだ。どういうことだろう。単純にサーバの移転の際に変更忘れたのか、そもそもそのままだったのか…。とにかく$myhostname=mx.xxx.comと修正してPostfixをリロード。
telnetで接続した時の応答も、mx.xxx.comになったようであるし、全てが統一された模様。
$ telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mx.xxx.com ESMTP Postfix
改めてYahooメールに送信してみたところ、見事受信できた。
おしまいに
複数のメール送信元をうまく切り替える方法があれば、是非知りたい。一つのデーモンで複数の$myhostnameを指定できたり送信時に入れたりできないものだろうか。



