前回インストールが完了したFDSですが、
必要なエントリ
まずはユーザエントリに必要な属性を改めてまとめてみますので、
メールアドレス | Postfixのメール配送に使用される。 またSMTP AuthやPOP3のログインIDとして用いる |
---|---|
パスワード | 各サービス用のパスワード |
メールボックスパス | Postfixがメールを保存するために使用 |
Dovecotがメールにアクセスするために使用 | |
転送先アドレス | Postfixが転送用として使用 |
メールグループを追加
お気づきかもしれませんが、ou=People,dc=bluecoara,dc=net
やou=Groups,dc=bluecoara,dc=net
というツリーは、
% ldapsearch -x -D "cn=Directory Manager" -w dssecret -b "ou=People,dc=bluecoara,dc=net" "objectClass=*" # People, bluecoara.net dn: ou=People, dc=bluecoara, dc=net objectClass: top objectClass: organizationalunit ou: People
デフォルトで存在するou=People,dc=bluecoara,dc=net以下にメール用のエントリを登録しても良いのですが、
次に画面左側のツリーより


このようにして登録したデータは管理コンソールから確認することができますが、
% ldapsearch -x -D "cn=Directory Manager" -w dssecret -b "ou=Mail,dc=bluecoara,dc=net" "objectClass=*" # Mail, bluecoara.net dn: ou=Mail,dc=bluecoara, dc=net ou: Mail description: Postfix/Dovecot objectClass: top objectClass: organizationalunit
もちろん管理コンソールを使わず、
% ldapadd -x -D "cn=Directory Manager" -w dssecret <<EOF dn: ou=Hoge,dc=bluecoara, dc=net ou: Hoge objectClass: top objectClass: organizationalunit EOF adding new entry "ou=Hoge,dc=bluecoara, dc=net"
% ldapdelete -x -D "cn=Directory Manager" -w dssecret "ou=Hoge,dc=bluecoara,dc=net"
メールユーザの追加
メールデータ用の親ツリーが完成したら、

図7のスクリーンショットからわかるように、
たとえばこのユーザの携帯電話番号を登録したい場合、
転送メールアドレスはどの属性に保存する?
前述のように、
FDSにおけるスキーマファイルは/etc/
いずれかの方法を使って独自スキーマを登録したいところですが、
これらは元々商用システムであったSun Java System Messaging Serverなどで用いられていた属性です。スキーマディレクトリの中にある50ns-mail.
attributeTypes: (
2.16.840.1.113730.3.1.17
NAME ( 'mailForwardingAddress' )
DESC 'Netscape Messaging Server 4.x defined attribute'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
X-ORIGIN 'Netscape Messaging Server 4.x'
)
objectclasses: (
2.16.840.113730.3.2.37
NAME 'nsMessagingServerUser'
DESC ''
SUP top AUXILIARY MUST ( objectClass )
MAY ( cn $ mailAccessDomain $ mailAutoReplyMode $ mailAutoReplyText $
mailDeliveryOption $ mailForwardingAddress $ mailMessageSt ore $
mailProgramDeliveryInfo $ mailQuota $ nsmsgDisallowAccess $
nsmsgNumMsgQuota $ nswmExtendedUserPrefs $ vacationstart date $ vacationenddate )
X-ORIGIN 'Netscape Messaging Server 4.x'
)
このファイルはLDIF形式になっているものの、
- 注)
- ※homeDirectory属性を用いる方法もありますが、
homeDirectory属性を使うためにはposixAccountオブジェクトクラスやuidNumber属性など、 いろいろなMUST属性を登録しなければならないので面倒なのです。
したがって、
dn: uid=HNAKAMITSU,ou=Mail,dc=bluecoara, dc=net
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetorgperson
objectClass: mailRecipient
mail: [email protected]
uid: HNAKAMITSU
givenName: Hideo
sn: NAKAMITSU
cn: Hideo NAKAMITSU
userPassword: {SSHA}tTyYPQIq9ZDzoCDnAiLZaXvs2zA3Cc0B
mailForwardingAddress: [email protected]
mailMessageStore: /home/mail/bluecoara.net/hnakamitsu
登録にはldapaddコマンドを使います。古い情報が保存されている場合は削除しておいてください。
% ldapdelete -x -D "cn=Directory Manager" -w dssecret "uid=HNAKAMITSU,ou=Mail,dc=bluecoara, dc=net " % ldapadd -x -D "cn=Directory Manager" -w dssecret -f hnakamitsu.ldif
userPassword属性に用いる値ですが、
単体テスト
ユーザの登録が完了しましたので、
まずはPostfixを使用せず、
% ldapsearch -x -b "dc=bluecoara,dc=net" "[email protected]" "mailMessageStore" # HNAKAMITSU, Mail, bluecoara.net dn: uid=HNAKAMITSU,ou=Mail,dc=bluecoara, dc=net mailMessageStore: /home/mail/bluecoara.net/hnakamitsu
このように、
Postfixの設定
前置きが長くなりましたが、
# Postfixで管理するバーチャルドメイン
virtual_mailbox_domains = bluecoara.net, example.co.jp
# LDAPからホームディレクトリを取得する場合のベースディレクトリ
# 通常、セキュリティ上の理由から設定した方が良いが、今回は属性の値をそのまま使うため/と設定
virtual_mailbox_base = /
# メールアドレスとメールボックスを対応させるためのLDAP設定ファイル
virtual_mailbox_maps = ldap:/etc/postfix/vmailbox.cf
# メールファイルを保存する場合の最小UID
virtual_minimum_uid = 5000
# メールファイルの所有者、グループ(5000という固定設定)
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
# LDAPサーバのアドレス
server_host = localhost
# 検索ベース
search_base = dc=bluecoara,dc=net
# 検索フィルタ(%sがメールアドレスに置き換わる)
query_filter = mail=%s
# 検索後に取得する属性
result_attribute = mailMessageStore
# 属性取得後に文字列の後ろに/Maildir/という文字を付加することでメールを
# ホームディレクトリ/Maildir/以下に保存するようにする
result_filter = %s/Maildir/
今回main.
以上の設定が完了したら、
# mkdir /home/mail # chown 5000:5000 /home/mail
# postfix reload
続けてLDAP内のアカウントにメールを送信し、
#!/bin/sh
ADDR=$1
nc localhost 25 <<EOF
HELO foo
MAIL FROM: <[email protected]>
RCPT TO: <$ADDR
DATA
From: <[email protected]>
To: <$ADDR>
Subject: test
test
.
QUIT
EOF
% ./send.sh [email protected]
Aug 17 02:15:24 cos5a postfix/smtpd[2767]: connect from cos5a[127.0.0.1]
Aug 17 02:15:24 cos5a postfix/smtpd[2767]: EF2ED14C7F6: client=cos5a[127.0.0.1]
Aug 17 02:15:24 cos5a postfix/cleanup[2770]: EF2ED14C7F6: message-id=<[email protected]>
Aug 17 02:15:25 cos5a postfix/qmgr[2737]: EF2ED14C7F6: from=<[email protected]>, size=344, nrcpt=1 (queue active)
Aug 17 02:15:25 cos5a postfix/smtpd[2767]: disconnect from cos5a[127.0.0.1]
Aug 17 02:15:25 cos5a postfix/virtual[2771]: EF2ED14C7F6: to=<[email protected]>, relay=virtual, delay=0.06, delays=0.04/0/0/0.03, dsn=2.0.0, status=sent (delivered to maildir)
Aug 17 02:15:25 cos5a postfix/qmgr[2737]: EF2ED14C7F6: removed
最後に、
図13 findコマンドによるメールの確認
% find /home/mail /home/mail /home/mail/bluecoara.net /home/mail/bluecoara.net/hnakamitsu /home/mail/bluecoara.net/hnakamitsu/Maildir /home/mail/bluecoara.net/hnakamitsu/Maildir/tmp /home/mail/bluecoara.net/hnakamitsu/Maildir/new /home/mail/bluecoara.net/hnakamitsu/Maildir/new/1218906925.V802Ifd47M14946.cos5a /home/mail/bluecoara.net/hnakamitsu/Maildir/cur
このように、
まとめ
今回はLDAPとPostfixの基本的な連携を紹介しました。Postfixにはルックアップテーブルと呼ばれる機能があり、
hash:ファイル名
という設定を
ldap:LDAP設定ファイル
と書き換えることで、
- 注)
- ※ただし、
メールとはストリーミング放送のようにリアルタイム性が要求されるプロトコルでもないため、 それほど問題にはなりません。もしもこれがボトルネックになるようであれば、 LDAP内のデータを元に日々ハッシュファイルを作成するようなスクリプトを組む方法が考えられます。
次回はPostfixと転送アドレスの連携、