LDAP認証用sendmail.mcの記述方法


LDAP仕様でビルドされたsendmailで、メールルーティングおよびエリアスの制御にLDAPを利用する際のsendmail.mcへの記述事項をまとめました。

sendmailのLDAP対応機能

メールルーティング

sendmailに実装されたメールルーティングの機能は、IETF Internet Draft LDAP Schema for Intranet Mail Routing (draft-lachman-laser-ldap-mail-routing-01).にもとづくもので、LDAPサーバが提供する情報に基づき、着信したメールのあて先アドレス(mailRoutingAddress)から、その着信者が所属するメールホスト(mailHost)と、そのメールホストにおける着信者のメールアドレス(mailLocalAddress)を割り出し、同一ドメインにおける複数のメールホスト間のメールの配信ルートを管理するものです。メールルーティングは、ログインアカウントのUIDが社員コード(例: H16032002)で、このUIDとはことなるユーザ名(例: [email protected])のメールアドレスを管理しなければならないような場合に便利です。

エイリアス

メールエイリアスを、LDAP参照による管理を設定することができます。

各種マップ

access, virtusertable, malertableその他、ハッシュマップ形式のファイルで定義可能なものは、ldap参照にすることができます。

メールアカウントの管理について

sendmailはメールアカウントの認証をホストのログインアカウントの流用で行っており、Postfixがサポートしているような仮想メールアカウントの機能を備えていないため、メールアカウントをLDAP参照にするのはpam_ldap等を使用してホストのログインアカウントをldap参照とし、これを流用するという方法による間接的な対応となります。

sendmail.mcへの記述

LDAPによるメールルーティングの使用を宣言する

FEATURE(`ldap_routing’)dnl

上記の宣言の書式は、lachman-laserのドラフトに提案されているLDAPスキーマの利用が前提です。lachman-laserのスキーマは、PersonにinetLocalMailRecipientというObjectClassを与え、そのアトリビュートとしてmailRoutingAddress, mailHost, mailLocalAddressを定義するものです。既存の他のスキーマを利用する場合は、パラメータを追加してクエリを独自定義することも可能です(詳細は、sendmailソースコード付属のドキュメント(cf/README)またはsendmail.orgのホームページの解説を参照)。

参考:スキーマファイル sendmail.schemaはsendmailソースコードに付属しています(cf/sendmail.schema)。

LDAPサーバアクセス用デフォルト設定を定義する

define(confLDAP_DEFAULT_SPEC, `-h 127.0.0.1 -b “dc=eis,dc=co,dc=jp”  
   -d “cn=diradmin,dc=eis,dc=co,dc=jp” -l 5 -M simple -P /etc/mail/secret -s sub’)dnl

上記の例は、最も簡単な例です。実際には、TLS等によりLDAP参照トラフィックを暗号化するのが安全です。ここでは、簡単な例にとどめておきます。

主なパラメータは以下のとおりです。

-h LDAPサーバのIPアドレスまたはFQDN
-b 検索の対象となる基底
-d 接続に使用するldapアカウントのdn
-M LDAPサーバの認証メソッド (上記の例では平文のパスワードによる認証)
-P LDAPサーバの認証パスワードを記述したファイルのパス
-s 検索を再帰的に行うかどうかの指定。例(sub)では、-bで指定された階層下のすべての階層についてユーザの検索が行われる。

エイリアス設定の定義

エイリアスに関する定義(defind(`ALIAS_FILE’)のパラメータにLDAPサーバアクセスとクエリの定義を加えることにより、LDAPサーバの情報を元ににしたエイリアス配信を行うことができます。以下の例では、従来のhashマップ(/etc/mail/aliases, /etc/mail/aliases.db)とLDAPとを併用しています。

define(`ALIAS_FILE’,`ldap:-b “dc=eis,dc=co,dc=jp”
-k (&(objectCLass=sendmailMTAAliasObject)(sendmailMTAAliasGrouping=aliases)
(sendmailMTAHost=somehost.somedomain.com)(sendmailMTAkey=%0))
-v sendmailMTAAliasValue,
/etc/mail/aliases’)dnl

“-k”以降がLDAPクエリのフィルタ条件を記述した部分です。-v 以下はクエリの結果として値を参照するアトリビュートを指定するもので、転送先アドレスを定義する通常sendmailMTAAliasValueを指定します。

m4マクロプロセッサとsendmail.mcによるsendmail.cfの生成方法はsendmailのヴァージョン、ポーティング等によりことなりますので、使用するsendmailの実装状態をチェックしてください。

LDAPサーバ側の設定

“sendmailMTAAliasObject”,”sendmailMTAAliasGrouping”等のobjectClassやアトリビュートはsendmailに付属しているsendmail.schemaファイルのスキーマ定義で定義されたものです。sendmail.schemaファイルはあらかじめOpenLDAPのスキーマファイルディレクトリ(通常/etc/openldap/schemasまたは/usr/local/openldap/schemaディレクトリ以下)にコピーし、OpenLDAPのサーバサービスを再起動しておきます。
エイリアスは以下例のようなオブジェクトとしてLDAPディレクトリツリーに登録します。

dn: sendmailMTAkey=n1998111.ou=mailaliases,dc=eis,dc=co,dc=jp
objectClass: sendmailMTA
objectClass: sendmailMTAAlias
objectClass: sendmailMTAAliasObject
sendmailMTAKey: n1998111
sendmailMTAAliasValue: n1998111
sendmailMTAAliasValue: [email protected]
sendmailMTAAliasValue: [email protected]
sendmailMTAAliasGrouping: aliases
sendmailMTAHost: mailhost.eis.co.jp

上記のLDAPディレクトリでのエイリアス定義は、/etc/mail/aliasesファイルで以下のようにマップ定義するのと等価です。

主なアトリビュートの意味は以下のとおりです。

sendmailMTAKey エイリアス名
sendmailMTAAliasValue エイリアスに対する転送先のメールアドレス
このアトリビュートは複数指定可能。各転送先を上記の例のように複数指定する。
上記の例では、ローカルアカウント n1998111宛てのメールは、[email protected], [email protected]にも転送される。また、n1998111のメールボックスにもローカル配信される
sendmailMTAHost このエイリアス定義を使用するホスト