Postfix 3.6
4/29 に Postfix 3.6 がリリースされたので、その変更点などを。
3.5 と 3.6 のパラメータの差分はこちら。
デュアルライセンス
今まで IBM Public License 1.0 というライセンスだったんだけど、それに加えて Eclipse Public License 2.0 も追加された。
(実は 3.3 からだった)
whitelist / blacklist が allowlist / denylist に変更
最近流行りの言葉狩り的なアレ。
postscreen のパラメータ名とログメッセージが変更された。
パラメータ名の変更:
-
postscreen_whitelist_interfaces→postscreen_allowlist_interfaces -
postscreen_blacklist_action→postscreen_denylist_action -
postscreen_dnsbl_whitelist_threshold→postscreen_dnsbl_allowlist_threshold
互換のため、新しいパラメータのデフォルト値は古いパラメータの値を見るようになってる。
こんな感じ:
postscreen_allowlist_interfaces=${postscreen_whitelist_interfaces?{$postscreen_whitelist_interfaces}:{static:all}}
ログの方は、respectful_logging=no を設定するとログには今まで通り WHITELIST / BLACKLIST で出力される。
内部プロトコル変更
内部プロトコルが変更になったらしい。なのでバージョンアップ前にちゃんと postfix stop しておく必要があるとのこと。
あ、postfix_daemon が動かなくなるな…。まあいいや、そのうち直そう。
TLS まわり
OpenSSL の最低バージョンが 1.1.1 になった。
OpenSSL 1.1.1 は 2023-09-11 に EOL だけど、Postfix 3.6 は 2025 までサポートする予定なので、必要になったらアップデートするらしい。
lmtp_tls_fingerprint_digest, smtp_tls_fingerprint_digest, smtpd_tls_fingerprint_digest のデフォルト値が md5 から sha256 に変更になった。
tlsproxy_tls_dh512_param_file は無効になった。指定しても無視される。
tlstype.pl スクリプト追加。collate.pl スクリプトの出力を入力することでメッセージごとの TLS 情報を出力してくれるらしい。
compatibility_level が Postfix のバージョンになった
今まで compatibility_level は 0, 1, 2 だったんだけど、Postfix バージョン(3.6 とか 3.6.0 とか)になった。
と言ってもデフォルト値は 0 のままなので、主に compatibility_level を評価する側の表記の問題。
今までは main.cf 中で ${{$compatibility_level} < {1} ? {yes} : {no}} みたいに書いてたんだけど、< や <= は単純な文字列比較らしく 3.9 よりも 3.10 が小さく評価されてしまうとのことで、<level, <=level という記述が導入された。
${{$compatibility_level} <level {3.6} ? {yes} : {no}} みたいに書く。
known_tcp_ports パラメータ
TCP ポートの指定に数字ではなく smtp や smtps みたいにサービス名で記述すると /etc/services ファイルを見てたんだけど、新設された Postfix パラメータの known_tcp_ports を参照するようになった。参照コストが高かったということなのかな…。
パラメータのデフォルト値は lmtp=24, smtp=25, smtps=submissions=465, submission=587。
このパラメータに無いサービス名は今までどおり /etc/services ファイルを見る。
local_login_sender_maps パラメータ
sendmail コマンドや postdrop コマンドでメールを送る際、今まではどのユーザーでも任意のエンベロープ送信者アドレスを指定できたけんだけど、それを制限できるようになった。
このマップは UNIX ログイン名をキーとして、返される値が許されるパターン。
-
*は何でもOK -
<>(empty_address_local_login_sender_maps_lookup_keyの値) は空アドレス -
@ドメイン名はそのドメインであればOK - それ以外はメールアドレス
たとえば、
main.cf:
local_login_sender_maps = hash:login_senders
login_senders:
hoge hoge@example.com @example.net
fuga *
piyo <>
みたいにすると、hoge ユーザーは hoge@example.com または examlpe.net ドメインのアドレス、fuga ユーザーは何でもOK、piyo ユーザーは空アドレスのみOK…という感じ。
デフォルトは static:* で、従来どおり誰でも何でも指定可能。
smtpd_relay_restrictions と smtpd_recipient_restrictions の評価順
3.5 までは smtpd_recipient_restrictions → smtpd_relay_restrictions の順に評価されていたのが、3.6 からは smtpd_relay_restrictions → smtpd_recipient_restrictions の順になった。
smtpd_relay_before_recipient_restrictions=no に設定すると 3.5 までと同じ順になる。
バウンスメールを元メールへの返信にできる
enable_threaded_bounces=yes を設定すると、バウンスメールのヘッダに References と In-Reply-To がついて、元メールの返信になるようにできる。デフォルトは no なのでヘッダはつかない。
smtpd_sasl_mechanism_filter パラメータ
リリースノートには smtpd_sasl_mechanism_list と書かれてるけど間違い。
SASLライブラリが返す mechanism の中で採用するもののフィルタ。マップはキーだけが有効で値は意味がない。
デフォルト値は !external, static:rest で external を除外してそれ以外を使用する。
マップの値は使われないので static:rest の rest は無意味。
配送エージェントのログ追加
local の mailbox_transport や smtp の best_mx_transport のように他の配送エージェントに転送する場合に次のようなログを吐くようになった。
postfix/smtp[pid]: queueid: passing <recipient> to transport=local
errno が 0 のときのログメッセージ
エラー時に errno が 0 の場合に Unknown error: 0 と出てたのを Application error と出るようになった。
DNS API 関数変更
DNS API として res_XXXX() 関数の代わりに res_nXXXX() 関数を使用するようになった。
以前と同じようにビルドするには CCARGS=-DNO_RES_NCALLS を指定する。
Discussion