michimani.net

EC2にメールサーバを立ててお名前.comで取得したドメインでメールを受信できるようにするまで

2018-02-07

お名前.comで取得したドメインでメールを送受信(主に受信)したいと思ってEC2にpostfixをインストールしたのでその時のメモです。 これから出てくる example.com を、設定するドメインに置き換えて読んで下さい。

環境

設定に際して、次の値が必要になるので、先にAWSのマネジメントコンソールで調べておきます。

事前準備 お名前.com ドメインNavi

まずDNSの設定をします。
お名前.comのドメインNaviから、以下のDNSレコードを設定します。

ホスト名 TYPE VALUE 優先
example.com A EC2のIPアドレス
mail.example.com A EC2のIPアドレス
example.com MX mail.example.com 10

TTLは初期値(3600)のままでいいです。

DNSの反映には時間がかかるので、一番最初にやっておきます。

事前準備 AWSマネジメントコンソール

続いて、AWSのマネジメントコンソールから、EC2のセキュリティグループの設定を変更します。
対象のEC2に設定されているセキュリティグループのインバウンドルールに、下記を追加します。

タイプ ポート範囲 ソース
IMAP 143 ::0/, 0.0.0.0/0
SMTP 25 ::0/, 0.0.0.0/0
POP3 110 ::0/, 0.0.0.0/0

postfixのインストールと設定ファイルの変更

ここからはSSHでEC2インスタンスにログインして操作します。

postfixをインストールします。

$ sudo yum install -y postfix

このあと以下の3つの設定ファイルを書き換えるので、念のためオリジナルをコピーしておきます。

$ sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.org
$ sudo cp /etc/postfix/master.cf /etc/postfix/master.cf.org
$ sudo cp /etc/postfix/smtpd.cf /etc/postfix/smtpd.cf.org 
$ diff /etc/postfix/main.cf.org /etc/postfix/main.cf
76c76
< #myhostname = virtual.domain.tld
---
> myhostname = mail.example.com
83c83
< #mydomain = domain.tld
---
> mydomain = example.com
99c99
< #myorigin = $mydomain
---
> myorigin = $mydomain
113c113
< #inet_interfaces = all
---
> inet_interfaces = all
116c116
< inet_interfaces = localhost
---
> #inet_interfaces = localhost
166c166
< #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
---
> mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
264c264
< #mynetworks = 168.100.189.0/28, 127.0.0.0/8
---
> mynetworks = 10.0.0.0/16, 127.0.0.0/8  ## 10.0.0.0/16 は事前にメモしておいたVPCのIPアドレス
419c419
< #home_mailbox = Maildir/
---
> home_mailbox = Maildir/
676a677,684
>
> ## add setting
> smtpd_sasl_auth_enable = yes
> smtpd_sasl_local_domain = $myhostname
> smtpd_recipient_restrictions =
>     permit_mynetworks
>     permit_sasl_authenticated
>     reject_unauth_destination
$ diff /etc/postfix/master.cf.org /etc/postfix/master.cf
12c12
< #submission inet n       -       n       -       -       smtpd
---
> submission inet n       -       n       -       -       smtpd
14,15c14,15
< #  -o smtpd_sasl_auth_enable=yes
< #  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
---
>   -o smtpd_sasl_auth_enable=yes
>   -o smtpd_client_restrictions=permit_sasl_authenticated,reject
$ diff /etc/sasl2/smtpd.conf.org /etc/sasl2/smtpd.conf
1c1
< pwcheck_method: saslauthd
---
> pwcheck_method: auxprop

sendmailの停止、postfixとsaslauthdの起動設定

デフォルトでは sendmail が起動しているので、停止します。また、自動起動の設定も解除します。

$ sudo service sendmail stop
Shutting down sendmail:                                     [  OK  ]
$ sudo chkconfig sendmail off

続いて、MTA(Mail Transfer Agent)を sendmail から postfix に変更します。

$ sudo alternatives --config mta

There are 2 programs which provide 'mta'.

  Selection    Command
-----------------------------------------------
 + 1           /usr/sbin/sendmail.sendmail
   2           /usr/sbin/sendmail.postfix

Enter to keep the current selection[+], or type selection number: ;2 を入力してEnterキーを押します

postfix を起動します。自動起動設定もします。

$ sudo chkconfig --add postfix
$ sudo chkconfig postfix on
$ sudo service postfix start
Starting postfix:                                          [  OK  ]

SALS認証のための saslauthd を起動します。自動起動設定もします。

$ sudo chkconfig saslauthd on
$ sudo service saslauthd start
Starting saslauthd:                                        [  OK  ]

ユーザの作成

ユーザとは、hogehoge@example.com というメールアドレスを作ったときの hogehoge にあたる部分です。

ユーザの作成、パスワード設定

$ sudo useradd hogehoge
$ sudo passwd hogehoge
Changing password for user hogehoge.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

作ったユーザになってメールディレクトリを作成します。

$ su - hogehoge
Password:
Last login: Thu Jan 24 23:04:06 JST 2018 on pts/0

$ mkdir Maildir

これで受信設定は完了です。

hogehoge@example.com 宛にメールを送ると作成した Maildir の下に new ディレクトリが作成され、そこに 1234567890.abcdefghABCD123456.ip-XX-XXX-XXX-XXX といったファイルが生成されます。

これがメールの内容になりますが、件名や本文はbase64エンコードされているので、読むにはbase64デコードする必要があります。


comments powered by Disqus