2008.05.29 Thursday
openLDAP 構築(51) - メール管理(バーチャルエイリアス、バーチャルドメイン(2) )
バーチャル・ドメインによる転送
「virtual_alias_domains」 と 「virtual_alias_maps」 の情報を、LDAP から取り出して転送する方法を説明します。
- main.cf に、以下を追加します。
virtual_alias_domains = ldap:/usr/local/etc/postfix/ldap_valias_domains.cf virtual_alias_maps = ldap:/usr/local/etc/postfix/ldap_valias_maps.cf
- ldap_valias_domains.cf を作成します。
[root]# vi /usr/local/etc/postfix/ldap_valias_domains.cf server_host = localhost server_port = 389 search_base = ou=Mail,dc=examples,dc=com query_filter = (mail=%s) result_attribute = mailDomain version = 3
- ldap_valias_maps.cf を作成します。
[root]# vi /usr/local/etc/postfix/ldap_valias_maps.cf server_host = localhost server_port = 389 search_base = ou=Mail,dc=examples,dc=com query_filter = (mail=%s) result_attribute = mailAlias version = 3
- postfix を再起動します。
[root]# /etc/rc.d/init.d/postfix restart Shutting down postfix: [ OK ] Starting postfix: [ OK ]
- 「postLdapAdmin.schema」 に、ドメイン用の object を追加します。
[root]# cd /usr/local/etc/openlcap/schema [root]# cp postLdapAdmin.schema postLdapAdmin2.schema [root]# vi postLdapAdmin2.schema (赤字の部分を追加) # # postLdapAdmin directory schema # # # Attribute Type Definitions # attributetype ( 1.3.6.1.4.1.15774.1.10.1.2.1 NAME 'quotaSize' DESC 'quota size' EQUALITY octetStringMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.40{32} SINGLE-VALUE ) attributetype ( 1.3.6.1.4.1.15774.1.10.1.2.2 NAME 'mailAlias' DESC 'mail alias' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) attributetype ( 1.3.6.1.4.1.15774.1.10.1.2.3 NAME 'mailDirectory' DESC 'mail directory' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} SINGLE-VALUE ) attributetype ( 1.3.6.1.4.1.15774.1.10.1.2.4 NAME 'mailForwardingAddr' DESC 'mail forwarding address' EQUALITY octetStringMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.40{256} ) attributetype ( 1.3.6.1.4.1.15953.9.1.101 NAME 'mailDomain' DESC 'mail domain' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) # # Object Class Definitions # objectclass ( 1.3.6.1.4.1.15774.1.10.1.1.1 NAME 'postLdapAdmin' DESC 'postLdapAdmin user' SUP top AUXILIARY MUST ( uid $ mail ) MAY ( userPassword $ quotaSize $ mailAlias $ mailDirectory $ mailForwardingAddr $ mailDomain ) )
- 「slapd.conf」 に以下を追加します。
[root]# vi /usr/local/etc/openldap/slapd.conf #include /usr/local/etc/openldap/schema/postLdapAdmin.schema (この行はコメントアウト) include /usr/local/etc/openldap/schema/postLdapAdmin2.schema (この行を追加)
- 「slapd.conf」 にアクセス制御を追加します(すでに追加済みの場合は不要)。
access to dn.subtree="ou=Mail,dc=examples,dc=com" attrs=userPassword by dn="cn=mailadmin,ou=Mail,dc=examples,dc=com" read by anonymous auth by * none
- slapd を再起動します。
[root]# /etc/rc.d/init.d/slapd restart Stopping slapd Starting slapd
- メール用の ou(organizationalUnit) を追加します(すでに追加済みの場合は不要)。
[root]# vi oudn_mail.ldif dn: ou=Mail,dc=examples,dc=com objectClass: organizationalUnit ou: Mail
[root]# ldapadd -x -W -D "cn=Manager,dc=examples,dc=com" -f ./oudn_mail.ldif Enter LDAP Password: adding new entry "ou=Mail,dc=examples,dc=com"
- メール管理者用の LDIF ファイルを作成します(すでに作成済みの場合は不要)。これは 「ou=Mail」 のサブツリーだけにアクセスさせるために行います。
[root]# vi mail_admin.ldif dn: cn=mailadmin,ou=Mail,dc=examples,dc=com objectClass: inetOrgPerson objectClass: postLdapAdmin sn: mailadmin cn: mailadmin uid: mailadmin userPassword: {MD5}5XR2gvum3iWh9L8W5h0V1g== mail: mailadmin@test15.examples.net mailDirectory: /home/mail
- エントリーを追加します(すでに追加済みの場合は不要)。
[root]# ldapadd -x -W -D "cn=Manager,dc=examples,dc=com" -f ./mail_admin.ldif Enter LDAP Password: adding new entry "cn=mailadmin,ou=Mail,dc=examples,dc=com"
- 以下のような LDIF ファイルを作成します。
[root]# vi mail_muser.ldif dn: cn=muser examples,ou=Mail,dc=examples,dc=com objectClass: inetOrgPerson objectClass: postLdapAdmin sn: muser cn: muser examples uid: muser.examples userPassword: {MD5}VJKW9qrhOmOo3z5IIUSOrg== mail: muser@examples.com mailDirectory: /home/mail/muser/Maildir/ mailDomain: examples.com mailAlias: rider@arinux.jugem.jp
- エントリーを追加します。
[root]# ldapadd -x -W -D "cn=Manager,dc=examples,dc=com" -f ./mail_muser.ldif Enter LDAP Password: adding new entry "cn=muser examples,ou=Mail,dc=examples,dc=com"
- 期待通りに mailDomain と mailAlias の値が引けるかをテストします。
[root]# postmap -q "muser@examples.com" ldap:/usr/local/etc/postfix/ldap_valias_domains.cf examples.com
[root]# postmap -q "muser@examples.com" ldap:/usr/local/etc/postfix/ldap_valias_maps.cf rider@arinux.jugem.jp
mail=%s
- 「ldap_valias_domains.cf」 と 「ldap_valias_maps.cf」 の中で、「query_filter = (mail=%s)」 と記述していますので、
- muser@examples.com の入力値のまま
- LDAP にて mail=muser@examples.com を検索します。
- %u なら 「muser」 のユーザーの部分、
- %d なら 「test15.examples.net」 のドメインの部分が代入されます。
- 「ldap_valias_domains.cf」 と 「ldap_valias_maps.cf」 の中で、「query_filter = (mail=%s)」 と記述していますので、
- メール送信テストをします。
[root]# echo "Alias test 201" | mail -s "test 201" muser@examples.com
- 転送先のメールボックスに届いていることを確認します。
つづく