前回までの設定
前回から少々時間がたってしまいましたので、
- FDSのインストールと初期設定
- メールユーザ用ディレクトリエントリの追加
- Postfix側のvirtual_
mailbox_ maps設定 - テストメールの配送
つまり、
# メールユーザ用トップツリー
dn: ou=Mail,dc=bluecoara,dc=net
ou: Mail
description: Postfix/Dovecot
objectClass: top
objectClass: organizationalunit
# バーチャルドメインユーザ用エントリ
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
# Postfixで管理するバーチャルドメイン
# 宛先がこれ以外のドメイン名であれば、MX検索より外部に配送する。
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
リスト3 /etc/
# LDAPサーバのアドレス
server_host = localhost
# 検索ベース
search_base = dc=bluecoara,dc=net
# 検索フィルタ(%sがメールアドレスに置き換わる)
query_filter = (mail=%s)
# 検索後に取得する属性
result_attribute = mailMessageStore
# 属性取得後に文字列の後ろに/Maildir/という文字を付加することでメールを
# ホームディレクトリ/Maildir/以下に保存するようにする
result_filter = %s/Maildir/
転送設定
Mail属性として登録されているhnakamitsu@bluecoara.
内容はシンプルで、
# メール転送用
virtual_alias_maps = ldap:/etc/postfix/forward.cf
server_host = localhost
search_base = dc=bluecoara,dc=net
query_filter = (mail=%s)
result_attribute = mail, mailForwardingAddress
設定が終わったら、
バーチャルドメイン設定
ここで、
dn: ou=Mail,dc=bluecoara,dc=net
の中に保存しておくことにします。ドメイン名を格納する属性名ですが、
修正前
virtual_mailbox_domains = bluecoara.net, example.co.jp
修正後
virtual_mailbox_domains = ldap:/etc/postfix/domains.cf
server_host = localhost
search_base = dc=bluecoara,dc=net
# 該当するドメイン名が見つかった場合は、バーチャルドメインとして扱う
query_filter = (mailAccessDomain=%s)
# なんでも良いので、適当な値を返すようにする
result_attribute = ou
# パフォーマンスを考慮し、子ツリー以下は検索しない
scope = one
これにあわせて、
% ldapmodify -x -D "cn=Directory Manager" -w dssecret << EOF
dn: ou=Mail,dc=bluecoara,dc=net
changetype: modify
add: objectClass
objectClass: mailRecipient
-
add: mailAccessDomain
mailAccessDomain: bluecoara.net
mailAccessDomain: example.co.jp
EOF
以上の設定を行うことにより、
もし管理対象のメールサーバに複数のドメイン名がない場合や、
SMTP Authの設定
これまでの設定により、
このための送信用ポートを587/
SendmailやPostfixなど、
2003年の
saslauthdとldapdbの認証経路の違いは次の通りです。


このように、
SASLプロキシ認証では、
dn: uid=HNAKAMITSU,ou=Mail,dc=bluecoara,dc=net
userPassword: hnakamitsu
の認証を行う場合に、
uid=proxyuser,ou=Mail,dc=bluecoara,dc=net
といった認証代行用のDNでディレクトリサーバへの接続を行い、
SASL proxy authorization is not supported in Directory Server; therefore, the server will ignore any SASL authzid supplied by the client.
とあります。したがって、
機会があればいつかOpenLDAP+ldapdbという組み合わせも紹介するかもしれません。
giengerldapプラグインの活用
前述のように、
このプラグインはPascal Gienger氏によって作成、
プラグインビルドのためには、
# rpm -i cyrus-sasl-2.1.22-4.src.rpm # cd /usr/src/redhat/SPECS # rpmbuild -bc cyrus-sasl.spec
以上により、
% tar zxfv giengerldap_auxprop-1.2.1.tar.gz % cd giengerldap-1.2.1
ソースファイルを展開したら、
CYRUSSASLPATH=/var/home/pascal/src/cyrus-sasl-2.1.22
↓
CYRUSSASLPATH=/usr/src/redhat/BUILD/cyrus-sasl-2.1.22/build-shared
次にcompileスクリプトを実行しますが、
% ./compile
(sasl.hなどのヘッダファイルが見つからないというエラーが表示されるので、手動でmake)
% make CFLAGS+="-I/usr/src/redhat/BUILD/cyrus-sasl-2.1.22/include -I/usr/src/redhat/BUILD/cyrus-sasl-2.1.22/plugins"
# make install
以上の操作で、
PostfixのSMTP Auth設定
まずは送信専用となる587/
submission inet n - n - - smtpd
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
main.
# メールサーバが所属するネットワーク
mynetworks = 127.0.0.0/8, 10.0.100.0/24
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject
Cyrus-SASLの設定
Postfixは認証時にSASLライブラリを使用しますが、
% strings /usr/lib/libsasl2.so | less
などとして、
では、
# プラグインの定義
auxprop_plugin: giengerldap
# LDAPサーバの場所
gl_uri: ldap://localhost
# バインドDN、パスワード
gl_binddn: cn=Directory Manager
gl_bindpw: dssecret
# 検索ベース
gl_basedn: dc=bluecoara,dc=net
# 検索フィルタ。メールアドレスをSMTP Auth時のユーザ名とする
gl_search: (mail=%s)
# 認証方式の定義
mech_list: LOGIN PLAIN CRAM-MD5 DIGEST-MD5
次に、
userPassword: hnakamitsu
userPassword: {CLEAR}hnakamitsu
のような平文状態に変更してください。システム全体で平文パスワードを保存したい場合には、
以上でSMTPサーバの設定が完了しました!
まとめ
今回はLDAP認証のためにgiengerldapを紹介しましたが、
方式 | 特徴 | 必要な設定 |
---|---|---|
saslauthd+ldap | SASLライブラリはsaslauthdとプロセス間中心。saslauthdデーモンがLDAPサーバへの問い合わせを行う。仕組み上、 | saslauthdの設定と起動 |
saslauthd+pam+ldap | SASLライブラリはsaslauthdとプロセス間中心。saslauthdデーモンはPAMライブラリと会話。PAMライブラリがLDAPサーバへの問い合わせを行う。仕組み上、 | saslauthdの設定と起動、 |
ldapdb | SASLライブラリが直接LDAPサーバへの問い合わせを行う。LDAPサーバ側に平文パスワードを登録することで、 | LDAPサーバ側でのSASL認証設定とSASLプロキシ設定、 |
giengerldap | SASLライブラリが直接LDAPサーバへの問い合わせを行う。LDAPサーバ側に平文パスワードを登録することで、 | CRAM-MD5認証などを行うためにディレクトリ内には平文パスワードが必要 |
authdaemond | SASLライブラリはauthdaemondとプロセス間中心。authdaemondデーモンがLDAPサーバへの問い合わせを行う。仕組み上、 | courier-authlibの導入とauthdaemondの起動 |
次回はdovecotを用いてPOP3/