サイズ: 4789
コメント:
|
← 2019-06-04 23:09:10時点のリビジョン9 ⇥
サイズ: 5126
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 1: | 行 1: |
## page was renamed from sendmail/SSL/TLSサーバーベストプラクティクス = SSL/TLSサーバーベストプラクティクス = |
= メールサーバーのSTARTTLS設定ベストプラクティクス = |
行 5: | 行 4: |
== 想定環境 == * [[https://www.FreeBSD.org/|FreeBSD]] 11.1-R * [[https://www.proofpoint.com/us/sendmail-open-source|sendmail]] v8.15.2 * [[https://www.freshports.org/security/ca_root_nss|ca_root_nss]] v3.32.1 |
== 検証環境 == * [[https://www.FreeBSD.org/|FreeBSD]] `11.1-R` * [[https://www.proofpoint.com/us/sendmail-open-source|sendmail]] `v8.15.2` * [[https://www.freshports.org/security/ca_root_nss|ca_root_nss]] `v3.32.1` |
行 21: | 行 20: |
* 「A+」が取れないのは以下の点で sendmail の実装に問題がある(実装されてない)ため。 * CLIENT-INITIATED SECURE RENEGOTIATION * OCSP Stapling |
* 「A+」が取れないのは以下の点で`sendmail`の実装に問題がある(実装されてない)ため。 * `CLIENT-INITIATED SECURE RENEGOTIATION` * `OCSP Stapling` |
行 26: | 行 25: |
* ports/security/ca_root_nss をインストールすること。 | * `ports/security/ca_root_nss` をインストールすること。 |
行 29: | 行 28: |
現時点(2017/10/24)で、OS標準(以後 stock sendmail と呼称)および ports/mail/sendmail(以後 ports sendmail と呼称) ともに 8.15.1 で導入された {{{_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE}}} コンパイルオプションが有効になっていない。 そのため、別途再コンパイルが必要とする。 また stock sendmail の場合、標準でECDHEサポートが無効になっていることもあり({{{_FFR_TLS_EC}}} コンパイルオプション、8.14.8 で導入)、 |
現時点(`2017/10/24`)で、OS標準(以後`stock sendmail`と呼称)および`ports/mail/sendmail`(以後`ports sendmail`と呼称) ともに`8.15.1`で導入された {{{_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE}}} コンパイルオプションが有効になっていない。 そのため、別途再コンパイルが必要である。 また`stock sendmail`の場合、標準でECDHEサポートが無効になっていることもあり({{{_FFR_TLS_EC}}} コンパイルオプション、`8.14.8`で導入)、 |
行 34: | 行 33: |
こちらは ports sendmail では対応済みである。 | こちらは`ports sendmail`では対応済みである。 |
行 37: | 行 36: |
* 単純には /etc/make.conf に以下の設定を行い make world を実施する。 {{{ |
* 単純には`/etc/make.conf`に以下の設定を行い make world を実施する。 {{{#!highlight bsdmake numbers=disable |
行 43: | 行 42: |
* ソースコードを直接修正する場合は /usr/src/usr.sbin/sendmail/Makefile の {{{CFLAGS+= -DSTARTTLS -D_FFR_TLS_1}}} 行を {{{CFLAGS+= -DSTARTTLS -D_FFR_TLS_EC -D_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE}}} に変える。{{{-D_FFR_TLS_1}}} オプションは 8.15.0 リリース時に無くなっている(有効コードになった)。 {{{ : |
* ソースコードを直接修正する場合は`/usr/src/usr.sbin/sendmail/Makefile`の {{{CFLAGS+= -DSTARTTLS -D_FFR_TLS_1}}} 行を {{{CFLAGS+= -DSTARTTLS -D_FFR_TLS_EC -D_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE}}} に変える。{{{-D_FFR_TLS_1}}} オプションは`8.15.0`リリース時に無くなっている(有効コードになった)。 {{{#!highlight bsdmake numbers=disable |
行 51: | 行 49: |
: | |
行 53: | 行 50: |
行 54: | 行 52: |
ports sendmail では /usr/ports/mail/sendmail/files/site.config.m4.tls ファイルを編集して {{{-D_FFR_TLS_EC}}} の後ろに {{{-D_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE}}} を加えた後、make install を実施する。 | `ports sendmail`では`/usr/ports/mail/sendmail/files/site.config.m4.tls`ファイルを編集して {{{-D_FFR_TLS_EC}}} の後ろに {{{-D_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE}}} を加えた後、`make install`を実施する。 |
行 75: | 行 74: |
{{{ | {{{#!highlight bash numbers=disable |
行 80: | 行 80: |
sendmail_cert_create="YES" (デフォルト)によって既に作成済みのSSLサーバー証明書関連のファイルを削除する。 {{{ rm -f /etc/mail/certs/host.cert /etc/mail/certs/host.key rm -f /etc/mail/certs/cacert.pem /etc/mail/certs/*.0 |
{{{sendmail_cert_create="YES"}}} (デフォルト)によって既に作成済みのSSLサーバー証明書関連のファイルを削除する。 |
行 85: | 行 82: |
{{{#!highlight console numbers=disable # rm -f /etc/mail/certs/host.cert /etc/mail/certs/host.key # rm -f /etc/mail/certs/cacert.pem /etc/mail/certs/*.0 |
|
行 88: | 行 88: |
{{{ openssl dhparam -out /etc/mail/certs/dh.param 2048 |
{{{#!highlight console numbers=disable # openssl dhparam -out /etc/mail/certs/dh.param 2048 Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time ...................................................(略)............................................++*++*++*++* |
行 94: | 行 96: |
/etc/mail/certs ディレクトリ以下に ports/security/ca_root_nss でインストールされた /usr/local/share/certs/ca-root-nss.crt より1証明書毎にファイルを作成(分解)して、{{{openssl x509 -noout -hash -fingerprint}}} を通した結果をファイル名(拡張子は .0)を作成する。 | `/etc/mail/certs`ディレクトリ以下に`ports/security/ca_root_nss`でインストールされた`/usr/local/share/certs/ca-root-nss.crt`より1証明書毎にファイルを作成(分解)して、{{{openssl x509 -noout -hash -fingerprint}}} を通した結果をファイル名(拡張子は`.0`)を作成する。 |
メールサーバーのSTARTTLS設定ベストプラクティクス
目次
検証環境
FreeBSD 11.1-R
sendmail v8.15.2
ca_root_nss v3.32.1
目的
昨今メールのSMTP(プロトコル)における暗号通信(SSL/TLS)のry。
+--------+ SMTP +------+ SMTP +------+ SMTP +------+ SMTP等 +------+ IMAP/POP3等 +--------+ |メーラー| →→ |MSA| →→ |MTA| →→ |MTA| →→→ |MDA| →→→→→ |メーラー| +--------+ +------+ +------+ +------+ +------+ +--------+
目標
High-Tech Bridge SSL/TLS Server Test で「A」評価を得る。
「A+」が取れないのは以下の点でsendmailの実装に問題がある(実装されてない)ため。
CLIENT-INITIATED SECURE RENEGOTIATION
OCSP Stapling
事前インストール
ports/security/ca_root_nss をインストールすること。
再コンパイル
現時点(2017/10/24)で、OS標準(以後stock sendmailと呼称)およびports/mail/sendmail(以後ports sendmailと呼称) ともに8.15.1で導入された _FFR_TLS_USE_CERTIFICATE_CHAIN_FILE コンパイルオプションが有効になっていない。 そのため、別途再コンパイルが必要である。 またstock sendmailの場合、標準でECDHEサポートが無効になっていることもあり(_FFR_TLS_EC コンパイルオプション、8.14.8で導入)、 合わせて対応する。 こちらはports sendmailでは対応済みである。
stock sendmail の場合
単純には/etc/make.confに以下の設定を行い make world を実施する。
.if ${.CURDIR} == "/usr/src/usr.sbin/sendmail"
CFLAGS+= -D_FFR_TLS_EC -D_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE
.endif
ソースコードを直接修正する場合は/usr/src/usr.sbin/sendmail/Makefileの CFLAGS+= -DSTARTTLS -D_FFR_TLS_1 行を CFLAGS+= -DSTARTTLS -D_FFR_TLS_EC -D_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE に変える。-D_FFR_TLS_1 オプションは8.15.0リリース時に無くなっている(有効コードになった)。
.if ${MK_OPENSSL} != "no"
# STARTTLS support
CFLAGS+= -DSTARTTLS -D_FFR_TLS_EC -D_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE
LIBADD+= ssl crypto
.endif
ports sendmail の場合
ports sendmailでは/usr/ports/mail/sendmail/files/site.config.m4.tlsファイルを編集して -D_FFR_TLS_EC の後ろに -D_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE を加えた後、make installを実施する。
APPENDDEF(`conf_sendmail_ENVDEF', `-DSTARTTLS -D_FFR_TLS_EC -D_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE') APPENDDEF(`conf_sendmail_LIBS', `-lssl -lcrypto')
設定ファイルの変更
sendmail.mc
define(`confSERVER_CERT', `/usr/local/etc/dehydrated/certs/mail.example.jp/fullchain.pem')dnl define(`confSERVER_KEY', `/usr/local/etc/dehydrated/certs/mail.example.jp/privkey.pem')dnl define(`confSERVER_SSL_OPTIONS', `SSL_OP_NO_SSLv3,SSL_OP_NO_TLSv1,SSL_OP_CIPHER_SERVER_PREFERENCE')dnl define(`confCACERT', `/usr/local/etc/dehydrated/certs/mail.example.jp/chain.pem')dnl define(`confCACERT_PATH', `CERT_DIR')dnl define(`confCIPHER_LIST', `ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA')dnl define(`confDH_PARAMETERS', `CERT_DIR/dh.param')dnl
/etc/rc.conf
以下の設定を追加する。
sendmail_cert_create="NO"
作成済みファイルの削除
sendmail_cert_create="YES" (デフォルト)によって既に作成済みのSSLサーバー証明書関連のファイルを削除する。
# rm -f /etc/mail/certs/host.cert /etc/mail/certs/host.key
# rm -f /etc/mail/certs/cacert.pem /etc/mail/certs/*.0
DHパラメータの生成
# openssl dhparam -out /etc/mail/certs/dh.param 2048
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
...................................................(略)............................................++*++*++*++*
ルートCA証明書の展開
/etc/mail/certsディレクトリ以下にports/security/ca_root_nssでインストールされた/usr/local/share/certs/ca-root-nss.crtより1証明書毎にファイルを作成(分解)して、openssl x509 -noout -hash -fingerprint を通した結果をファイル名(拡張子は.0)を作成する。