KUSANAGI for ConoHaとLet’s Encryptの小粋な使い方
ConoHaさんはかわいいですよ?
この記事は、ConoHa Advent Calender の13日目の記事になります。
ということで、KUSANAGIの中の人宮﨑です。KUSANAGIは、超高速WordPress仮想マシンということで、WordPressを高速に動作させるようセットアップ済みの環境(OSイメージ)を色々なクラウド事業社さんに提供しています。
もちろん、KUSANAGI for ConoHaでConoHaで動きます。
この www.myzkstr.com も ConoHa 上で動いています。
Let’s EncryptのSSL証明書をHTTPS以外で使用してみる。
KUSANAGIでは、Let’s Encryptが提供する無償SSL証明書を取得し、HTTPSの環境を簡単にセットアップする機能を提供しています。
このLet’s EncryptのSSL証明書は期限が90日と商用SSL証明書に比べると短いのですが、Let’s Encryptのクライアントで更新することで継続的に使用できます。もちろん、KUSANAGIではcronで定期的にSSL証明書の更新を行います。
さて、このSSL証明書ですが、HTTPS接続以外にも使用用途があります。ということで、いくつか紹介します。
ここでは、KUSANAGIでSSLの証明書を取得済みとして説明します。
SMTPサーバPostfixでTLS
SMTPはメールを送受信するサービスですが、歴史が古いプロトコルなため基本はプレーンテキストでの通信となり、内容を傍受可能な状態になります。
近年(といっても21世紀に入ってから)では、SMTP over SSLやSTARTTLSの機能を組み込み、SMTPで暗号化通信を行うことは一般的になりました。
このSSL通信では、当然のようにサーバSSL証明書が必要になりますので、Let’s Encrypt で取得したSSL証明書を利用してみましょう。
Let’s EncryptのSSL証明書
Let’s EncryptでSSL証明書を取得すると、以下のように証明書関連ファイル(実際にはsymbolic link)が生成されます。
サーバ証明書 | /etc/letsencrypt/live/www.myzkstr.com/cert.pem |
---|---|
中間証明書 | /etc/letsencrypt/live/www.myzkstr.com/chain.pem |
サーバ証明書+中間証明書 | /etc/letsencrypt/live/www.myzkstr.com/fullchain.pem |
秘密鍵 | /etc/letsencrypt/live/www.myzkstr.com/privkey.pem |
Postfixの設定
KUSANAGIのベースOSであるCentOS7には、あらかじめPostfixがインストールされています。ただし、SMTP-AUTHを使用するため、以下のパッケージを yumでインストールしてください。
cyrus-sasl-2.1.26-20.el7_2.x86_64 cyrus-sasl cyrus-sasl-md5 cyrus-sasl-gssapi cyrus-sasl-plain cyrus-sasl-lib cyrus-sasl-scram
postfixの設定ファイル、/etc/postfix/main.cf に以下の設定を追記します。
以下は例ですので、鵜呑みにせずに設定内容を吟味してください。真に必要な設定は SSL/TLSの設定とSMTP-AUTHの部分で、そのほかの部分はSMTP送受信を制限する設定になります。
#security disable_vrfy_command = yes smtpd_helo_required = yes strict_rfc821_envelopes = yes allow_percent_hack = yes swap_bangpath = yes allow_untrusted_routing = no smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access hash:/etc/postfix/access, reject_non_fqdn_recipient, reject_unauth_destination, permit_auth_destination, reject smtpd_etrn_restrictions = permit_mynetworks, reject_invalid_hostname smtpd_client_restrictions = permit_mynetworks, check_client_access hash:/etc/postfix/access, reject_rbl_client all.rbl.jp, reject_rbl_client bl.spamcop.net, reject_rbl_client sbl.spamhaus.org, reject_unknown_client, permit #メール中継の設定 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination #MAIL FROM コマンドの送信者アドレスを制限 smtpd_sender_restrictions = reject_unknown_sender_domain # ssl/tls smtpd_tls_security_level = may smtpd_tls_loglevel = 1 smtpd_tls_cert_file = /etc/letsencrypt/live/www.myzkstr.com/cert.pem smtpd_tls_key_file = /etc/letsencrypt/live/www.myzkstr.com/privkey.pem smtpd_tls_CAfile = /etc/letsencrypt/live/www.myzkstr.com/chain.pem smtpd_tls_CApath = /etc/letsencrypt/live/www.myzkstr.com/ smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache # sasl smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = www.myzkstr.com smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth
SMTP over SSL接続をするには、smtps(465番ポート)の設定が必要なので、以下のように /etc/postfix/master.conf を設定します。
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
postfixをrestartすれば、設定が反映されているはずです。
STARTTLSの確認方法
SMTP(25番ポート)にnetcatなどで接続し、EHLO localhost と打ってSTARTTLSが入っていれば、STARTTLS接続できます。
SMTP-AUTHの設定もここで確認できます。crypt済みのpamの情報をAUTHとして使っているので、当たり前ですがCRAM-MD5とかは使えません。
# nc localhost 25 220 www.myzkstr.com ESMTP EHLO localhost 250-www.myzkstr.com 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-STARTTLS 250-AUTH PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN
SMTPSの確認方法
SMTPS(465番ポート)の場合は、openssl コマンドで確認します。設定したSSL証明書で接続されていることが分かります。
# openssl s_client -connect localhost:465 -crlf CONNECTED(00000003) depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3 verify return:1 depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3 verify return:1 depth=0 CN = www.myzkstr.com verify return:1 --- Certificate chain 0 s:/CN=www.myzkstr.com i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3 i:/O=Digital Signature Trust Co./CN=DST Root CA X3 --- Server certificate (省略) --- 220 www.myzkstr.com ESMTP ehlo localhost 250-www.myzkstr.com 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-AUTH PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN DONE
POP3/IMAPサーバdovecotでTLS
SMTPと同様に、受信したメールをMUA(メールクライアント)から取得する際、POP3やIMAPを使用しますが、近年SSL接続を経由するのが一般的です。
CentOS7で標準的なPOP3/IMAPサーバのdovecotで、Let’s EncryptのSSL証明書を使用してみましょう。
dovecotの設定
SSL証明書の設定は、/etc/dovecot/conf.d/10-ssl.conf に以下の設定を追記します。
中間証明書+サーバ証明書である fullchain.pem を使用します。
ssl = yes ssl_cert = </etc/letsencrypt/live/www.myzkstr.com/fullchain.pem ssl_key = </etc/letsencrypt/live/www.myzkstr.com/privkey.pem
これで、POP3 over SSLや IMAP over SSLが使用できます。
非SSLのPOP3やIMAPを停止するには、/etc/dovecot/conf.d/10-master.conf で、以下のようにportを0とするとよいでしょう。
service imap-login { inet_listener imap { #port = 143 port = 0 } inet_listener imaps { port = 993 ssl = yes } } service pop3-login { inet_listener pop3 { #port = 110 port = 0 } inet_listener pop3s { port = 995 ssl = yes } }
POP3 over SSLの確認
POP3 over SSLのテストは、openssl コマンドで 995版ポートに接続します。設定したSSL証明書で接続されていることが分かります。
“+OK Dovecot ready.” と出ていれば、POP3で接続できています。quit と打てば接続を終了します。
# openssl s_client -connect localhost:995 CONNECTED(00000003) depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3 verify return:1 depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3 verify return:1 depth=0 CN = www.myzkstr.com verify return:1 --- Certificate chain 0 s:/CN=www.myzkstr.com i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3 i:/O=Digital Signature Trust Co./CN=DST Root CA X3 --- (中略) --- +OK Dovecot ready. quit closed
IMAP4 over SSLの確認
IMAP4 over SSLのテストは、openssl コマンドで、993版ポートに接続します。
” Dovecot ready.”の文字を確認します。”a logout” と打てば接続を終了します。
# openssl s_client -connect localhost:993 CONNECTED(00000003) depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3 verify return:1 depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3 verify return:1 depth=0 CN = www.myzkstr.com verify return:1 --- Certificate chain 0 s:/CN=www.myzkstr.com i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3 i:/O=Digital Signature Trust Co./CN=DST Root CA X3 --- (中略) * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] Dovecot ready. a logout closed
まとめ
SMTP/POP3/IMAP4 over SSLで検索すると、大抵は自己証明SSL証明書を生成する手順をとりますが、通信相手が正しいことの保障とはなりません。
Let’s EncryptのSSL証明書を使用することで、中間CAを通して認証されるため、送信元から自分への通信が正しいことを保証できるため、より望ましい状態となります。
今どきは、自分でメールサーバを立てることは少ないと思いますが、参考にしていただけると幸いです。