UNIX」カテゴリーアーカイブ

ffmpeg vs libav

動画・音声コーデック界のスイスアーミーナイフと呼ばれる ffmpeg から、数年前に libav がforkして分裂した。

参考: ffmpegとlibavの背景事情

Debian/Ubuntu の標準パッケージは libav の方に追随したのだが、結局メンテナンス頻度の問題で ffmpeg に再度鞍替えしたらしい。

参考: Ubuntu 15.10 その12 – Libavが無くなり、FFmpegに戻りました

forkがあったときにどっちに付いていくかは微妙な問題だけど、単なるいちユーザーとしては多数派になった方が使えればどうでもいいのよ、と思わないでもない。ffmpeg コマンドを前提にして色々スクリプトを書いていたが、コマンドが avconv に変わって、また ffmpeg に変わって、しかも微妙に互換性がないという困ったことになっている。

OpenOffice.org とか MySQL とか、ほかにも色々あるはず。

Postfixのsender_canonical_mapsでヘッダを書きかえてくれない

sender_canonical_mapsを設定したけど、エンベロープ From は書き換わってもヘッダ From が書き換わらない!という場合がある。sender_canonical_classes にもちゃんと header_sender が含まれている(デフォルト)のに書き換わらない。

結論から言うと、local_header_rewrite_clients の設定を見直す必要がある。

デフォルトでは

local_header_rewrite_clients = permit_inet_interfaces

となっていて、サーバのローカルから送信されたメールのみ、ヘッダも書き換えるという動作をする。つまり、メールハブでいくらsender_canonical_maps を設定しても、他サーバから送信されたメールのヘッダ From は書き換えてくれないのだ。

自分が管理しているドメイン(組織内ローカルネットワーク)のどのクライアント・サーバから送られたメールでも From ヘッダを書き換え対象としたい場合、管理対象ドメインの IP アドレスを mynetworks に列挙した上で以下を設定する。

local_header_rewrite_clients = permit_mynetworks

難しく考えず、書き換え対象なら必ず書き換える!という場合は以下の設定を入れる。

local_header_rewrite_clients = static:all

この場合、書き換えテーブルにマッチすれば、インバウンドメールであろうと書き換えが入ることになるが、まあそれほど問題はないだろう。

参考:

Postfixで送信者(From:)によってルーティングを変更する

メールのエンベロープ From: を見て、次のリレー先 SMTP サーバを変更するような設定をしたい。例えば、組織内の foo@example.com からのメールは送信リレーサーバ1へ、bar@example.com からのメールは送信リレーサーバ2へ振り分けるといった設定を行いたい。

利用例としては、ライセンス数制限のあるメールセキュリティアプライアンスを、一部のユーザに対してだけ適用したい場合に使う。他にも、大学などで教職員ユーザはセキュリティポリシー緩めのメールサーバへ、学生は厳しめのサーバへ転送したいなど、応用方法は様々。

設定項目としては、sender_dependent_default_transport_maps と sender_dependent_relayhost_maps がある。どちらを使っても同等の動作を実現できるが、少し書式が異なる。

1. sender_dependent_default_transport_maps を使う場合

/etc/postfix/main.cf:

sender_dependent_default_transport_maps = hash:/etc/postfix/sender_dependent_transport

/etc/postfix/sender_dependent_transport:

@example.co.jp            smtp:[リレーサーバ1]:25
@sub.example.co.jp        smtp:[リレーサーバ2]:25

メールの送信者が foo@example.co.jp の場合はリレーサーバ1に、bar@sub.example.co.jp の場合はリレーサーバ2に送られる。

この設定は、default_transport (デフォルト値: smtp) をエンベロープ From: 次第で上書き変更するというものである。上記のような書き方もできるし、master.cf で別の transport を定義しておき右辺に使うことも可能。

2. sender_dependent_relayhost_maps を使う場合

/etc/postfix/main.cf:

sender_dependent_relayhost_maps = hash:/etc/postfix/sender_dependent_relayhost

/etc/postfix/sender_dependent_relayhost:

@example.co.jp           [リレーサーバ1]:25
@sub.example.co.jp       [リレーサーバ2]:25

これは relayhost の設定を From: 次第で上書きするという機能なので、テーブルの右辺は relayhost を書くときの形式でなければならない。つまり、 transport:host:port の形式ではなく、host:port だけの形式となる。

ただし、「この情報は relay_transport、default_transport および transport(5) テーブルで上書きされます。」とのことなので、transportテーブルを併用する場合は思った通りに動作しないかもしれない。