arinux

Linux サーバー設定備忘録
<< openLDAP 構築(51) - メール管理(バーチャルエイリアス、バーチャルドメイン(2) ) | main | openLDAP 構築(53) - メール管理(クォータ管理) >>
openLDAP 構築(52) - メール管理(バーチャルメールボックス)


メモ バーチャル・メールボックスによるローカルへの配信


「virtual_mailbox_domains」 と 「virtual_mailbox_maps」 の情報を LDAP から取り出して、ローカルのメールボックスにメールを格納する方法を説明します。


LDAP によるバーチャルメールボックスの管理


  1. main.cf を編集します。
    [root]# vi /usr/local/etc/postfix/main.cf
    
    alias_maps = hash:/usr/local/etc/postfix/aliases
    (以下の行はコメントアウト)
    #alias_maps = hash:/usr/local/etc/postfix/aliases, ldap:/usr/local/etc/postfix/ldap_aliases.cf
    
    (以下を追加)
    virtual_mailbox_base = /home/mail
    virtual_mailbox_domains = ldap:/usr/local/etc/postfix/ldap_vbox_domains.cf
    virtual_mailbox_maps = ldap:/usr/local/etc/postfix/ldap_vbox_maps.cf
    virtual_minimum_uid = 5000
    virtual_uid_maps = static:5000
    virtual_gid_maps = static:5000
    


  2. ldap_vbox_domains.cf を作成します。
    [root]# vi /usr/local/etc/postfix/ldap_vbox_domains.cf
    
    server_host = localhost
    server_port = 389
    search_base = ou=Mail,dc=examples,dc=com
    query_filter = (|(mail=%s)(objectClass=postLdapAdmin))
    result_attribute = mailDomain
    version = 3
    
    虫眼鏡 query_filter


    • 「query_filter = (objectClass=mailAccount)」 の場合、以下の warning が出ます(maillog に記録)が、メールボックスには届きます(この warning は、postmap 実行時にも出ます)。
      warning: dict_ldap_open: /usr/local/etc/postfix/ldap_vbox_domains.cf:
      Fixed query_filter (objectClass=mailAccount) is probably useless
      


    • 「query_filter = (&(mail=%s)(objectClass=mailAccount))」 の場合、以下のエラーが出て(maillog に記録)、バウンスされます(送信者に戻されます)。
    • 「(mail=%s)」 だけでも同じ。
      to=, relay=none, delay=0.05, delays=0.02/0.02/0/0, dsn=5.4.6, 
      status=bounced (mail for examples.com loops back to myself)
      


    • 「query_filter = (|(mail=%s)(objectClass=postLdapAdmin))」 の場合は、エラーは発生せず、正常にメールボックスにも届きます。以下は、この場合の maillog に書かれるログの一部。
      to=, relay=virtual, delay=0.04, delays=0.02/0.01/0/0.01, dsn=2.0.0, 
      status=sent (delivered to maildir)
      


  3. ldap_vbox_maps.cf を作成します。
    [root]# vi /usr/local/etc/postfix/ldap_vbox_maps.cf
    
    server_host = localhost
    server_port = 389
    search_base = ou=Mail,dc=examples,dc=com
    query_filter = (mail=%s)
    result_attribute = mailDirectory
    version = 3
    


  4. postfix を再起動します。
    [root]# /etc/rc.d/init.d/postfix restart
    Shutting down postfix:                                     [  OK  ]
    Starting postfix:                                          [  OK  ]
    


  5. 「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 ) )
    


  6. 「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  (この行を追加)
    


  7. 「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
    


  8. slapd を再起動します。
    [root]# /etc/rc.d/init.d/slapd restart
    Stopping slapd
    Starting slapd
    


  9. メール用の 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"
    


  10. メール管理者用の 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
    


  11. エントリーを追加します(すでに追加済みの場合は不要)。
    [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"
    


  12. 以下のような LDIF ファイルを作成します。
    [root]# vi vbox_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.examples/Maildir/
    mailDomain: examples.com
    


  13. エントリーを追加します。
    [root]# ldapadd -x -W -D "cn=Manager,dc=examples,dc=com" -f ./vbox_muser.ldif
    Enter LDAP Password:
    adding new entry "cn=muser examples,ou=Mail,dc=examples,dc=com"
    


  14. 期待通りに mailDomain と mailDirectory の値が引けるかをテストします。
    [root]# postmap -q "muser@examples.com" ldap:/usr/local/etc/postfix/ldap_vbox_domains.cf
    examples.com
    
    [root]# postmap -q "muser@examples.com" ldap:/usr/local/etc/postfix/ldap_vbox_maps.cf
    /home/mail/muser.examples/Maildir/
    


  15. メール送信テストをします。
    [root]# echo "Virtula mailbox test 301" | mail -s "test 301" muser@examples.com
    


  16. ローカルのメールボックスに届いていることを確認します。



つづく

| arinux | openldap | 10:20 | comments(0) | trackbacks(0) | pookmark |









http://arinux.net/trackback/70
1234567
891011121314
15161718192021
22232425262728
2930     
<< April 2018 >>
+ SELECTED ENTRIES
+ RECENT COMMENTS
+ RECENT TRACKBACK
+ CATEGORIES
+ ARCHIVES
+ 掲載予定のタイトル
  • Wordpress
  • Pukiwiki
  • SMTPs/POPs/IMAPs
  • fml
  • Tips
+ CSS Nite
+ MOBILE
qrcode
+ LINKS
+ RECOMMEND
+ PROFILE