【AWS】EC2(CentOS6)からメールを送信できるようにするためにやったこと
こんにちわ
がじぇったー (@hackmylife7) | Twitter
です。
AWS環境上でEC2に入れたPostfixからEmailを送信する手順についてまとめます。 AWS環境のメール送信って一体何が正解なんですかね。 SESも東京リージョンにないし、迷惑メールフィルタに引っかかりやすいし。。
手順
ECからメールを送信するためには以下スライドの28Pの作業が必要 https://www.slideshare.net/AmazonWebServicesJapan/aws-30934799
EC2にPostfixの送信設定を行う
vi main.cf
他のEC2インスタンスが送信元の場合、mynetworksはVPCのCidrを指定しましょう
queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix mail_owner = postfix inet_interfaces = localhost inet_protocols = all mydestination = $myhostname, localhost.$mydomain, localhost unknown_local_recipient_reject_code = 550 alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases debug_peer_level = 2 debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5 sendmail_path = /usr/sbin/sendmail.postfix newaliases_path = /usr/bin/newaliases.postfix mailq_path = /usr/bin/mailq.postfix setgid_group = postdrop html_directory = no manpage_directory = /usr/share/man sample_directory = /usr/share/doc/postfix-2.6.6/samples readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES # add mynetworks = 127.0.0.0/8 inet_interfaces = all inet_protocols = all inet_protocols = ipv4 myhostname = ip-10-40-20-44 mydomain = stg.hogehoge.com myorigin = $mydomain virtual_alias_maps = hash:/etc/postfix/virtual
送信メールアカウントの発行
- アプリケーションからメールを送信するためにPostfix用のUserを作成します
- "sendmailuser"とします
# useradd sendmailuser # passwd sendmailuser Changing password for user contact.
メールアカウントの設定
- postmapコマンドでPostfixが参照するDBを作成していきます
# vi /etc/postfix/virtual # tail -n 1 /etc/postfix/virtual sendmailuser@stg.hogehoge.com sendmailuser # postmap hash:/etc/postfix/virtual # /etc/init.d/postfix restart Shutting down postfix: [ OK ] Starting postfix: [ OK ] #
サービス登録
# chkconfig --add postfix # chkconfig postfix on # chkconfig --list postfix postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
他サーバから疎通確認
- メールの送信元が他のアカウントの場合はtelnetコマンドで確認しましょう
- 220が出ればOKです
# telnet 10.40.20.44 25 Trying 10.40.20.44... Connected to 10.40.20.44. Escape character is '^]'. 220
DKIMの設定
DKIMの設定とSMTPSの設定は飛ばしても大丈夫ですが、自分が参考にした質の高い記事を貼っておきます。 DKIMは送信側で電子メールに電子署名を付加し、受信側でその電子署名を照合するという方法で送信者のドメインの認証を行うものです。スパム判定されにくくなるのでこれはやった方が良いです。
https://www.rem-system.com/dkim-postfix04/
DKIMを設定した場合Route53にDKIM用のレコードを二つ登録することになると思いますが、その際のレコードの意味は下記の記事が参考になります。
DKIM (Domainkeys Identified Mail) : 迷惑メール対策委員会
SMTPSの設定
https://www.rem-system.com/mail-postfix03/ 証明書にLet's encryptを使う場合は証明書の自動更新の設定もやっておいた方が良いでしょう。 Let's Encryptを使ってSSL証明書を自動更新する(AWS/Amazon Linux/Apache) - Qiita
他サーバからSMTPSで接続できるか確認するコマンドはopenssl s_clientコマンドでやると良いです。
openssl s_client で SMTP STARTTLS と SMTP AUTH を動作確認する | 技術メモの壁
Route53にTXT/SPFレコードの登録
- スパムメールと判別されないためにRoute53にTXTレコードとSPFレコードを登録する必要があります。
- 対象ドメインのホストゾーンを選択し、「レコードセットの作成」ボタンを押し、以下の通り入力します。
- 名前: 空欄
- タイプ: TXT
- エイリアス: いいえ
- TTL:任意の値(移行時は300程度で良い)
- 値: 下記の通り
"v=spf1 +ip4:EIPのアドレス ~all"
同様の内容をTXTをSPFに変えて登録しましょう。(SPFかTXTレコードのどちらかが定義されていれば動作しますが、RFCの推奨設定としては両方のレコードを登録することが推奨されています)
DMARCの設定
送信ドメイン認証を設定します。 * 対象ドメインのホストゾーンを選択し、「レコードセットの作成」ボタンを押し、以下の通り入力します。 * 名前: 空欄 * タイプ: TXT * エイリアス: いいえ * TTL:任意の値(移行時は300程度で良い) * 値: 下記の通り
"v=DMARC1;p=none;rua=mailto:dmarc@stg.hogehoge.com;ruf=mailto:dmarc@stg.hogehoge.com;rf=afrf;pct=100"
How to Add DMARC Record to AWS's DNS-Route 53 - EasyDMARC
マネコンのサポートからメール送信制限解除申請
- EC2から25番ポートを使用してメールを送信する場合、スパムメールを送信しないように最初は制限がかかっています。
- そのため、AWSに下記のURLからメール送信の制限解除の連絡をだす必要があります。
- https://aws-portal.amazon.com/gp/aws/html-forms-controller/contactus/ec2-email-limit-rdns-request
- 実際の記入は下記のURLがわかりやすいので参考にしました
- EC2からのメール送信には、解除申請とDNSの逆引きの登録申請が必要です。 | 田舎に住みたいエンジニアの日記
- 記入欄にはEIPだけでなく、EIPに紐づくドメインも入力する必要があります。(スパム対策フィルタで弾かれないようにするため)
制限解除時に記載するメッセージですが、余計なやりとりをなくすために * メール送信の目的 * スパムと判定されないためにとる対策 を書きましょう。 例
The Use-case for sending mail from EC2, for example, to send a membership or purchase confirmation email to a user I'm going to use SPF records and DKIM to make sure it doesn't get judged as spam.
ドメイン移行時などは逆引き設定はできず、送信制限解除申請しか出せないと思います。その場合は先に送信制限解除申請のみ申請し、ドメイン移行が完了したら逆引き申請もだしましょう。
メール送信テスト
- 以下のコマンドでメールを送信してみましょう。おそらく迷惑メールに 振り分けられると思います。
sendmail hoge@gmail.com
続けて以下を入力(最後のピリオドを打つと送信されます)
From:stg.hogehoge.com To:hoge@gmail.com Subject:test This is test. .