3.DovecotでPOP3 サーバの暗号化 POP3 over SSL/TLS(POP3s 995番ポート)対応

 それでは最初の暗号化はDovecotです。
SMTPよりPOPサーバの方が設定にミスがあった場合、メールサーバとしての影響が少ないと考え、SMTPより先にPOPサーバを先に暗号化します。

目次
 10-auth.conf
  disable_plaintext_auth
 10-ssl.conf
  ssl
  ssl_cert
  ssl_key
  ssl_dh
  ssl_min_protocol
  ssl_prefer_server_ciphers
 10-master.conf
 受信確認

10-auth.conf

disable_plaintext_auth  10行目

「平文の認証を無効にする」けどよいですか?をyes/noで指定します。
暗号化しない設定の際にあえて「no」に変更していましたが、今回デフォルトのyesに戻します。

disable_plaintext_auth = no
   ↓ ↓ ↓ ↓
disable_plaintext_auth = yes

10-ssl.conf

ssl  8行目

SSLの暗号化通信を行うかを指定します。
10-ssl.confのデフォルト設定ではSSL通信を行う設定になっています。
が、まずは暗号化無しでメールの送受信ができるか確認した為「no」にしたのを「required」(暗号化必須)に戻します。

ssl = no
  ↓ ↓ ↓ ↓
ssl = required

ssl_cert  14行目

PEM形式のSSL/TLS証明書の指定。
 デフォルトで/etc/pki/dovecot というディレクトリ配下の汎用的なファイルを参照するように設定されています。このままの設定でも多分暗号化はされます。 ・・・

あくまでも汎用的な証明書の為、受診の際に受信先のドメインと、この証明書のドメインが一致せずエラーが出て受信する事が出来ません。
これを一時的にメーラー側の設定で「証明書の検証をしない」という内容のところにチェックを入れる事で「証明書の発行元ドメイン」と「接続するPOPサーバのドメイン」の整合性チェックをしない様にして暗号化して受信する事ができます。

 しかしこれでは証明書の検証を行っていないので実際は違うメールサーバに接続しに行かされているかも!!という状態になるかもしれません。(暗号化はします。)
それでは暗号化したところでセキュリティ的に意味がない事になってしまいます。

 という事でせっかくLet’s Encryptで自ドメインの証明書を使っているのだからそちらの証明書を参照するように変更します。
 きちんと自分が発行した証明書に変更する事で、メーラーの「証明書の検証をしない」のチェックを外して、接続先のPOPサーバが証明書のドメインと一致していることを確認してから通信&暗号化するのでセキュリティが向上します。

ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
  ↓ ↓ ↓ ↓
ssl_cert = </etc/letsencrypt/live/caramelsauce.info/fullchain.pem

ssl_key  15行目

PEM形式のSSL/TLS秘密鍵の指定。
 ssl_certの証明書同様に秘密鍵もLet's Encryptのファイルを参照するように変更します。

ssl_key = </etc/pki/dovecot/private/dovecot.pem
  ↓ ↓ ↓ ↓
ssl_key = </etc/letsencrypt/live/caramelsauce.info/privkey.pem

ssl_dh  56行目

Diffie-Hellman法パラメータファイルのパス指定。
 あたしゃ実はよく分かっていないのだが・・・(Diffie-Hellman法でググってみてください。)「共通鍵暗号方式の鍵の共有方法」という事らしい。
そしてこのDH法はDovecotのバージョン2.3.3以降はオプションンになったのでパラメータファイルのパスを記載しないといけないと。
(メールサーバ建ててから20年くらい経つけど今まで暗号化もせず、家からしか送受信できないようにしていたので知らんかった・・・)

 ではコンフィグファイルに記載のある通りopensslコマンドを使ってdhパラメータファイルの生成をします(パスはデフォルトのままにしました)。
アタイの端末では11分ほどかかりました。(DDR3でCPUがi3のPC。ディスクはSATA接続のSSD。)

openssl dhparam -out /etc/dovecot/dh.pem 4096
Generating DH parameters, 4096 bit long safe prime, generator 2
This is going to take a long time
......................+............+.......+.....
....+........+...................................
            ・
            ・
            ・


 opensslコマンドが終わったらssl_dhパラメータのコメントを外します。

#ssl_dh = </etc/dovecot/dh.pem
  ↓ ↓ ↓ ↓
ssl_dh = </etc/dovecot/dh.pem

ssl_min_protocol  63行目

使用許可するSSLプロトコルの一番古いバージョンの指定。
 管理者本人しか使わないわけで・・・。万人が使えるように考慮する必要はないので古いプロトコルは排除します。
最新の「TLSv1.3」は試したところ使えなかったのでデフォルトの「TLSv1.2」を使い、それ以前のプロトコルは使えない様にするためコメントを外します。

#ssl_min_protocol = TLSv1.2
  ↓ ↓ ↓ ↓
ssl_min_protocol = TLSv1.2

補足
Windows端末から自サーバへのメール送信はTLSv1.2でしか送信できなかった。(TLSv1.3は送信できない。)
が、自分のサーバからGmailへ。さらにGmailから自サーバへの送受信はmaillogを見るとTLSv1.3での暗号化が確認できた。(クライアント端末自身が悪いのか・・・ただメーラーが悪いのかは分かっておらず・・・)

ssl_prefer_server_ciphers  77行目

サーバー側の暗号リストを優先するかの指定。
クライアント側よりサーバで設定した暗号を優先し他方が良いのでコメントを外し「yes」に変更します。

#ssl_prefer_server_ciphers = no
  ↓ ↓ ↓ ↓
ssl_prefer_server_ciphers = yes

10-master.conf

service pop3-login  38行目~

POP3プロトコルに関する基本設定
 暗号化無しのDovecot設定で有効にした110番ポートを無効にする為「0」に指定します。
 また、pop3sのポート番号とsslのコメントアウトを外し有効化します。

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

      ↓  ↓  ↓  ↓

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

Dovecotにおいて参考にしたサイト:Dovecot documentation

dovecotサービス再起動

systemctl restart dovecot

一応ステータス確認しましょう。

systemctl status dovecot
● dovecot.service - Dovecot IMAP/POP3 email server
     Loaded: loaded (/usr/lib/systemd/system/dovecot.service; enabled; vendor preset: disabled)
     Active: active (running) since Tue 2022-01-01 00:00:00 JST; 10s ago

・「Active」がactive(runnning)になっている事。
・最後に表示される部分(maillogの一部を表示)にerrorやwarningが出ていないことを確認します。

受信確認

 メーラーを使って受信の確認をしましょう。メーラーの大まかな設定は

POP3サーバ:192.168.0.1  (あくまでもサーバと同一セグメントからの接続とする)
認証方式:標準
POP3ポート:995
SSL/TLS受信:TLS 1.2  (「デフォルト」でも問題なし)
証明書の検証:しない  (同一セグメントからの接続なので証明書とのドメインが違うので「検証する」にするとエラー発生して(送)受信できない)

メーラーの設定が完了したら・・・
 1.携帯からでもいいから違うドメインから自分ドメイン宛にメールを送信する。
 2.メーラーから受信確認します。
これで携帯からのメールがメーラに受信出来たらOKです。
更にmaillogを確認してみて「TLS, session=<AbcDeFghIjkLMnOPq>」というようなログが出ていたら暗号化した状態でメールの受信ができているとみて問題ないと思います。