Postfix 3系で追加された lookup table を試してみた②

こんにちは。サイオステクノロジー OSS サポート担当 N です。

RHEL の 標準 MTA として同梱されている Postfix ですが、2019/05/07 に RHEL8 がリリースされるあたって、Postfix のバージョンも 2.10 系から 3.3 系へとリベースされることとなりました。

変更点や追加機能の概要は、リリースノートや、Pstfix コミュニティで公開されているアナウンスページなど (以下参照) を拝見していただくとして、

 ・Postfix feature overview
 http://www.postfix.org/features.html
 ・Postfix stable release 3.0.0
 http://www.postfix.org/announcements/postfix-3.0.0.html

Postfix 3系で追加された新しい lookup table の動作を確認していきたいと思います。

 

Postfix 3系では、lookup table に新しく「inline」「randmap」「pipemap」「unionmap」が追加されました。
inline と randmap は、シンプルなルールを main.cf に直接定義するためのテーブル、
pipemap と unionmap は、複数の lookup table を定義するためのテーブルです。

※前回 (inline と randmap) はこちらから
今回は unionmap と pipemap について動作を確認していきます。

 

unionmap

  • 複数の lookup table 操作のサポート。
  • クエリを複数の lookup table に送信して、結果を “,” 区切りでリストする

 

・unionmap を使用しない複数テーブルの指定例

unionmap を使わずとも、以前のバージョンで複数の lookup table を指定することは可能でした。
ただし、複数のテーブルファイルを検査し「最初に HIT したものを使用する」という動作でした。
条件に合致するレコードが複数あっても、最初にマッチした「user1 に書き換え」だけが実行されます。

※「virtual_alias_maps」を使用して特定のメールアドレスやドメイン名を書き換え、別の宛先へエイリアスさせます。

/etc/postfix/virtual1

/etc/postfix/virtual2

/etc/postfix/main.cf

 

試しに、localhost から virtual-user 宛にメールを送信してみましょう。

maillog から確認すると、最初に HIT した条件 virtual1 によって、「user1 に書き換え」が実行されてますが、virtual2 は作用していません。

 

・unionmap を使用した複数テーブルの指定例

unionmap では複数の lookup-table 全てにクエリを送信して、応答をカンマ繋ぎで連結させます。
“/etc/postfix/virtual1” と “/etc/postfix/virtual2” のテーブルからそれぞれ user1/2@RHEL8.example.com に書き換えるというレコードが HIT します。

つまり、内部的には「TO:virtual-user@RHEL8.example.com」から「TO:user1@RHEL8.example.com,user2@RHEL8.example.com」という書き換えが実行される訳です。

 

/etc/postfix/main.cf

※/etc/postfix/virtual1 と /etc/postfix/virtual2 には変更なし

 

もう一度同じように、localhost から virtual-user 宛にメールを送信してみましょう。

virtual1 による「user1 に書き換え」、virtual2 による「user2 に書き換え」の両方が作用していることが確認できます。

 

pipemap

  • 複数の lookup table 操作のサポート
  • クエリを最初のテーブルに渡し、その結果を次のテーブルに渡し、その結果を次のテーブルに渡し… 最後のテーブルが最終結果を生成する。

 

/etc/postfix/main.cf

 /etc/postfix/virtual1

 /etc/postfix/virtual2

 /etc/postfix/virtual3

 

unionmap では最初の lookup-table にクエリを送信して、その応答を次の lookup-table に渡します。

( パイプライン “|” でコマンドを繋げていくイメージ)

 

「virtual-user@RHEL8.example.com」という宛先に対し、virtual1 で「user1@RHEL8.example.com」へ書き換え、
「user1@RHEL8.example.com」という応答を、virtual2 で「user2@RHEL8.example.com」へ書き換え、
「user2@RHEL8.example.com」という応答を、virtual3 で「user3@RHEL8.example.com」へ書き換えます。

その結果、最終的には「TO:user3@RHEL8.example.com」という書き換え結果が適用されます。

 

>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメント投稿

メールアドレスは表示されません。


*