前回、紹介したメールサーバーの構築は、最低限の設定だけでした。今回は、暗号化対応を行い、パスワードやメール本文の盗聴に備えます。(※ 暗号化が保証されるのは、自宅サーバーとメールクライアント(MUA) 間のみです。MTA 間の通信は、相手の SMTP サーバーが STARTTLS 対応している場合に実施されます。)
今回は自己証明書(オレオレ証明書)を使って、チャチャっと暗号化を行うための記事です。前回の設定をベースに追加設定のみ記載します。ベースにしているPostfixとDovecotの設定は、以下の記事を参照してください。
なお、自己証明書の場合、メーラーで送受信する際に、証明書の検証をしないように、設定する必要があります。例えば、手元にあるスマホにインストールされている gmail (ver. 8.10.21) の設定では、「SSL/TLS (証明書をすべて承認)」を設定しておく必要があります。
Let’s Encrypt を利用した、ドメイン認証(DV)証明書を利用する方法は別途以下の記事で紹介しています。
メールサーバーを構築するにあたり、SMTP認証やメール(SMTP)の暗号化などの概要を理解したい方は以下を参考にしてください。
自己証明書を作成する
自己証明書を作成するには、通常以下の手順が必要です。
- サーバー秘密鍵を作成する
- サーバー公開鍵を作成する
- デジタル証明書を作成する
しかし、CentOS 7.5 でインストールされている openssl のパッケージには、この手順を簡略刺されているMakefileがインストールされているようですので、こちらを利用します。
以下のコマンドを実行し、いくつか対話するだけです。DAYSは、100年有効にしたい場合の例です。(以下では、自身のドメインは example.com として紹介しています。)
# make postfix.pem DAYS=36500
以下の対話が始まります。
1 2 3 4 5 6 7 8 9 10 11 12 | umask 77 ; \ PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \ PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \ /usr/bin/openssl req -utf8 -newkey rsa:2048 -keyout $PEM1 -nodes -x509 -days 36500 -out $PEM2 ; \ ~(略)~ Country Name (2 letter code) [XX]:JP State or Province Name (full name) []:Fukuoka Locality Name (eg, city) [Default City]:Fukuoka Organization Name (eg, company) [Default Company Ltd]:Hoge Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:mx.example.com Email Address []:xxx@xxxx |
6行目の Country Name (2 letter code) [XX]: 対話が始まります。
とりあえず作りたい場合は、11行目のCommon Name 以外適当でよいです。わかると思いますがそれぞれ以下の意味になります。
6行目:国名
7行目:都道府県名
8行目:市区町村名 (市でよいでしょう)
9行目:組織名(会社・団体名)
10行目:部門名(会社なら部署名でしょう)
11行目:サーバのFQDN (DNSで引けるMX名)
12行目:メールアドレスを入れます。
このコマンドで、postfix.pem が作成さました。以下のコマンドで、ファイルを移動しておきましょう。
# mv postfix.pem /etc/pki/postfix/
SELinuxが有効の場合は、system_u のコンテキストが付与されているのが正しい状態ですので、以下のコマンドを打っておきます。(unconfined_uになっていると思います。)
# ls -Z /etc/pki/postfix/postfix.pem
-rw-------. root root system_u:object_r:cert_t:s0 /etc/pki/postfix/postfix.pem
自己証明書作成をmakeファイルを使わずに作成する場合
makeファイルを利用せず、サーバー証明書を作成する方法を以下に記載しておきます。
サーバー秘密鍵(key)を作成する
# cd /etc/pki/postfix/
# openssl genrsa 2048 > server.key
サーバー公開鍵(csr)を作成する。
この時、上記で紹介している対話が入ります。聞かれる内容は上記に加えて、パスワードと会社名が追加されていますが、どちらも任意なので「空」で「Enter」キーを押して問題ありません。
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Fukuoka
Locality Name (eg, city) [Default City]:Fukuoka
Organization Name (eg, company) [Default Company Ltd]:Hoge
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:mx.example.com
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
デジタル証明書(crt)を作成する
以下のコマンドで、サーバー秘密鍵(key)とデジタル証明書(crt)を一つにすると、前述のmakeで作成したファイルと同じになります。
# echo "" >> postfix.pem
# cat server.crt >> postfix.pem
PostfixとDovecotへ設定を反映する
それぞれ、デジタル証明書の設定と、SMTPs、POPsやIMAPsのポート設定を行います。
Postfixへの設定
まず、/etc/postfix/main.cf に以下を追記します。秘密鍵とデジタル証明書が一緒になったファイルを利用する場合は、以下の通り同じファイルを設定してください。別々に設定したい場合は名前の通り、smtpd_tls_key_fileにサーバーの秘密鍵(key)、smtpd_tls_cert_fileに、デジタル証明書(crt)を設定しても同じです。
1 2 3 4 | smtpd_tls_security_level = may smtpd_tls_loglevel = 1 smtpd_tls_key_file = /etc/pki/postfix/postfix.pem smtpd_tls_cert_file = /etc/pki/postfix/postfix.pem |
次に、/etc/postfix/master.cf の以下の行のコメントを外し、submission(TCP 587)の暗号化を有効にします。必要に応じて、SMTPs(TCP 465)を有効にしてもよいです。接続するクライアントと要相談です。submission のみまたは、SMTPs のみのクライアントに対応する場合は、必要のない方のセクションをコメントアウトしてポートごと閉じて問題ありません。
1 2 3 4 5 6 7 | submission inet n - n - - smtpd -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes |
以上で、Postfixの設定は完了です。再起動しましょう。
Dovecotへの設定
まず、/etc/dovecot/conf.d/10-ssl.conf のssl_certとssl_keyを変更します。秘密鍵とデジタル証明書が一緒になったファイルを利用する場合は、以下の通り同じファイルを設定します。別々に設定したい場合は名前の通り、ssl_certに、デジタル証明書(crt)を、ssl_key にサーバーの秘密鍵(key)を設定しても同じです。また、SSLv3を無効にしておきます。Postfixは、smtpd_tls_protocolsで同様の設定できますが、デフォルトで無効設定になっているので、明示的に設定は追加していません。
1 2 3 | ssl_cert = </etc/pki/postfix/postfix.pem ssl_key = </etc/pki/postfix/postfix.pem ssl_protocols = !SSLv2 !SSLv3 |
次に、/etc/dovecot/conf.d/10-master.conf でPOPsとIMAPsのポート設定を行います。
1 2 3 4 5 6 7 8 9 10 11 | ・・・ inet_listener imaps { port = 993 ssl = yes } ・・・ inet_listener pop3s { port = 995 ssl = yes } ・・・ |
暗号化なしのPOPとIMAPを閉じる場合は、port=0を設定します。
1 2 3 4 5 6 7 8 9 | ・・・ inet_listener imap { port = 0 } ・・・ inet_listener pop3 { port = 0 } ・・・ |
以上で、Dovecotの設定は完了です。再起動しましょう。
ファイヤーウォールの設定
必要に応じて、ファイヤウォールの設定で、SMTPs、POPs、IMAPsの設定を開けます。
firewall-cmd --permanent --zone=public --add-service=pop3s
firewall-cmd --permanent --zone=public --add-service=imaps
firewall-cmd --reload