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>」というようなログが出ていたら暗号化した状態でメールの受信ができているとみて問題ないと思います。