Let's Encryptを使ったセキュアなメールサーバの構築(Cent OS7 + Postfix + Dovecot)

#はじめに
自分のドメインを利用したメールサーバの構築方法は、インターネットを探せばいくらでも転がっています。
しかしながら、

- OSのバージョンなどを理由とした情報の古さ
- Let's Encryptとサービスの連携自体がまだ多く見られない

   →自分で記事を作ってしまおう
というおはなしに。

この記事では表題通りの運用が最低限可能というレベルを前提としていますので、もしプラスアルファの設定が必要な場合は別途各自で追加するようにしてください。

#前提条件
- [x] CentOS 7にsudo権限のあるユーザが発行されていること
- [x] DNSレコードをA、MXともに適切に設定済みであること(今回の例ではA:example.com, MX:mail.example.com)
- [x] SELinuxやFirewalldの設定は既に済んでいること

#おもにやること
- SSL証明書の取得
- 送信メールサーバ(Postfix)の導入と設定
- 受信メールサーバ(Dovecot)の導入と設定

#1. Let's Encryptでラクラク証明書発行
Let's Encryptはmozilla、Akamai、Cisco、Google、Facebookなどををはじめとした大手IT企業の支援を受けて2014年に創設されたプロジェクトで、個人でも信頼されたサーバ証明書を無料で発行することができます。

※導入前に、自分のサーバーでWebサーバが動いている場合は落とします。

`sudo yum list installed git`としてgitが入ってるかを確認
無ければ`sudo yum -y install git`としてインストールします。
続けて、

```
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt/
./letsencrypt-auto --help
```

これで鍵作成の準備はOKです。
必要に応じてsudo用のパスワードを要求されるので入れてあげましょう。

```
./letsencrypt-auto certonly --standalone \
-d mail.example.com \
-m 管理用メールアドレス@example.com \
--agree-tos
```
と入力すれば自動で鍵作成のセットアップが始まります。
-d以下は自分が取得したドメインに合わせて変更してください。
セットアップ終了後、`/etc/letsencrypt/live/cloud.example.jp/fullchain.pem`のような形でファイルが作成されます。

#2. Postfixを入れよう
`sudo yum -y install postfix`するだけ。
といってもCentOSの場合デフォで入ってると思います！

設定ファイルを以下のように編集します

```conf:/etc/postfix/main.cf
#myhostname = host.domain.tld
　↓
myhostname = mail.example.com
 
#mydomain = domain.tld
　↓
mydomain = example.com
 
#myorigin = $mydomain
　↓
myorigin = $mydomain
 
inet_interfaces = localhost
　↓
inet_interfaces = all
 
mydestination = $myhostname, localhost.$mydomain, localhost
　↓
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
 

#home_mailbox = Maildir/
　↓
home_mailbox = Maildir/
 
#smtpd_banner = $myhostname ESMTP $mail_name
　↓
smtpd_banner = $myhostname ESMTP
 
 
以下をファイルの最後に追記

smtpd_sasl_auth_enable = yes

smtpd_sasl_type = dovecot

smtpd_sasl_path = private/auth
 
smtpd_use_tls = yes

smtp_tls_security_level = may

smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem
 
smtpd_tls_loglevel = 1
 
smtpd_tls_received_header = yes

smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache

smtpd_tls_session_cache_timeout = 3600s

smtpd_recipient_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unauth_destination
```

続いて、

```conf:/etc/postfix/master.cf
#smtps     inet  n       -       n       -       -       smtpd
#  -o syslog_name=postfix/smtps
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
　↓
smtps     inet  n       -       n       -       -       smtpd
#  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
```

以上を変更した後に、以下コマンドを入力

```
postmap /etc/postfix/access
postfix check
```

何もエラーが表示されなければ

```
systemctl start postfix
systemctl enable postfix
```

これでpostfixの設定は終了。

#3. Dovecotを入れよう
まずは`sudo yum -y install dovecot`でインストールしてから各種設定ファイルをガリガリいじっていきます。

```conf:/etc/dovecot/conf.d/10-master.conf
service imap-login {
  inet_listener imap {
    #port = 143
	　↓
    port = 0
  }
  inet_listener imaps {
    #port = 993
    #ssl = yes
	　↓
    port = 993
    ssl = yes
  }
}
 
service pop3-login {
  inet_listener pop3 {
    #port = 110
	　↓
    port = 0
  }
  inet_listener pop3s {
    #port = 995
    #ssl = yes
	　↓
    port = 995
    ssl = yes
  }
}
```

```conf:/etc/dovecot/conf.d/10-master.conf
service auth {
　（略）
  # Postfix smtp-auth
  #unix_listener /var/spool/postfix/private/auth {
  #  mode = 0666
  #}
　↓
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix        
  }
}
```

```/etc/dovecot/conf.d/10-auth.conf
#disable_plaintext_auth = yes
　↓
disable_plaintext_auth = no
 
auth_mechanisms = plain
　↓
auth_mechanisms = plain login
```

```conf:/etc/dovecot/conf.d/10-ssl.conf
ssl = required
　↓
ssl = yes
 
#ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
#ssl_key = </etc/pki/dovecot/private/dovecot.pem
　↓
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
```

```conf:/etc/dovecot/conf.d/10-mail.conf
#mail_location = 
　↓
mail_location = maildir:~/Maildir
```

最後にDovecotを起動させましょう。

```
systemctl start dovecot
systemctl enable dovecot
```

受信サーバはこれだけ。

#3. 最後にアカウントの配布

```
useradd -s /sbin/nologin user
passwd user
```

#4. クライアントでの設定

Thunderbirdを例に...

![be899293f9f3b7ed4c1a5a86a599cd05.png](https://qiita-image-store.s3.amazonaws.com/0/100275/9a1cc7d7-c84b-6a6b-afeb-0f9bdeedffb2.png)