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

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【4/18開催】VSCode Dev Containersで楽々開発環境構築祭り〜Python/Reactなどなど〜
Visual Studio Codeの拡張機能であるDev Containersを使ってReactとかPythonとかSpring Bootとかの開発環境をラクチンで構築する方法を紹介するイベントです。
https://tech-lab.connpass.com/event/311864/

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

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

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

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

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

 

lookup table とは?

lookup table と言えば、アクセス制御やアドレス書き換え、コンテンツフィルタなどの為に、ルールを保存しておく database を指します。
Postfix では「database」と「lookup table」という語句を同じ意味で使用しているんですね。
(postmap コマンドで /etc/postfix/transport を hash 化、transport.db を作成して~のやつです。)

 

例えば以下の設定であれば、”table type が hash の lookup table 「/etc/postfix/transport.db」に、transport_maps に必要な配送ルールを記載する”
ということですね。

transport_maps = hash:/etc/postfix/transport

 

詳しくは コミュニティのドキュメントをご参照ください。
https://www.postfix.org/DATABASE_README.html#intro

 

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

今回は inline と randmap について動作を確認していきます。

 

因みに、使っている Postfix がどの lookup table をサポートしているかは postmap コマンドの “-m” で確認できます。

# postconf -m
btree
cidr
environ
fail
hash
inline
internal
memcache
nis
pipemap
proxy
randmap
regexp
socketmap
static
tcp
texthash
unionmap
unix

 

inline

  • main.cf に直接定義するための基本的なテーブル
  • {} 囲みでルールを設定する
  • 複数ルールを定義する場合、半角スペースかカンマ(,)で区切る

「特定ドメイン宛のメールのリレー先を 、IP アドレスで指定する」というケースを想定します。

従来の設定方法であれば、以下のように /etc/postfix/transport にルールを記載して、その table type (hash) と定義ファイル (/etc/postfix/transport) を 設定する必要がありました。

 

/etc/postfix/transport

transport.example.com smtp:[xxx.xxx.xxx.xxx]
transport2.example.com smtp:[yyy.yyy.yyy.yyy]
# postmap /etc/postfix/transport

/etc/postfix/main.cf

transport_maps = hash:/etc/postfix/transport

 

上記では「transport.example.com」宛のメールを IP「xxx.xxx.xxx.xxx」へ、「transport2.example.com」宛のメールを IP「yyy.yyy.yyy.yyy」へ配送するように設定している訳ですが、ルールを 1つか2つ程度定義するのに、main.cf とは別に /etc/postfix/transport を編集しないといけないのでは少々面倒です。

 

inline テーブルを使用して同じルールを定義すると以下のようになります。

/etc/postfix/main.cf

transport_maps = inline:{transport.example.com=smtp:[xxx.xxx.xxx.xxx], transport2.example.com=smtp:[yyy.yyy.yyy.yyy]}

 

これだけです。

postmap コマンドを使った .db ファイル作成も必要ありません (main.cf の再読み込みは必要ですが)。

 

randmap

  • ランダムに選択されるルールを定義する
  • inline 同様、main.cf に直接定義することが可能
  • {} 囲みでルールを設定する
  • 複数ルールを定義する場合、半角スペースかカンマ(,)で区切る

「メール送信時に使用する smtp サービスをランダムに選択する」というケースを想定します。

randamap テーブルを使用して定義すると以下のようになります。

 

①master.cf に smtp サービス「relay1」「relay2」「relay3」を定義

master.cf

relay1    unix  -       -       n       -       -       smtp
        -o smtp_helo_name=relay1.example.com
        -o syslog_name=relay1
relay2    unix  -       -       n       -       -       smtp
        -o smtp_helo_name=relay2.example.com
        -o syslog_name=relay2
relay3    unix  -       -       n       -       -       smtp
        -o smtp_helo_name=relay3.example.com
        -o syslog_name=relay3

 

②main.cf に sender_dependent_default_transport_maps を使って、relay1 ~ relay3 をリスト

main.cf

sender_dependent_default_transport_maps = randmap:{relay1:[xxx.xxx.xxx.xxx],relay2:[yyy.yyy.yyy.yyy],relay3:[zzz.zzz.zzz.zzz]}

※「sender_dependent_default_transport_maps 」は  transport(5) ではなく、default_transport の構文に則る点に注意してください。

 

上記の設定で、smtp サービス「relay1」「relay2」「relay3」のいずれかをランダムに選択して、[xxx.xxx.xxx.xxx]、[yyy.yyy.yyy.yyy]、[zzz.zzz.zzz.zzz] 宛にリレーします。

(relay1 が選択されれば [xxx.xxx.xxx.xxx] へ、relay2 が選択されれば [yyy.yyy.yyy.yyy] へ…)

 

最後に

残りの 「pipemap」「unionmap」テーブルについても順次まとめていきます。

アバター画像
About サイオステクノロジーの中の人 4 Articles
サイオステクノロジーで働く中の人です。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

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

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


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



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

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる