AWS での メールサーバ設定
注意: 初学者が実験的に動かした際の覚え書きなので、セキュリティなど実用性のあるものでは無い。
要望
EC2からメールを送りたい。(受信は別に必須ではない)
手段
- GoogleのSMTPサーバを利用
- Amazon SNS (Simple Notification Service)を利用
- Amazon SES (Simple Email Service)を利用
- EC2上に自前サーバを構築
メールはスパムが半数以上という統計もあり、如何に自身が怪しいものでは無いか、また来たメールが怪しいものでは無いか、証明が厳しくなっている。 また、セキュリティ上の穴を突かれて踏み台に利用されないようにも警戒しないといけない。 メールサーバの構築で難しい部分の一つに、この認証関係の煩雑さが挙げられる。
Googleでアカウントを取れば、GoogleのSMTPサーバにリクエストを送信することで、アカウントのGmailアドレスからメール送信できる (Gmail SMTPサーバー)。 無料では送信元は ○○@gmail.com 限定となるが、ビジネス向けの G Suite SMTPリレーを利用すると送信アドレスも変更できる。(ただ、そのためだけに契約するのはコスパ悪い)
Amazon SNSは、あらかじめ決まった特定少数宛てのアラート通知などに便利なサービス。 専用のツールをEC2にインストールしておくと、APIを叩けば登録した宛先にメール(だけじゃなくていろいろな方法で)通知してくれる。
Amazon SESは、SMTPリレーサービス。 つまり、お知らせメールなどを一斉送信する際、我流で行うと認証失敗・送信数上限・処理サーバの性能限界など様々な理由で上手くいかないものを、代行してくれる。 Gmailと比較すると若干初期設定項目は増えるが、登録した任意のアドレスから、不特定多数にメール送信を行える。 料金は一応かかるものの、常識的な使用量であれば月に数十円の微々たるもの。 ただし、日本のモバイル各社に対する配信確度はあまり高くないらしい?
こういうサービスを使うと、認証関係や、相手への到達率を上げるテクニックについてはGoogleやAmazonが請け負ってくれるので、設定が非常に楽。
コスト的にこれらのサービスを使えなかったり、自分で設定したいという場合は、自前でメールサーバをEC2内に構築する必要がある。
ただ、いずれにしろ、SMTPを送信したり、SESでは送信メルアドの初回認証時にそのアドレスで受信の必要があったりと、GoogleやAmazonのサービスを利用する場合でも基礎的なサーバは立ち上げておく必要がある。 あくまで、細かな設定だったり、相手サーバに弾かれないための信頼やノウハウだったり、そういったのが楽になるサービス。
関係するソフト・ツール
MTA(Mail Transport Agent)
- 主にPOPとSMTPを処理できるソフト
- POPは受信、SMTPは送信用のプロトコル
- Linuxではsendmailが古くからのメール送信ソフトだったが、セキュリティ上の問題がちらほら
- 最近では以下のソフトが、sendmailからの以降がしやすく高機能で人気
- SMTP: Postfix
- POP: Dovecot
具体的な設定
Amazon
セキュリティグループ
メールを受信したり、外部からのSMTPリクエストを受け付ける場合は、セキュリティグループで対応するポートを空けておく。
- SMTP(25)
- POP(110)
- IMAP(143)
25番ポートからの送信は迷惑メールの割合が高いらしく、ブロックしているプロバイダがある(25番ポートブロック)。 そのため、587がサブミッションポートとして第二標準として使われている。ここでは脇道となるため取り上げない。
送信については、インスタンス作成時のデフォルト、全ての通信に制限かけてない状態のままならば、特に設定の必要は無い。
制限解除申請
25番ポートを使用して送信する場合、スパムに使われる危険を防ぐため、最初は制限がかかっている。解除にはフォームから申請する必要がある。
ドメイン
独自ドメインを利用する場合、「このドメインから送信された(と主張している)メールは、このIPアドレスならば正しいですよ」ということを保証してもらう必要があるらしい。 これをSPFレコードという。 保証がないと迷惑メールに分類したり弾いたりするプロバイダもある。
EC2のIPアドレスをElastic化し、独自ドメインのゾーン設定で、以下のようなレコードを作成する。
- Type: TXT
- Value: “v=spf1 ip4:XXX.XXX.XXX.XXX -all”
- XXX.XXX.XXX.XXXはEC2のIPアドレス。引用符まで含める
Postfix
EC2(Amazon Linux)では、普通に最初から入っていたと思う(記憶が定かでは無い)
入っていなかった場合、また既定のMTAとなっていなかった場合は以下参照。CentOSだが、Amazon Linuxと大体同じ。
設定ファイルは、/etc/postfix/main.cf
にある。
myhostname = sub.mydomain.com mydomain = mydomain.com myorigin = $myhostname # 送信元のドメイン(アドレスの@以降) inet_interfaces = all inet_protocols = all mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain mynetworks_style = host # 他のSMTPクライアントからの中継はしない relay_domains = relayhost = # リレーサービス等を利用せず直接送信する場合、空白
ここで、myoriginと、spfレコードのゾーンは合わせる。
この設定では、こちらからの送信ではmyhostnameである sub.mydomain.com
が使われる。
また、来たメールが自分宛であると認識するのは、mydestinationにある通り、sub.mydomain.com, localhost.mydomain.com, localhost, mydomain.com
となる。
更新したら、Postfixを再起動。
$ sudo service postfix restart