はじめに
今回は EC2 インスタンスを用いて、メールサーバ (受信 only) を構築します。
なお、送信については、EC2 ではアウトバウンド 25 番ポートが制限されているため、事前に制限解除が必要です。
セキュリティグループの設定
以下のポートを開いておきましょう。
タイプ | プロトコル | ポート | ソース |
---|---|---|---|
SMTP | TCP | 25 | 0.0.0.0/0, ::/0 |
POP3 | TCP | 110 | 0.0.0.0/0, ::/0 |
IMAP | TCP | 143 | 0.0.0.0/0, ::/0 |
ドメインの設定
user@example.com にメールを送るには以下のような DNS レコードの設定が必要になります。
Name | Type | Value |
---|---|---|
example.com | A | EC2 の IP アドレス |
mail.example.com | A | EC2 の IP アドレス |
example.com | MX | 10 mail.example.com |
postfix のインストール及び設定
まずは yum でちゃちゃっとインストール。
$ sudo yum install postfix
次に設定だが、/etc/postfix/main.cf /etc/postfix/master.cf /etc/sasl2/smtpd.conf をいじることになる。
$ 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/sasl2/smtpd.conf /etc/sasl2/smtpd.conf.org
$ diff /etc/postfix/main.cf /etc/postfix/main.cf.org
76c76
< myhostname = mail.example.com
---
> #myhostname = virtual.domain.tld
83c83
< mydomain = example.com
---
> #mydomain = domain.tld
99c99
< myorigin = $mydomain
---
> #myorigin = $mydomain
113c113
< inet_interfaces = all
---
> #inet_interfaces = all
116c116
< #inet_interfaces = localhost
---
> inet_interfaces = localhost
164c164
< mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
---
> mydestination = $myhostname, localhost.$mydomain, localhost
264c264
< mynetworks = 10.1.0.0/16, 127.0.0.0/8
---
> #mynetworks = 168.100.189.0/28, 127.0.0.0/8
419c419
< home_mailbox = Maildir/
---
> #home_mailbox = Maildir/
677,684d676
<
< ## 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 /etc/postfix/master.cf.org
12c12
< submission inet n - n - - smtpd
---
> #submission inet n - n - - smtpd
19,20c19,20
< -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 /etc/sasl2/smtpd.conf.org
1c1
< pwcheck_method: auxprop
---
> pwcheck_method: saslauthd
sendmail を停止して自動起動もやめる。
$ sudo service sendmail stop
Shutting down sm-client: [ OK ]
Shutting down sendmail: [ OK ]
$ sudo chkconfig sendmail off
MTA を 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
postfix 及び saslauthd の自動起動設定を行い、起動。
$ sudo chkconfig --add postfix
$ sudo chkconfig postfix on
$ sudo service postfix start
Starting postfix: [ OK ]
$ sudo chkconfig saslauthd on
$ sudo service saslauthd start
Starting saslauthd: [ OK ]
メール受信用ユーザを作成。
$ sudo useradd yuki -d /home/yuki -s /bin/bash
$ sudo passwd yuki
Changing password for user yuki.
New password:
BAD PASSWORD: The password fails the dictionary check - it is based on a (reversed) dictionary word
Retype new password:
passwd: all authentication tokens updated successfully.
$ cat /etc/passwd | grep yuki
yuki:x:505:506::/home/yuki:/bin/bash
作成したユーザで Maildir を作成する。
$ su - yuki
Password:
Last failed login: 月 6月 4 12:59:51 JST 2018 from 192.168.100.9 on ssh:notty
There was 1 failed login attempt since the last successful login.
$ mkdir Maildir
以上で、yuki@example.com にメールを送信すると ~/Maildir/new にメールが保存されていることが確認できる。
$ ls -l
total 12
-rw------- 1 yuki yuki 5143 Jun 6 18:38 1528277892.Vca01I80747M599700.ip-10-1-11-92
-rw------- 1 yuki yuki 2347 Jun 6 18:39 1528277947.Vca01I8074bM472756.ip-10-1-11-92
ちなみに
SES 使えば以下みたいな感じで送信する環境も簡単に構築できます。
$ aws ses send-email --to user@hogehoge.com --from yuki@example.com --subject 'This is a test' --text 'TEST' --region us-east-1
{
"MessageId": "01000163d79ab286-e1ba974d-598b-4825-9a76-a1757602893c-000000"
}