ssl/tls導入による追加設定 ~Postfix編~ [ソフトウェア研究室]

 こんにちは!
 ナビゲータのEVEです。

 ちょっと、一休みするために、ブログを更新します。
 本日、システムについていろいろな検討をしました。
 一つ目は、データベースへアクセスするための、ユーザーとパスワードの保持する方法・・・。ここでは、公にできませんが、従来より安全な方法で、管理・運用することができそうです。
 二つ目は、ログインユーザーのパスワードの暗号化方式・・・。Prototyhpe EVEでは、独自の暗号方式によりログインユーザーのクライアントパスワードを暗号化後、サーバーに送信していました。そうしたのは、セキュリティを考えていた、2006年~2009年当時、クライアント側で暗号化に使えそうな関数がなかったのです。当然ハッシュ値を求める関数などもありませんでした。そのため、その当時には独自の方式を採用したのですが、今回、ログイン方法を検討・調査したところ、ブラウザ側でもハッシュ値が利用できそうだということが判明しました。ただ、強度が弱い・・・。多分これから徐々に強度は上がっていくのでしょうが、そのたびにクライアント側、サーバー側両方の仕様を変更しなければなりません。強度が弱いまま利用する分けにいきませんからね・・・。サーバーサイトと同様にsalt値を利用することも検討しましたが、結局ブラウザの強度が上がったら、仕様を変更することになるでしょう?しかも、ブラウザによりハッシュ関数の対応はまちまちです・・・。そのため、現在のこれについては、一応調べましたが、ペンディング事項としています。ブログを書いている現在には、Porotype EVE方式の方がいいかなって考えています。後日考えが変わるかもしれませんが・・・。

[ssl/tlsをメールサーバーへ適用する]

 昨日までは、Server Worldの手順で、メールサーバーを構築した場合の不足している点、ディレクトリ、シェルの設定について、解説等をしましたが、本日からは、ssl/tlsを導入したときに、ChatGPTに言われるままに設定した内容について解析していきたいと思います。
 では、Postfixのmain.cfから見ていきましょう!

[Postfixのmain.cfの修正]

 以下が、ssl/tls導入に際して、追記した内容です。

smtpd_use_tls = yes
smtpd_tls_protocols = !SSLv2, !SSLv3, TLSv1.2, TLSv1.3
smtp_tls_mandatory_protocols = !SSLv2,!SSLv3,!TLSv1
smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3,!TLSv1
smtpd_tls_cert_file = /etc/ssl/certs/ssltlsxxxxxxxxxx.crt
smtpd_tls_key_file = /etc/ssl/private/privatexxxxxxxxxx.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

Server Worldの手順に追加した部分は、赤い部分です。ここはあまり変更していませんでしたね?以上の設定では何をしているのか、ChatGPTに解説をしてもらいましょう!
以下は、main.cfに追加したPostfixの設定について1行ずつ解説した内容です:

❶smtpd_use_tls = yes
 この設定は、PostfixのSMTPサーバー(smtpd)でTLS(Transport Layer Security)を有効にします。これにより、SMTP通信が暗号化されるようになります。

❷smtpd_tls_protocols = !SSLv2, !SSLv3, TLSv1.2, TLSv1.3
 使用可能なTLSバージョンを指定します。!SSLv2と!SSLv3は、SSLv2とSSLv3を無効にすることを意味しています。また、TLSv1.2とTLSv1.3を有効にする設定です。これにより、セキュリティの高いTLSバージョン(v1.2とv1.3)のみを使用することになります。

❸smtp_tls_mandatory_protocols = !SSLv2,!SSLv3,!TLSv1
 SMTPクライアント(送信側)との通信で必須となるTLSプロトコルを指定します。この設定では、SSLv2とSSLv3を無効にし、TLSv1も無効にしています。TLSv1.2以降を強制するため、これらを無効にしています。

❹smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3,!TLSv1
 これは受信側(PostfixのSMTPサーバー)の設定で、必須となるTLSプロトコルを指定します。SSLv2、SSLv3、TLSv1を無効にして、TLSv1.2以上を使用するように強制しています。

❺smtpd_tls_cert_file = /etc/ssl/certs/ssltlsxxxxxxxxxx.crt
 Postfixが使用するTLS証明書のパスを指定します。この証明書は、SMTPサーバー(受信側)が接続要求を暗号化する際に使用されます。/etc/ssl/certs/のディレクトリに証明書ファイル(.crt)が存在することを前提にしています。

❻smtpd_tls_key_file = /etc/ssl/private/privatexxxxxxxxxx.key
 上記の証明書に対応する秘密鍵のファイルパスを指定します。この秘密鍵は、受信した通信を復号化する際に使用されます。/etc/ssl/private/に配置された秘密鍵ファイル(.key)を使用します。

❼smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
 TLSセッションのキャッシュを保存するデータベースの設定です。この設定により、TLSセッションの再利用ができ、通信のパフォーマンスが向上します。btreeはデータ構造のタイプで、smtpd_scacheはキャッシュデータが保存されるファイルの名前です。このファイルはdata_directory内に作成されます。

なお、セキュリティとは関係ないのですが、Server Worldの手順に以下を追加しています。Server Worldはmain.cfに、SMTP-Auth の設定として、受信側しか入れていないようですが、送信側の設定も入れておいた方がスマートかもしれません。入れなくても、動作しますけれどね?(笑)
# 送信設定
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/isp_mailid
smtp_sasl_security_options = noanonymous

[あとがき]

 土曜日は、中小企業診断士 経済学・経営政策の統計問題、日曜日は、セキュリティの日なので、この続きは、月曜日にします。
 設定当時は無我夢中で、いろいろなことをやっていたため、いろいろやった気になっていましたが、整理するとそんなに多くは追加していませんでした。最終的に削除したモノも多数あったからかもしれませんが、Server Worldの内容で十分なのかもしれません。
 なお、今回、ChatGPTとセキュリティに関する対話をして知りましたが、現在からもDHを追加することができるそうです。技術的に理解できていないうえに、時間が掛かりそうで、かつそんな重要なデータを送信することはこの1年はなさそうなので、ssl/tlsを更新する1年後にDHは導入したいと思います。

 では、また!

■Server World
https://www.server-world.info/query?os=Ubuntu_22.04&p=download#google_vignette

コメント