AlmaLinux8からAlmaLinux9に移行
これまで自宅サーバを AlmaLinux8系で運用してきましたが、今回AlmaLinux9(9.2)に移行することにしました。
その時にハマった点について記事にします。
AlmaLinux9(9.2)のインストール自体は AlmaLinux8と比べて特別変わったことはありませんでした。
ところが各種サービスの設定を進めていると、以下の点がうまく行かないことに気付きました。
- 保管していたRSA鍵を用いてTera TermからSSH接続しようとすると、うまく接続できない。
- PostfixからOCNメールサーバへのリレー(過去の記事はこちら)がうまく働かず、メール送信ができない。
SSH接続はとりあえずパスワード認証なら問題なく接続できるので慌てる必要はありませんでしたが、メールリレーについては今も家族のみんながメールを使っていますので早急に対処する必要があります。
原因を探っていると、AlmaLinux9では以下の点がAlmaLinux8と比べて大きく変更されていることが分かりました。
- システムのデフォルト暗号化ポリシーの変更
どうやら、これが今回の問題に影響しているようです。
この辺りを中心に探りを入れてみたいと思います。
OCNのメールサーバにリレーできない原因の追究
SSH接続についてはとりあえずパスワード認証で接続できており急ぎ案件ではありませんでしたので、まずはPostfixのメールリレーがうまく行かないところからです。
メールログの確認
「/var/log/maillog」の内容を確認してみます。
# tail -f -n 50 /var/log/maillog
すると、以下のようなログが出力されていました。(一部抜粋)
postfix/smtp[30292]: SSL_connect error to smtp.ocn.ne.jp[xxx.xxx.xxx.xxx]:465: -1
postfix/smtp[30292]: warning: TLS library problem: error:0A000172:SSL routines::wrong signature type:ssl/t1_lib.c:1505:
postfix/smtp[30292]: 7B96440B1112: to=<yyyyyy@aroma.ocn.ne.jp>, relay=smtp.ocn.ne.jp[211.16.12.137]:465, delay=0.27, delays=0.12/0.03/0.12/0, dsn=4.7.5, status=deferred (Cannot start TLS: handshake failure))
OCN SMTPサーバとのTLS negotiationにおいて「handshake failure」となっています。
「TLS library problem」、「wrong signature type」という文言も出てきますので、暗号スイートのうちのいずれかの方式がOCNメールサーバとうまく噛み合っていないようです。
OCNメールサーバのTLS接続方式の確認
そもそもOCNメールサーバとのTLS接続はどのようになっているのか、opensslコマンドで調べてみます。
# openssl s_client -connect smtp.ocn.ne.jp:587 -starttls smtp
(抜粋)
Peer signing digest: SHA1
Peer signature type: RSA
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA384
---
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-GCM-SHA384
この結果をAlmaLinux9の暗号化ポリシーと比較します。
AlmaLinux9の暗号化ポリシーの確認
AlmaLinux9では、AlmaLinux8に比べてシステム全体としての暗号化ポリシーレベルが引き上げられています。
OpenSSLの設定ファイル「/etc/ssl/openssl.cnf (/etc/pki/tls/openssl.cnf)」の中身を見ると、その中では「.include = /etc/crypto-policies/back-ends/opensslcnf.config」とcrypto-policiesパッケージを参照していることが分かります。
現在採用されているポリシーを調べるには以下のコマンドを実行します。
# update-crypto-policies --show
DEFAULT
普通にDEFAULTではありますが、その中身は AlmaLinux8と違っているようです。
許可されている暗号化スイート等の詳細を知りたい場合は以下のコマンドを実行します。
# cat /usr/share/crypto-policies/policies/DEFAULT.pol
(抜粋)
hash = SHA2-256 SHA2-384 SHA2-512 SHA3-256 SHA3-384 SHA3-512 SHA2-224 SHA3-224 \
SHAKE-256 ⇒「SHA-1」が無くなった
sign = ECDSA-SHA3-256 ECDSA-SHA2-256 ECDSA-SHA2-256-FIDO \
ECDSA-SHA3-384 ECDSA-SHA2-384 \
ECDSA-SHA3-512 ECDSA-SHA2-512 \
EDDSA-ED25519 EDDSA-ED25519-FIDO EDDSA-ED448 \
RSA-PSS-SHA3-256 RSA-PSS-SHA2-256 \
RSA-PSS-SHA3-384 RSA-PSS-SHA2-384 \
RSA-PSS-SHA3-512 RSA-PSS-SHA2-512 \
RSA-PSS-RSAE-SHA3-256 RSA-PSS-RSAE-SHA2-256 \
RSA-PSS-RSAE-SHA3-384 RSA-PSS-RSAE-SHA2-384 \
RSA-PSS-RSAE-SHA3-512 RSA-PSS-RSAE-SHA2-512 \
RSA-SHA3-256 RSA-SHA2-256 \
RSA-SHA3-384 RSA-SHA2-384 \
RSA-SHA3-512 RSA-SHA2-512 \
ECDSA-SHA2-224 RSA-PSS-SHA2-224 RSA-SHA2-224 \
ECDSA-SHA3-224 RSA-PSS-SHA3-224 RSA-SHA3-224
⇒「ECDSA-SHA1 RSA-PSS-SHA1 RSA-SHA1」が無くなった
sha1_in_certs = 0 ⇒「1」じゃなくなった
AlmaLinux8の暗号化ポリシーと比較してみると、「SHA1」関連の設定がすべて削除されていることが分かります。
これでPostfixのrelayhostがうまくいかなかった原因がハッキリしました。
OCNはSHA1によるダイジェストを求めているのに、こちらはそれを無効にしている。そういうことだったのですね。
そんな訳でどうしてもOCNメールサーバとコンタクトしたいのであれば、ハッシュアルゴリズムに「SHA1」を追加する必要があるようです。
AlmaLinux9の暗号化ポリシーを変更
ネットで検索すると、SHA1を追加するために「/etc/ssl/openssl.cnf (/etc/pki/tls/openssl.cnf)」や「/etc/crypto-policies/back-ends/opensslcnf.config」を直接編集し、デフォルトレベルを下げる方法がたくさん出てきます。
ただシステム全体的に暗号化レベルが下がってしまうのは良くないので、SHA1だけを有効にするのが良いようです。
そのためには「/usr/share/crypto-policies/policies/modules」内に格納されている「SHA1.pmod」を利用します。以下のようなコマンドを実行します。
# update-crypto-policies --set DEFAULT:SHA1
どのように適用ポリシーが変更されたか確認してみます。
# update-crypto-policies --show
DEFAULT:SHA
hash には「SHA1」が追加され、signには「ECDSA-SHA1 RSA-PSS-SHA1 RSA-SHA1」が追加され、「sha1_in_certs = 1」となりました。
これで OCNメールサーバには接続できるようになったでしょうか?
無事にOCNメールサーバへのメールリレーが成功
試しにメール送信してみると、ようやく無事に成功しました!
以下はメールログの出力です。
# tail -f -n 50 /var/log/maillog
(抜粋)
postfix/smtp[161814]: Untrusted TLS connection established to smtp.ocn.ne.jp[xxx.xxx.xxx.xxx]:465: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
postfix/smtp[161814]: 3DC2540B2AE0: to=<yyyyyy@aroma.ocn.ne.jp>, relay=smtp.ocn.ne.jp[xxx.xxx.xxx.xxx]:465, delay=0.64, delays=0.12/0.03/0.4/0.09, dsn=2.0.0, status=sent (250 2.0.0 8Jf2qXrmmfktU8Jf2qgOH3 mail accepted for delivery)
問題なくTLS handshakeが成功していますね。
ネット検索ではPostfixの設定ファイルの「/etc/postfix/main.cf」に tls_medium_cipherlist を追加すれば良いという記事もたくさん見つかりましたが、私の環境では大元のシステムでSHA-1が無効化されていましたので、それでは解決できませんね。
公開鍵認証によるSSH接続
残っていたもう一つの問題点「AlmaLinux9にしたら公開鍵によるSSH接続ができなくなった」ですが、対策前のログでは次のような表示でした。
sshd[9073]: userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
ところが、OCNメールサーバへのリレーについての対策が終わった後で確認してみると、こちらも同時に解決していました。
というのも鍵交換としてssh-rsaを用いる場合は、同時にハッシュ関数にSHA-1を用いることになるのだそうです。先程SHA-1をシステムポリシーに追加したことで、自動的にssh-rsaを利用できるようになったのですね。
もしOCNメールサーバと接続したいという事情がないのであれば、SSH接続にECDSA鍵を用いれば済む話でしたが、結果としてSSH接続においてもRSAを残す形となってしまいました。
終わりに
AlmaLinux8からAlmaLinux9への移行は比較的容易と感じましたが、relayhostがうまくいくようになるまでには少し時間がかかりました。
暗号化ポリシーレベルが引き上げられたのは良いことですが、それに対応していない外部環境もあるということを理解しました。
最初はこの際OCNメールサーバへのリレーをやめて、Gmailメールサーバへのリレーに転換しようとも思ったのですが、GmailだとFromヘッダもEnvelope-Fromヘッダも強引にGmailドメインに書き換えられてしまい、メール返信先もGmailアドレス宛になってしまったり、また家族で使い分けている自ドメインメールアドレスが問答無用で同一Gmailアドレスからの送信の扱いになってしまったり、非常に使い勝手が悪い状態です。
どうしても今までのメール環境を取り戻したく OCNメールサーバの利用にこだわってしまいましたが、取り敢えず解決して良かったです。
コメント