4/29 に Postfix 3.6 がリリースされたので、その変更点などを。
3.5 と 3.6 のパラメータの差分はこちら。
- デュアルライセンス
- whitelist / blacklist が allowlist / denylist に変更
- 内部プロトコル変更
- TLS まわり
- compatibility_level が Postfix のバージョンになった
- known_tcp_ports パラメータ
- local_login_sender_maps パラメータ
- smtpd_relay_restrictions と smtpd_recipient_restrictions の評価順
- バウンスメールを元メールへの返信にできる
- smtpd_sasl_mechanism_filter パラメータ
- 配送エージェントのログ追加
- errno が 0 のときのログメッセージ
- DNS API 関数変更
デュアルライセンス
今まで 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
を指定する。