ダイレクト LDAP を使用してアドレスリバースを実行するには、まず、USE_REVERSE_DATABASE の値を 4 に設定します。これによってリバースデータベースの使用が無効になります。また、sleepycat データベースは推奨されなくなったため、IMTA_TABLE:reverse.txt ファイルを読み取るように USE_TEXT_DATABASES を設定してください。その後、前述したルーティング機能を使用します。以前のバージョンでは、次の形式のリバース URL の指定からアドレスリバースが開始されました。
REVERSE_URL=ldap:///$V?mail?sub?$Q
$V メタキャラクタについては、すでにエイリアス URL の関連で説明したとおりです。ただし、$Q メタキャラクタは、エイリアス URL で使用される $R メタキャラクタと非常によく似ていますが、アドレスリバース専用に使用されます。$R とは異なり、$Q では、アドレスリバースの候補であるアドレスを含んでいる属性を検索するフィルタが生成されます。検索対象になる属性のリストは、MTA オプション LDAP_MAIL_REVERSES で指定します。このオプションが設定されていない場合は、local.imta.schematag configutil パラメータが調べられ、その値に応じて適切なデフォルト属性のセットが選択されます。
どのような理由であれ、REVERSE_URL を変更することは推奨されません。
表 9–10 に、local.imta.schematag の値と選択されるデフォルト属性を示します。
表 9–10 local.imta.schematag の値と属性
スキーマタグ値 |
属性 |
---|---|
sims40 |
mail,rfc822mailalias |
nms41 |
mail,mailAlternateAddress |
ims50 |
mail,mailAlternateAddress |
ただし、$Q の使用は、現在は不適切になっています。メッセージの取得やその他の機能を正しく実行するために、アドレスリバースの機能は向上されており、一致があるという事実に加えて、一致した属性に注意を払うようになっています。つまり、$Q の代わりに $R を使用してフィルタを指定する必要があります。また、$N メタキャラクタが追加されていますが、これはアドレスリバース対象の属性のリストを返します。
$N の値は正確に制御できません。この値は、MTA 独自のハードコードされた (および変更される可能性のある)、アドレスリバース用関連属性のリストから構築されます。グローバルな MTA オプションである各種の LDAP_* を使用して、MTA がそれらの属性の名前であるとみなしている対象を変更すると、実際には異なる属性を LDAP から取得します。しかし、それらの属性は常に、MTA の関連属性の概念に意味的には対応している属性となります。それらの属性は次のとおりです。LDAP_CAPTURE (デフォルトなし)、LDAP_RECIPIENTLIMIT (デフォルトなし)、LDAP_RECIPIENTCUTOFF (デフォルトなし)、LDAP_SOURCEBLOCKLIMIT (デフォルトなし)、 LDAP_SOURCE_CHANNEL (デフォルトなし)、LDAP_PERSONAL_NAME (デフォルトなし)、LDAP_SOURCE_CONVERSION_TAG (デフォルトなし)、LDAP_PRIMARY_ADDRESS (mail)、LDAP_ALIAS_ADDRESSES ( mailAlternateAddress)、LDAP_EQUIVALENCE_ADDRESSES ( mailEquivalentAddress)、および LDAP_SPARE_* の各属性。
結果のオプション値は、次のとおりです。
REVERSE_URL=ldap:///$V?$N?sub?$R
local.imta.schematag はコンマ区切りのリストにできます。複数のスキーマがサポートされている場合は、組み合わせて重複を削除した属性のリストが使用されます。
また、フィルタは、最初に指定されたアドレスを検索するだけではなく、同じローカル部分を持ちながらドメインツリーで実際に見つかったドメインを含むアドレスも検索します。このドメインは 「9.1.1.1 書き換えルールの機能」の手順 2 で保存されたものです。ドメインツリー検索の反復性は、この 2 つのアドレスが異なる可能性があることを意味します。
たとえば、ドメイン siroe.com がドメインツリーに存在し、MTA によって次のアドレスが認識されたと仮定します。
u@host1.siroe.com
$R および ims50 スキーマタグの展開の結果から得られるフィルタは、次のようになります。
(|(mail=u@siroe.com) (mail=u@host1.siroe.com) (mailAlternateAddress=u@siroe.com) (mailAlternateAddress=u@host1.siroe.com) (mailEquivalentAddress=u@siroe.com) (mailEquivalentAddress=u@host1.siroe.com)) |
リバース検索では複数の属性が返されるため、MTA では、メール属性 (正確には、LDAP_PRIMARY_ADDRESS という属性) をアドレスリバース用の属性として使用することを認識しています。mailEquivalentAddress (正確には LDAP_EQUIVALENCE_ADDRESSES という属性) も許可されていることに注意してください。
URL が構築された後、LDAP 検索が実行されます。検索が成功した場合、LDAP は複数の属性を基本的には任意の順序で返します。検索が失敗した場合、またはエラーが発生した場合は、元のアドレスは変更されません。
アドレスリバース処理が実行される頻度、特にメッセージヘッダーに表示されるアドレスの数および必要なディレクトリ照会による負担を考慮すると、否定的な結果と肯定的な結果の両方をキャッシュする必要があります。これは、開鎖型の、動的に拡張されたメモリー内ハッシュテーブルを使用して実装します。キャッシュの最大サイズは REVERSE_ADDRESS_CACHE_SIZE MTA オプションで設定します (デフォルトは 100000)。キャッシュ内のエントリのタイムアウトは REVERSE_ADDRESS_CACHE_TIMEOUT MTA オプションで設定します (デフォルトは 600 秒)。実際は、キャッシュにはアドレス自体が保存され、LDAP URL や LDAP 結果は保存されません。