ArchLinuxにおてがるにSSL証明書を設定してPostfix/Dovecotとnginxで使う

**ArchLinuxはネットワークと独自ドメインまで設定ずみとします**

##目標と準備

###目標

認証局が発行したSSL証明書をサーバーに設定し、nginxでHTTPS通信を、PostfixとDovecotでSMTPS/IMAPS/POP3Sを使えるようにします。

###環境

さくらVPS + ArchLinux + OpenSSL + Postfix + Dovecot + nginx

###準備

ドメインの実在確認にそのドメインのメールアドレスが必要になるので、設定しておきます。
また、ArchLinux、Postfix、Dovecot、nginxはインストール済みで、SSL以外の設定はすんでいるものとします。

##SSL証明書の取得と設定

認証にも種類はいろいろありますが。

1. ドメイン認証 - ドメインの所有のみを証明
2. 組織認証 - 組織が法的に存在しているかを証明
3. EV認証 - 組織が物理的に存在しているかなど、くわしく証明

今回は、一番簡単な1のドメイン認証を取得します。

また、[RapidSSL](https://www.rapidssl.com/)と、その代理店として[SSLBOX](http://www.sslbox.jp/)を使いました。
年額1,500円！即日発行！

###OpenSSLのインストール

```pacman -Sy openssl```

###サーバー暗号鍵とCSRをつくる

サーバー暗号鍵をつくります。
また、SSL認証局にCSR(証明書署名リクエスト)を提出する必要があるので、つくります。
サーバーで公開鍵と暗号鍵を生成し、公開鍵に所在地情報などを加えたものがCSRです。

```
cd SSL証明書を置きたいディレクトリ
```

```
openssl req -new -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr

Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:都道府県
Locality Name (eg, city) []:市町村
Organization Name (eg, company) [Internet Widgits Pty Ltd]:社名など
Organizational Unit Name (eg, section) []:部署名
Common Name (e.g. server FQDN or YOUR name) []:FQDNなど
Email Address []:認証に使うメールアドレス

A challenge password []:空改行
An optional company name []:空改行
```

RapidSSLの場合、2048bitのRSAキーで生成します。

###証明局にCSRを送ってサーバー証明書を取得する

前段で生成したCSRをコピペして証明局に送信すると、

1. サーバー証明書

がメールの末尾にくっつけられて送られてくるので確認しておきます。
また、メールで案内されるRapidSSLのサイトから

1. 中間証明書

をダウンロードしておきます。

###サーバー証明書を設定する

送られてきたサーバー証明書と、認証局の中間証明書を設定します。
PEMファイルとしてひとつにまとめます。

```
nano example.com.cer
サーバー証明書をコピペして保存
```

```
nano intermediate.cer
中間証明書をコピペして保存
```

```
cat example.com.cer intemediate.cer > example.com.pem
```

```
chmod 400 example.com.key example.com.pem
```

##Postfixの設定

SASL認証を使い、経路はTLSで暗号化します。
Postfixはインストールされているものとします。

###CyrusSASLのインストール

```
pacman -S cyrus-sasl
```

###CyrusSASLの設定

```
nano /usr/lib/sasl2/smtpd.conf

pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: plain login cram-md5
```

```
chown postfix:postfix /etc/sasldb2
```

###PostfixのSASL/TLS関係の設定

設定は適宜読み替えてください。

```
nano /etc/postfix/main.cf

smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = no
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname

smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = ディレクトリ/認証ファイル.pem
smtpd_tls_key_file = ディレクトリ/暗号鍵ファイル.key
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
```

```
nano /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
```

CyrusSASLとPostfixを起動(再起動)して、送信確認もしておきます。

```
systemctl start saslauthd
systemctl enable saslauthd
systemctl restart postfix
```

##Dovecotの設定

POP3S/IMAPSを使えるように設定します。
Dovecotはインストールされているものとします。

###DovecotのTLSまわりの設定

```
nano /etc/dovecot/conf.d/10-ssl.conf

ssl_cert = <ディレクトリ/証明書ファイル.pem
ssl_key = <ディレクトリ/暗号鍵ファイル.key
ssl = yes
```

```
nano /etc/dovecot/conf.d/10-master.conf

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

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

Dovecotを再起動して受信テストをしておきます。

```
systemctl restart dovecot
```

##nginxの設定

HTTPSを使えるようにします。
nginxはインストールされているものとします。

```
nano /etc/nginx/nginx.conf

http {
  server {
    ssl  on;
    ssl_certificate      ディレクトリ/認証ファイル.pem;
    ssl_certificate_key  ディレクトリ/暗号鍵ファイル.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_session_cache    shared:SSL:5m;
    ssl_session_timeout  5m;
    ssl_ciphers     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:AES128:AES256:RC4-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK;
    ssl_prefer_server_ciphers  on;
  }
}
```