Amazon Linux on EC2にPostfix+Dovecotでメールサーバー構築

# 前提
ドメインはexample.com、メールサーバーはmail.example.com、メールアドレスはuser@example.com とする。
また、認証はLinuxのユーザ認証と同じユーザ名/パスワードを利用する。

# インスタンスの準備
22（SSH）、25（SMTP）、465（SMTPS）、993（IMAPS）ポートを開けておく。

```bash
$ sudo yum update
```
# postfix
▪️postfixのインストールのインストール

```bash
$ sudo yum -y install postfix
```

▪️postfixの設定

```bah
$ sudo vim /etc/postfix/main.cf
```
以下設定内容

```
# メールサーバのホスト名(mail.example.com)を設定
myhostname = mail.example.com
# メールアドレスで利用するドメイン(example.com)を設定
mydomain = example.com
# ローカルから配信されたメールは、example.comのメールであると認識させるための設定
myorigin = $mydomain
# 自ドメイン宛メールを受信できるようにする
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
# 外部からのメール受信を許可するように変更
inet_interfaces = all
# VPC全体を信頼するネットワークとして設定
mynetworks = 192.168.0.0/24, 127.0.0.0/8
# メールの保存形式をメールディレクトリ形式に設定。 メールは宛先ユーザのホームディレクトリ（user@example.cpmならば、/home/user/）のMaildirディレクトリに保存される。
home_mailbox = Maildir/
# メールサーバを隠蔽する設定を追加
smtpd_banner = $myhostname ESMTP unknown
# 受信メールサイズの制限の設定を追加
message_size_limit = 10485760
# saslauthdを利用するための設定
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_sender_restrictions = reject_unknown_sender_domain
smtpd_client_restrictions = permit_mynetworks,reject_unknown_client,permit
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
```


▪️submissionポートとsmptsポートを使うための設定

```bash
$ sudo vim /etc/postfix/master.cf
```
以下をコメントイン

```
submission inet n       -       n       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
```

▪️認証用のSMTP-Authのためのsaslauthdを起動。また、自動起動の設定も行う。

```bash
$ sudo service saslauthd start
$ sudo chkconfig saslauthd on
```

▪️デフォルトMTAの変更

```bash
$ sudo alternatives --config mta
```
※ 2を選択


▪️sendmailの停止

```bash
$ sudo /etc/rc.d/init.d/sendmail stop
$ sudo chkconfig sendmail off
```

▪️postfixの起動

```bash
$ sudo service postfix start
$ sudo chkconfig postfix on
```

# dovecot
▪️dovecotのインストール

```bash
$ sudo yum -y install dovecot
```
▪️dovecotの設定

```bash
$ sudo vim /etc/dovecot/conf.d/10-mail.conf
```
以下追加

```
mail_location = maildir:~/Maildir
```

▪️受信の際の認証方法にloginを追加

```bash
$ sudo vim /etc/dovecot/conf.d/10-auth.conf
```
以下追加

```
auth_mechanisms = plain login
```

▪️ポートの設定

```bash
$ sudo vim /etc/dovecot/conf.d/10-master.conf
```
以下コメントイン、追記

```
service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
}

service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}

service auth {
  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
}
```

# その他の設定
▪️新規ユーザ追加時に、ホームディレクトリにMaildir形式のメールボックスを作成するようにする。

```bash
$ sudo mkdir -p /etc/skel/Maildir/{new,cur,tmp}
$ sudo chmod -R 700 /etc/skel/Maildir/
```
▪️ユーザーの作成

```bash
$ sudo useradd user
$ sudo passwd user
```
▪️証明書を指定

```bash
$ sudo vim /etc/postfix/main.cf
```
TLS を利用するための設定、証明書を指定する
```
smtpd_tls_cert_file = /etc/pki/tls/certs/server.crt
smtpd_tls_key_file = /etc/pki/tls/certs/server.key
smtpd_use_tls = yes
```
▪️SSLを使えるようにする

```bash
$ sudo vim /etc/dovecot/conf.d/10-ssl.conf
```
```
# (変更)
# SSL証明書
ssl_cert = </etc/pki/tls/certs/server.crt
ssl_key = </etc/pki/tls/certs/server.key
# (追記)
ssl = yes
ssl_key_password = "前述の証明書作成時のパスフレーズ"
```

▪️dovecotの起動

```bash
$ sudo service dovecot start
$ sudo chkconfig dovecot on
```
▪️postfixの再起動

```bash
$ sudo service postfix restart
```
おわりです。
うまくいかない場合は/var/log/maillogを確認してみてください。

Thunderbirdなどと連携できます。