arinux

Linux サーバー設定備忘録
openLDAP 構築(56) - LDAP sdb back-end for BIND9 (3)


メモ LDAP による zone 検索の設定


  1. https://cvs.bayour.com/cgi-bin/cvsweb/bind9-ldap/schema/dnszone-schema.txt から、
    「dnszone-schema.txt」 をダウンロードして、「/usr/local/etc/openldap/schema」 に置きます。


  2. schema のファイル名を変更します。
    [root]# cd /usr/local/etc/openldap/schema
    [root]# mv dnszone-schema.txt dnszone.schema
    


  3. slapd.conf に以下を追加します。
    [root]# cd /usr/local/etc/openldap
    [root]# vi slapd.conf
    
    include         /usr/local/etc/openldap/schema/dnszone.schema
    


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


  5. 「master.conf」 を、以下のように書き換えます。
    [root]# cd /usr/local/bind9/etc
    [root]# vi master.conf
    
    #zone "examples.com" in { type master; file "zone/examples.com"; };
    #zone "test15.examples.com" in { type master; file "zone/test15.examples.com"; };
    
    zone "examples.com" in {
         type master;
         database "ldap ldap://127.0.0.1/ou=examples.com,ou=dns,dc=examples,dc=com 86400";
    };
    
    # サブドメインに対する zone 指定は記述しません。
    


  6. DNS 用の ou(organizationalUnit) の LDIF ファイルを作成して、エントリーを追加します。
    [root]# cd <任意のディレクトリ>
    [root]# vi oudn_dns.ldif
    
    dn: ou=dns,dc=examples,dc=com
    objectClass: organizationalUnit
    ou: dns
    
    [root]# ldapadd -x -W -D "cn=Manager,dc=examples,dc=com" -f ./oudn_dns.ldif
    Enter LDAP Password:
    adding new entry "ou=dns,dc=examples,dc=com"
    


  7. examples.com の zone に対する LDIF ファイルを作成して、エントリーを追加します。
    [root]# cd <任意のディレクトリ>
    [root]# vi zone_examples.com.ldif
    
    dn: ou=examples.com,ou=dns,dc=examples,dc=com
    objectClass: organizationalUnit
    ou: examples.com
    
    dn: relativeDomainName=@,ou=examples.com,ou=dns,dc=examples,dc=com
    objectClass: dNSZone
    relativeDomainName: @
    zoneName: examples.com
    dNSTTL: 86400
    dNSClass: IN
    sOARecord: ns0.examples.com. root.localhost. 2008032401 3600 900 604800 86400
    nSRecord: ns0.examples.com.
    mXRecord: 10 mail.examples.com.
    aRecord: 192.168.1.15
    
    [root]# ldapadd -x -W -D "cn=Manager,dc=examples,dc=com" -f ./zone_examples.com.ldif
    Enter LDAP Password:
    adding new entry "ou=examples.com,ou=dns,dc=examples,dc=com"
    adding new entry "relativeDomainName=@,ou=examples.com,ou=dns,dc=examples,dc=com"
    


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


  9. 正しくゾーン情報が引けるかを確認します。
    [root]# dig @127.0.0.1 examples.com ANY +norec
    
    ; <<>> DiG 9.2.4 <<>> @127.0.0.1 examples.com ANY +norec
    ; (1 server found)
    ;; global options:  printcmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65109
    ;; flags: qr aa; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;examples.com.                  IN      ANY
    
    ;; ANSWER SECTION:
    examples.com.           86400   IN      SOA     ns0.examples.com. root.localhost. 2008032401
     3600 900 604800 86400
    examples.com.           86400   IN      NS      ns0.examples.com.
    examples.com.           86400   IN      MX      10 mail.examples.com.
    examples.com.           86400   IN      A       192.168.1.15
    
    ;; Query time: 2 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Tue Jul  8 17:48:13 2008
    ;; MSG SIZE  rcvd: 135
    


  10. サブドメインの zone に対する LDIF ファイルを作成して、エントリーを追加します。
    [root]# cd <任意のディレクトリ>
    [root]# vi zone_sub_examples.com.ldif
    
    dn: relativeDomainName=test15,ou=examples.com,ou=dns,dc=examples,dc=com
    objectClass: dNSZone
    relativeDomainName: test15
    relativeDomainName: abc
    relativeDomainName: kyt.jpn
    zoneName: examples.com
    aRecord: 192.168.1.15
    mXRecord: 10 test15.examples.com.
    
    [root]# ldapadd -x -W -D "cn=Manager,dc=examples,dc=com" -f ./zone_sub_examples.com.ldif
    Enter LDAP Password:
    adding new entry "relativeDomainName=test15,ou=examples.com,ou=dns,dc=examples,dc=com"
    
    虫眼鏡 relativeDomainName と nSRecord


    • 「relativeDomainName」 は、CNAME(Canonical Name: 別名) と同じ働きをします。但し、「relativeDomainName: @」 に対しては利用できません。
    • サブドメインに対する zone エントリーの中に、「nSRecord」 を含めると、Aレコードや MXレコードが引けなくなります。サブドメインに対しては、上記のように 「nSRecord」 は書きません。


  11. 正しくゾーン情報が引けるかを確認します。
    [root]# dig @127.0.0.1 test15.examples.com ANY +norec
    
    ; <<>> DiG 9.2.4 <<>> @127.0.0.1 test15.examples.com ANY +norec
    ; (1 server found)
    ;; global options:  printcmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58110
    ;; flags: qr aa; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;test15.examples.com.           IN      ANY
    
    ;; ANSWER SECTION:
    test15.examples.com.    86400   IN      A       192.168.1.15
    test15.examples.com.    86400   IN      MX      10 test15.examples.com.
    
    ;; AUTHORITY SECTION:
    examples.com.           86400   IN      NS      ns0.examples.com.
    
    ;; Query time: 6 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Wed Jul  9 10:07:41 2008
    ;; MSG SIZE  rcvd: 87
    
    [root]# dig @127.0.0.1 abc.examples.com ANY +norec
    
    ; <<>> DiG 9.2.4 <<>> @127.0.0.1 abc.examples.com ANY +norec
    ; (1 server found)
    ;; global options:  printcmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38573
    ;; flags: qr aa; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1
    
    ;; QUESTION SECTION:
    ;abc.examples.com.              IN      ANY
    
    ;; ANSWER SECTION:
    abc.examples.com.       86400   IN      A       192.168.1.15
    abc.examples.com.       86400   IN      MX      10 test15.examples.com.
    
    ;; AUTHORITY SECTION:
    examples.com.           86400   IN      NS      ns0.examples.com.
    
    ;; ADDITIONAL SECTION:
    test15.examples.com.    86400   IN      A       192.168.1.15
    
    ;; Query time: 6 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Wed Jul  9 10:08:13 2008
    ;; MSG SIZE  rcvd: 107
    
    [root]# dig @127.0.0.1 kyt.jpn.examples.com ANY +norec
    
    ; <<>> DiG 9.2.4 <<>> @127.0.0.1 kyt.jpn.examples.com ANY +norec
    ; (1 server found)
    ;; global options:  printcmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55153
    ;; flags: qr aa; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1
    
    ;; QUESTION SECTION:
    ;kyt.jpn.examples.com.          IN      ANY
    
    ;; ANSWER SECTION:
    kyt.jpn.examples.com.   86400   IN      A       192.168.1.15
    kyt.jpn.examples.com.   86400   IN      MX      10 test15.examples.com.
    
    ;; AUTHORITY SECTION:
    examples.com.           86400   IN      NS      ns0.examples.com.
    
    ;; ADDITIONAL SECTION:
    test15.examples.com.    86400   IN      A       192.168.1.15
    
    ;; Query time: 11 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Wed Jul  9 10:08:46 2008
    ;; MSG SIZE  rcvd: 111
    



ここまで

| arinux | openldap | 13:29 | comments(0) | trackbacks(0) | pookmark |
openLDAP 構築(55) - LDAP sdb back-end for BIND9 (2)


メモ ネームサーバの設定


  1. 認証キーを作成します。
    [root]# cd /usr/local/bind9/etc
    [root]# mkdir key
    [root]# cd key
    [root]# /usr/local/bind9/sbin/dnssec-keygen -a hmac-md5 -b 512 -n user named
    Knamed.+157+06443
    
    虫眼鏡 オプションの意味
    -a : 暗号化アルゴリズムの指定 
    -b : 鍵のビット数を指定。この場合は、HMAC-MD5の最長である512を指定。 
    -n : 生成した鍵をどのように指定するかを指定(zone、host、extitiy、user)。
    


  2. rndc.conf を作成します。
    [root]# /usr/local/bind9/sbin/rndc-confgen > /usr/local/bind9/etc/rndc.conf
    [root]# vi /usr/local/bind9/etc/rndc.conf
    
    #Knamed.+157+09157.private の key を記述
    key "rndc-key" {
            algorithm hmac-md5;
            secret "e6Yvs5QS78o/XPLWr3vmWXyLHTUj+nDnB6FONnnwxmpERDsVwxrBV0U4LeMYETr+n29P
    ohPoTp0WLtobtIGjuQ==";
    };
    
    options {
            default-key "rndc-key";
            default-server 127.0.0.1;
            default-port 953;
    };
    


  3. named.conf を編集します。
    [root:# cd /usr/local/bind9/etc
    [root]# vi named.conf
    
    #Knamed.+157+09157.key の key を記述
    key "named-key" {
            algorithm hmac-md5;
            secret "m3ALpviCSc16nF4clR+TZkZDUKdvXqsu21RPyEeXhwjeXi4Xq82vEAnSAuRkaT0Kgy
    4NAavkH05tybGL+aotvQ==";
    };
    
    options {
            directory "/usr/local/bind9/var/named";
            query-source address * port 53;
            pid-file "/usr/local/bind9/var/run/named.pid";
    
            allow-query {
                    127.0.0.1;
                    10.1.1.0/24;
            };
            allow-recursion {
                    127.0.0.1;
                    10.1.1.0/24;
            };
            recursion no;
            version "unknown";
    };
    
    controls {
            inet 127.0.0.1 port 953
            allow { 127.0.0.1; } keys { "named-key"; };
    };
    
    zone "." IN {
            type hint;
            file "named.ca";
    };
    
    zone "localhost" IN {
            type master;
            file "localhost.zone";
            allow-update { none; };
    };
    
    zone "0.0.127.in-addr.arpa" IN {
            type master;
            file "localhost.rev";
            allow-update { none; };
    };
    
    include "/usr/local/bind9/etc/master.conf";
    


  4. 最初に作成した認証キーファイルは削除します。
    [root]# ¥rm -rf /usr/local/bind9/etc/key
    


  5. パーミッションを設定します。
    [root]# chmod 640 rndc.conf
    [root]# chmod 640 named.conf
    


  6. master.conf を作成します。まずは、LDAP を利用しない方法でテストをします。
    [root]# vi master.conf
    
    zone "examples.com" in { type master; file "zone/examples.com"; };
    zone "test15.examples.com" in { type master; file "zone/test15.examples.com"; };
    


  7. named.ca を作成します。ftp://ftp.rs.internic.net/domain/ から、
    「named.root」 をダウンロードして、「/usr/local/bind9/var/named」 に置きます。


  8. ファイル名を変更します。
    [root]# cd /usr/local/bind9/var/named
    [root]# mv named.root named.ca
    


  9. 「localhost.zone」 を作成します。
    [root]# cd /usr/local/bind9/var/named
    [root]# vi localhost.zone
    
    $TTL 86400
    @ IN SOA localhost. root.localhost. (
            2008032401      ;Serial
            28800           ;Refresh 8h
            14400           ;Retry 4h
            604800          ;Expire 1week
            86400 )         ;Minimum 24h
    
            IN      NS      localhost.
            IN      A       127.0.0.1
    


  10. 「localhost.rev」 を作成します。
    [root]# vi localhost.rev
    
    $TTL 86400
    @ IN SOA localhost. root.localhost. (
            2008032400      ;Serial
            28800           ;Refresh 8h
            14400           ;Retry 4h
            604800          ;Expire 1week
            86400 )         ;Minimum 24h
    
            IN      NS      localhost.
    1       IN      PTR     localhost.
    


  11. zone ファイルを作成します。
    [root]# mkdir /usr/local/bind9/var/named/zone
    [root]# cd /usr/local/bind9/var/named/zone
    [root]# vi examples.com
    
    $TTL   86400
    @ IN SOA ns0.examples.com. root.localhost. (
            2008032401      ; Serial
            3600            ; Refresh 1h
            900             ; Retry 15min
            604800          ; Expire 1week
            86400 )         ; Minimum 24h
                    IN      NS      ns0.examples.com.
                    IN      MX  10  mail.examples.com.
                    IN      A       192.168.1.15
    ns0             IN      A       192.168.1.15
    
    [root]# vi test15.examples.com
    
    $TTL   86400
    @ IN SOA ns0.examples.com. root.localhost. (
            2008032401      ; Serial
            3600            ; Refresh 1h
            900             ; Retry 15min
            604800          ; Expire 1week
            86400 )         ; Minimum 24h
                    IN      NS      ns0.examples.com.
                    IN      MX  10  test15.examples.com.
                    IN      A       192.168.1.15
    


  12. named を起動します。
    [root]# /etc/rc.d/init.d/named start
    Starting named                                     [  OK  ]
    


  13. 正しくゾーン情報が引けるかを確認します。
    [root]# dig @127.0.0.1 examples.com ANY +norec
    
    ; <<>> DiG 9.2.4 <<>> @127.0.0.1 examples.com any +norec
    ; (1 server found)
    ;; global options:  printcmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33544
    ;; flags: qr aa; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; QUESTION SECTION:
    ;examples.com.                  IN      ANY
    
    ;; ANSWER SECTION:
    examples.com.           86400   IN      SOA     ns0.examples.com. root.localhost. 2008032401
     3600 900 604800 86400
    examples.com.           86400   IN      NS      ns0.examples.com.
    examples.com.           86400   IN      MX      10 mail.examples.com.
    examples.com.           86400   IN      A       192.168.1.15
    
    ;; ADDITIONAL SECTION:
    ns0.examples.com.       86400   IN      A       192.168.1.15
    
    ;; Query time: 1 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Fri Jul  4 18:03:34 2008
    ;; MSG SIZE  rcvd: 151
    
    [root]# dig @127.0.0.1 test15.examples.com ANY +norec
    
    ; <<>> DiG 9.2.4 <<>> @127.0.0.1 test15.examples.com any +norec
    ; (1 server found)
    ;; global options:  printcmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46917
    ;; flags: qr aa; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 2
    
    ;; QUESTION SECTION:
    ;test15.examples.com.           IN      ANY
    
    ;; ANSWER SECTION:
    test15.examples.com.    86400   IN      SOA     ns0.examples.com. root.localhost. 2008032401
     3600 900 604800 86400
    test15.examples.com.    86400   IN      NS      ns0.examples.com.
    test15.examples.com.    86400   IN      MX      10 test15.examples.com.
    test15.examples.com.    86400   IN      A       192.168.1.15
    
    ;; ADDITIONAL SECTION:
    ns0.examples.com.       86400   IN      A       192.168.1.15
    test15.examples.com.    86400   IN      A       192.168.1.15
    
    ;; Query time: 1 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Fri Jul  4 18:04:19 2008
    ;; MSG SIZE  rcvd: 169
    



つづく

| arinux | openldap | 11:26 | comments(0) | trackbacks(0) | pookmark |
openLDAP 構築(54) - LDAP sdb back-end for BIND9 (1)


DNSサーバー(BIND9) のバックエンド DB として、sdb(simplified database) という簡易型のデータベースを利用し、LDAP からゾーンファイルの情報を得る方法を説明します。


ゾーンに対する問い合わせは常に LDAP から検索され、ゾーンはキャッシュされません。


メモ テスト環境


機種NEC Express5800
OSCentOS 4.5
kernel2.6.9-55.EL
LDAPopenldap-2.4.8
DNSbind-9.4.2



メモ BIND9 のインストール


  1. http://www.isc.org/index.pl から、
    「bind-9.4.2.tar.gz」 をダウンロードして、「/usr/local/src」 に置きます。


  2. 解凍します。
    [root]# cd /usr/local/src
    [root]# tar zxvf bind-9.4.2.tar.gz
    


  3. 「ldapdb.c」 と 「ldapdb.h」 を以下のようにコピーします。
    [root]# cd bind-9.4.2/contrib/sdb/ldap
    [root]# cp ldapdb.c ../../../bin/named/.
    [root]# cp ldapdb.h ../../../bin/named/include/.
    


  4. 「bin/named/Makefile.in」 を以下のように編集します。
    [root]# cd /usr/local/src/bind-9.4.2/bin/named
    [root]# cp Makefile.in Makefile.in.org
    [root]# vi Makefile.in
    
    #
    # Add database drivers here.
    #
    #29行目から以下をコメントアウトもしくは削除
    #DBDRIVER_OBJS =
    #DBDRIVER_SRCS =
    #DBDRIVER_INCLUDES =
    #DBDRIVER_LIBS =
    #以下を追加
    DBDRIVER_OBJS = ldapdb.@O@
    DBDRIVER_SRCS = ldapdb.c
    DBDRIVER_INCLUDES = -I/usr/local/include
    DBDRIVER_LIBS = -L/usr/local/lib -lldap -llber -lresolv
    


  5. 「bin/named/main.c」 を以下のように編集します。
    [root]# cd /usr/local/src/bind-9.4.2/bin/named
    [root]# cp main.c main.c.org
    [root]# vi main.c
    #74行目
    /* #include "xxdb.h" */
    #include <ldapdb.h>
    
    #684行目
            /* xxdb_init(); */
            ldapdb_init();
    
    #711行目
            /* xxdb_clear(); */
            ldapdb_clear();
    


  6. コンフィグ、コンパイル、インストールします。
    [root]# ./configure --prefix=/usr/local/bind9 --with-openssl=/usr/local/ssl ¥
    --enable-ipv6=no
    [root]# make
    [root]# make install
    
    虫眼鏡 make で以下のエラーが出る場合


    ./main.c:75:20: ldapdb.h: そのようなファイルやディレクトリはありません
    ./main.c: In function `setup':
    ./main.c:685: 警告: 関数 `ldapdb_init' の暗黙の宣言
    ./main.c: In function `cleanup':
    ./main.c:712: 警告: 関数 `ldapdb_clear' の暗黙の宣言
    make[2]: *** [main.o] エラー 1
    
    • 「ldapdb.h」 の置き場所を間違えています。
    • /usr/local/src/bind-9.4.2/bin/named/include に置きます。


  7. named グループとユーザーを追加します。
    [root]# groupadd named
    [root]# useradd -g named -d /usr/local/bind9/var/named -s /sbin/nologin named
    


  8. 「/usr/local/bind9」 以下のパーミッションを変更します。
    [root]# cd /usr/local/bind9
    [root]# chown -R named:named etc
    [root]# chown -R named:named var
    


  9. スタートアップ・スクリプトを作成します。
    [root]# vi /etc/rc.d/init.d/named
    
    #!/bin/sh
    #
    # named           This shell script takes care of starting and stopping
    #                 named (BIND DNS server).
    #
    # chkconfig: 345 55 45
    # description: named (BIND) is a Domain Name Server (DNS)
    # that is used to resolve host names to IP addresses.
    # probe: true
    
    namedcmd="/usr/local/bind9/sbin/named"
    namedconf="/usr/local/bind9/etc/named.conf"
    namedrun="/usr/local/bind9/var/run"
    pid_file="$namedrun/named.pid"
    
    # Source function library.
    . /etc/rc.d/init.d/functions
    
    # Source networking configuration.
    . /etc/sysconfig/network
    
    # Check that networking is up.
    [ ${NETWORKING} = “no” ] && exit 0
    
    [ -f $namedcmd ] || exit 0
    
    [ -f $namedconf ] || exit 0
    
    start() {
        slapd_user="named"
        start_proc=`basename $namedcmd`
        echo "Starting $start_proc"
    
        daemon $namedcmd -c $namedconf -u named
        echo
    }
    
    stop() {
        kill_proc=`basename $namedcmd`
        echo "Stopping $kill_proc"
        kill -KILL `cat $pid_file`
        rm -f $pid_file
        echo
    }
    
    case "$1" in
      start)
        start
        ;;
      stop)
        stop
        ;;
      restart)
        stop
        sleep 1
        start
        ;;
      *)
      echo $"Usage: $0 {start|stop|restart}"
      RETVAL=1
    esac
    
    exit $RETVAL
    


  10. パーミッションを設定します。
    [root]# chomd 755 /etc/rc.d/init.d/named
    



つづく

| arinux | openldap | 17:09 | comments(0) | trackbacks(0) | pookmark |
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 |
openLDAP 構築(51) - メール管理(バーチャルエイリアス、バーチャルドメイン(2) )


メモ バーチャル・ドメインによる転送


「virtual_alias_domains」 と 「virtual_alias_maps」 の情報を、LDAP から取り出して転送する方法を説明します。


LDAP によるバーチャルドメインの管理


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


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


  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
    


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


  13. エントリーを追加します。
    [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"
    


  14. 期待通りに 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」 のドメインの部分が代入されます。


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


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



つづく

| arinux | openldap | 10:37 | comments(0) | trackbacks(0) | pookmark |
openLDAP 構築(50) - メール管理(バーチャルエイリアス、バーチャルドメイン(1) )


メモ 受信メールの配送・転送


受信したメールをローカルのメールボックスに届ける、あるいは別のメールアドレスへ転送する仕組みには、さまざまなものがあります。ここでは、それらを図解して説明します。


メールブルー ローカル配送


受信したメールを、ローカルのメールボックスに届ける。


受信メールのローカル配送


メールブルー エイリアス処理後のローカル配送


受信したメールを、エイリアス(別名)指示に従って、ローカルのメールボックスに届ける。


受信メールのエイリアス処理


メールブルー バーチャル・エイリアスによる転送


受信したメールを、virtual_alias_maps に従って、別 MTA へ転送する。


受信メールの転送


メールブルー バーチャル・ドメインによる転送


自分とは異なるドメインのメールを、virtual_alias_maps に従って、別 MTA へ転送する。


バーチャルドメインによる受信メールの転送


メールブルー バーチャル・メールボックスによるローカル配送


自分とは異なるドメインのメールを、virtual_mailbox_maps に従って、ローカルのメールボックスに届ける。


バーチャルメールボックスによる受信メールの配送




メモ バーチャル・エイリアスによる転送


「virtual_alias_maps」 の情報を、LDAP から取り出して転送する方法を説明します。


LDAP による転送先の検索


  1. main.cf に、以下を追加します。
    virtual_alias_maps = ldap:/usr/local/etc/postfix/ldap_valias.cf
    


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


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


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


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


  6. 以下のような LDIF ファイルを作成します。
    [root]# vi mail_gamba02.ldif
    
    dn: cn=gamba osaka,ou=Mail,dc=examples,dc=com
    objectClass: inetOrgPerson
    objectClass: postLdapAdmin
    sn: osaka
    cn: gamba osaka
    uid: gamba.osaka
    userPassword: {MD5}VJKW9qrhOmOo3z5IIUSOrg==
    mail: gamba.osaka@test15.examples.net
    mailDirectory: /home/mail/gamba.osaka/Maildir/
    mailAlias: rider@arinux.jugem.jp
    


  7. 既存のエントリーを一度削除して、再度追加します。
    [root]# ldapdelete -x -W -D "cn=Manager,dc=examples,dc=com" ¥
    "cn=gamba osaka,ou=Mail,dc=examples,dc=com"
    Enter LDAP Password:
    
    [root]# ldapadd -x -W -D "cn=Manager,dc=examples,dc=com" -f ./mail_gamba02.ldif
    Enter LDAP Password:
    adding new entry "cn=gamba osaka,ou=Mail,dc=examples,dc=com"
    


  8. 期待通りに mailAlias の値が引けるかをテストします。
    [root]# postmap -q "gamba.osaka@test15.examples.net" ¥
    ldap:/usr/local/etc/postfix/ldap_valias.cf
    rider@arinux.jugem.jp
    
    虫眼鏡 uid=%u


    • 「ldap_valias.cf」 の中で、「query_filter = (uid=%u)」 と記述していますので、
      • gamba.osaka@test15.examples.net → gamba.osaka に置き替えられ、
      • LDAP にて uid=gamba.osaka を検索します。
    • %s なら 「gamba.osaka@test15.examples.net」 の入力値のまま、
    • %d なら 「test15.examples.net」 のドメインの部分が代入されます。


  9. メール送信テストをします。
    [root]# echo "Alias test 101" | mail -s "test 101" gamba.osaka@test15.examples.net
    


  10. 転送先のメールボックスに届いていることを確認します。



つづく

| arinux | openldap | 16:38 | comments(0) | trackbacks(0) | pookmark |
openLDAP 構築(49) - メール管理(Postfix + Dovecot + SMTP AUTH + openldap)


メモ SMTP AUTH の設定


  1. saslauthd で ldap が利用できることを確認します。
    [root]# /usr/local/sbin/saslauthd -v
    saslauthd 2.1.22
    authentication mechanisms: getpwent pam rimap shadow ldap
    


  2. smtpd.conf を作成します。
    [root]# vi /usr/local/lib/sasl2/smtpd.conf
    
    pwcheck_method: saslauthd
    mech_list: login plain
    saslauthd_path: /var/run/saslauthd/mux
    
    虫眼鏡 mech_list


    saslauthd を使用した場合は、DIGEST-MD5 や CRAM-MD5 は動作しません。よって、「plain」 の平文パスワードを使用します。「login」 は MS Outlook Express で使用します。


  3. saslauthd.conf を作成します。
    [root]# mkdir /usr/local/etc/saslauthd
    [root]# vi /usr/local/etc/saslauthd/saslauthd.conf
    
    ldap_servers:           ldap://localhost
    ldap_search_base:       ou=Mail,dc=examples,dc=com
    ldap_filter:            (uid=%u)
    


  4. saslauthd のスタートアップ・スクリプトを作成します。
    [root]# vi /etc/rc.d/init.d/saslauthd
    
    #! /bin/bash
    #
    # saslauthd      Start/Stop the SASL authentication daemon.
    #
    # chkconfig: - 95 05
    # description: saslauthd is a server process which handles plaintext ¥
    #              authentication requests on behalf of the cyrus-sasl library.
    # processname: saslauthd
    
    # Source function library.
    . /etc/init.d/functions
    
    # Source our configuration file for these variables.
    
    if [ -f /etc/sysconfig/saslauthd ] ; then
            . /etc/sysconfig/saslauthd
    else
            SOCKETDIR=/var/state/saslauthd
            MECH=ldap
            FLAGS="-r -O /usr/local/etc/saslauthd/saslauthd.conf"
    fi
    
    RETVAL=0
    
    # Set up some common variables before we launch into what might be
    # considered boilerplate by now.
    prog=saslauthd
    path=/usr/local/sbin/saslauthd
    
    # Ugh. Switch to a specific copy of saslauthd if there's one with $MECH
    # in its name, in case it wasn't included in the base cyrus-sasl package
    # because it would have dragged in too many undesirable dependencies.
    if test -x ${path}.${MECH} ; then
            path=/usr/sbin/saslauthd.$MECH
    fi
    
    start() {
            echo -n $"Starting $prog: "
            daemon $path -m $SOCKETDIR -a $MECH $FLAGS
            RETVAL=$?
            echo
            [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
            return $RETVAL
    }
    
    stop() {
            echo -n $"Stopping $prog: "
            killproc $path
            RETVAL=$?
            echo
            [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
            return $RETVAL
    }
    
    restart() {
            stop
            sleep 2
            start
    }
    
    case "$1" in
      start)
            start
            ;;
      stop)
            stop
            ;;
      restart)
            restart
            ;;
      status)
            status $path
            ;;
      condrestart)
            [ -f /var/lock/subsys/$prog ] && restart || :
            ;;
      *)
            echo $"Usage: $0 {start|stop|status|reload|restart|condrestart}"
            exit 1
    esac
    
    exit $?
    


  5. パーミッションを設定します。
    [root]# chmod 755 /etc/rc.d/init.d/saslauthd
    


  6. saslauthd を起動します。
    [root]# /etc/rc.d/init.d/saslauthd start
    saslauthd を起動中:                                        [  OK  ]
    


  7. saslauthd の単体テストをします。
    [root]# testsaslauthd -u gamba.osaka -p gamba0120
    0: OK "Success."
    


  8. main.cf の最終行から、以下を追加します。
    [root]# vi /usr/local/etc/postfix/main.cf
    (以下を追加)
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_application_name = smtpd
    smtpd_recipient_restrictions =
      permit_mynetworks
      permit_auth_destination
      permit_sasl_authenticated
      reject
    


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


  10. SMTP のテストのため、PLAIN 方式で使用する文字列を生成します。
    [root]# perl -MMIME::Base64 -e ¥
    'print encode_base64("gamba.osaka¥0gamba.osaka¥0gamba0120");'
    Z2FtYmEub3Nha2EAZ2FtYmEub3Nha2EAZ2FtYmEwMTIw
    


  11. telnet で SMTP のログイン認証と送信テストをします。
    [root]# telnet localhost 25
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    220 test15.examples.net ESMTP Postfix
    ehlo localhost
    250-test15.examples.net
    250-PIPELINING
    250-SIZE 10240000
    250-VRFY
    250-ETRN
    250-AUTH LOGIN PLAIN
    250-ENHANCEDSTATUSCODES
    250-8BITMIME
    250 DSN
    auth plain Z2FtYmEub3Nha2EAZ2FtYmEub3Nha2EAZ2FtYmEwMTIw
    235 2.7.0 Authentication successful
    mail from: gamba.osaka@test15.examples.net
    250 2.1.0 Ok
    rcpt to: sanga.kyoto@test15.examples.net
    250 2.1.5 Ok
    data
    354 End data with <CR><LF>.<CR><LF>
    from: gamba.osaka@test15.examples.net
    subject: SMTP AUTH Test(1)
    test
    test
    .
    250 2.0.0 Ok: queued as 5EC0D367D6
    quit
    221 2.0.0 Bye
    Connection closed by foreign host.
    


  12. メールが届いたかを確認します。
    [root]# ls /home/mail/sanga.kyoto/Maildir/new
    
    1211264446.V808I26e97M249483.test15.examples.net
    


  13. メール・クライアントから送信テストをします。以下のように、メール・クライアントのメールボックスを以下のように設定します(ここでは Becky! を例にしています)。
    Becky! メールボックス 基本設定その2Becky! メールボックス 詳細その3


  14. メールの送信テストをします。
    Becky! 新規メール送信テスト


  15. SMTP 認証が行われていれば、maillog に以下のように記録されます。
    [root]# tail /var/log/maillog
    (省略)
    May 20 15:41:40 test15 postfix/smtpd[17115]: 3CEF4367D6: client=unknown ¥
    [xxx.xxx.xxx.xxx], sasl_method=PLAIN, sasl_username=gamba.osaka
    



つづく

| arinux | openldap | 13:30 | comments(0) | trackbacks(0) | pookmark |
openLDAP 構築(48) - メール管理(Postfix + Dovecot + openldap)


ここでは、Dovecot に必要な情報(アカウント、パスワード、メールボックス)を、LDAP から取り出す方法を説明します。なお、この記事は、以下を参考にしています。



今回は、OS のアカウントとは別に SMTP/POP3 用の LDAP ツリーとエントリーを作成します。つまり、OS へのログインや FTP をさせず、メールのみを利用させるアカウントを作成します。また、メール用アカウントだけに POP3 サービスを提供します。


メモ Postfix 用スキーマの追加


Postfix 用のスキーマとして、「postLdapAdmin.schema」 を使用します。


  1. http://sourceforge.jp/projects/postldapadmin/ から、
    「postLdapAdmin-1.0.tar.gz」 をダウンロードして、「/usr/local/src」 に置きます。


  2. 解凍します。
    [root]# cd /usr/local/src
    [root]# tar zxvf postLdapAdmin-1.0.tar.gz
    


  3. postLdapAdmin.schema をコピーします。
    [root]# cp postLdapAdmin/postLdapAdmin.schema /usr/local/etc/openldap/schema/.
    


  4. 「slapd.conf」 に以下を追加します。
    [root]# vi /usr/local/etc/openldap/slapd.conf
    
    include         /usr/local/etc/openldap/schema/postLdapAdmin.schema
    


  5. 「slapd」 の再起動は、後ほどします。



メモ メール用 LDAP エントリーの作成


  1. メール用の ou(organizationalUnit) の LDIF ファイルを作成します。
    [root]# cd <任意のディレクトリ>
    [root]# vi oudn_mail.ldif
    
    dn: ou=Mail,dc=examples,dc=com
    objectClass: organizationalUnit
    ou: Mail
    


  2. エントリーを追加します。
    [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"
    


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


  4. エントリーを追加します。
    [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"
    


  5. メールアカウントの LDIF ファイルを作成します。
    [root]# vi mail_gamba.ldif
    
    dn: cn=gamba osaka,ou=Mail,dc=examples,dc=com
    objectClass: inetOrgPerson
    objectClass: postLdapAdmin
    sn: osaka
    cn: gamba osaka
    uid: gamba.osaka
    userPassword: {MD5}VJKW9qrhOmOo3z5IIUSOrg==
    mail: gamba.osaka@test15.examples.net
    mailDirectory: /home/mail/gamba.osaka/Maildir/  #最後の / を忘れないように
    

    [root]# vi mail_sanga.ldif
    
    dn: cn=sanga kyoto,ou=Mail,dc=examples,dc=com
    objectClass: inetOrgPerson
    objectClass: postLdapAdmin
    sn: kyoto
    cn: sanga kyoto
    uid: sanga.kyoto
    userPassword: {MD5}VJKW9qrhOmOo3z5IIUSOrg==
    mail: sanga.kyoto@test15.examples.net
    mailDirectory: /home/mail/sanga.kyoto/Maildir/  #最後の / を忘れないように
    


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


  7. 「slapd.conf」 にアクセス制御とインデックスを追加します。
    [root]# vi /usr/local/etc/openldap/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
    
    access to attrs=userPassword
            by self write
            by dn="cn=Manager,dc=examples,dc=com" write
            by anonymous auth
            by * none
    
    access to *
            by self write
            by dn="cn=Manager,dc=examples,dc=com" write
            by * read
    
    (省略)
    
    index objectClass pres,eq
    index ou,cn eq,pres,sub
    index uid,mail,uidNumber,gidNumber,loginShell eq,pres
    index entryCSN,entryUUID eq
    


  8. slapd を停止します。
    [root]# /etc/rc.d/init.d/slapd stop
    Stopping slapd
    


  9. インデックスを再生成します。
    [root]# slapindex
    bdb_db_open: database "dc=examples,dc=com": unclean shutdown detected; attempting recovery.
    bdb_monitor_db_open: monitoring disabled; configure monitor database to enable
    


  10. slapd を起動します。
    [root]# /etc/rc.d/init.d/slapd start
    Starting slapd
    



メモ メールおよび POP サーバー設定


  1. メール用アカウントは posixAccount が存在しないため、代わりのユーザーとグループを作成します(nobody ユーザーを使用してもかまいません)。
    [root]# groupadd -g 5000 vmail
    [root]# useradd -g vmail -u 5000 -d /dev/null -s /bin/false vmail
    


  2. man.cf を編集します。
    [root]# vi /usr/local/etc/postfix/main.cf
    
    #default_privs = nobody     (もともとある行)
    default_privs = vmail       (この行を追加)
    
    (alias_maps に ldap_aliases.cf を追加)
    alias_maps = hash:/usr/local/etc/postfix/aliases, ldap:/usr/local/etc/postfix/ldap_aliases.cf
    


  3. ldap_aliases.cf を作成します。
    [root]# vi /usr/local/etc/postfix/ldap_aliases.cf
    
    server_host = localhost
    server_port = 389
    search_base = ou=Mail,dc=examples,dc=com
    query_filter = (uid=%u)
    result_attribute = mailDirectory
    version = 3
    
    虫眼鏡 LDAP ユーザーを alias として処理


    LDAP ユーザーは OS のアカウントとしては存在しないため、「alias」 として処理します。「ldap_aliases.cf」 によって、uid をもとに検索して得た mailDirectory の値をメールボックスのパスとして使用します。


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


  5. 設定通りに mailDirectory の値が返ってくるかを確認します。
    [root]# postmap -q "gamba.osaka@test15.examples.net" ldap:/usr/local/etc/postfix/ldap_aliases.cf
    /home/mail/gamba.osaka/Maildir/
    


  6. dovecot.conf を編集します。
    [root]# vi /usr/local/etc/dovecot/dovecot.conf
    
    protocols = pop3 imap
    listen = *
    disable_plaintext_auth = no
    log_path = /var/log/dovecot.log
    log_timestamp = "%b %d %H:%M:%S "
    syslog_facility = mail
    ssl_disable = yes
    mail_location = maildir:~/    #ここは maildir:~/Maildir と書かないように
    lock_method = fcntl
    first_valid_uid = 5000        #先ほど作成した vmail ユーザーの uid を指定
    protocol imap {
    }
    protocol pop3 {
      pop3_uidl_format = %v-%u
    }
    protocol lda {
      postmaster_address = postmaster@test15.examples.net
    }
    auth default {
      mechanisms = plain
      passdb ldap {
        args = /usr/local/etc/dovecot/dovecot-ldap.conf
      }
      userdb ldap {
        args = /usr/local/etc/dovecot/dovecot-ldap.conf
      }
    }
    dict {
    }
    plugin {
    }
    


  7. dovecot-ldap.conf を編集します。
    [root]# vi /usr/local/etc/dovecot/dovecot-ldap.conf
    
    hosts = localhost
    dn = cn=mailadmin,ou=Mail,dc=examples,dc=com
    dnpass = passwd0120           #このパスワードは平文でしか書けません
    ldap_version = 3
    base = ou=Mail,dc=examples,dc=com
    user_attrs = uid=user,mailDirectory=home
    user_filter = (uid=%u)
    pass_attrs = uid=user,userPassword=password
    pass_filter = (uid=%u)
    default_pass_scheme = PLAIN
    user_global_uid = vmail
    user_global_gid = vmail
    


  8. dovecot を再起動します。
    [root]# /etc/rc.d/init.d/dovecot restart
    dovecot を停止中:                                          [  OK  ]
    dovecot を起動中:
    


  9. telnet でログイン認証のテストをします。
    [root]# telnet localhost 110
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    +OK Dovecot ready.
    user gamba.osaka
    +OK
    pass gamba0120
    +OK Logged in.
    quit
    +OK Logging out.
    Connection closed by foreign host.
    


  10. メールボックスのディレクトリを作成します。
    [root]# mkdir /home/mail
    [root]# chown vmail:vmail /home/mail
    


  11. メール送信テストをします。
    [root]# echo "postfix test 1302" | mail -s "test 1302" gamba.osaka@test15.examples.net
    


  12. メールが届いたかを確認します。
    [root]# ls /home/mail/gamba.osaka/Maildir/new
    
    1210927204.V808I26eaaM742279.test15.examples.net
    


  13. メール・クライアントから送受信テストをします。以下のように、メール・クライアントで新規メールボックスを作成します(ここでは Becky! を例にしています)。
    Becky! メールボックス 基本設定その2Becky! メールボックス 詳細その2


  14. メールが受信できるかを確認します。
    Becky! メールボックス 受信テストその2


  15. 「返信」 もしくは 「新規メール」 で、メールの送信テストを行います。



つづく

| arinux | openldap | 14:25 | comments(0) | trackbacks(0) | pookmark |
openLDAP 構築(47) - メール管理(Postfix + Dovecot)


メモ Dovecot インストール


pop3/imap サーバーとして、Dovecot をインストールします。ここでは pop3 の利用を前提に説明します。


  1. http://www.dovecot.org/download.html から、
    「dovecot-1.0.13.tar.gz」 をダウンロードして、「/usr/local/src」 に置きます。


  2. 解凍します。
    [root]# cd /usr/local/src
    [root]# tar zxvf dovecot-1.0.13.tar.gz
    


  3. 「dovecot」 ユーザーとグループを作成します(ログインさせないようにします)。
    [root]# groupadd dovecot
    [root]# useradd -g dovecot -d /dev/null -s /bin/false dovecot
    


  4. コンフィグ、コンパイル、インストールします。
    [root]# cd dovecot-1.0.13
    [root]# ./configure --with-ldap --with-pam
    [root]# make
    [root]# make install
    


  5. 「/usr/local/etc」 以下のコンフィグファイルを 「/usr/local/etc/dovecot」 に移動します。
    [root]# cd /usr/local/etc
    [root]# mkdir dovecot
    [root]# mv dovecot-*.conf dovecot/.
    


  6. dovecot.conf を編集します。ここでは、pam 認証を使用します。
    [root]# cd /usr/local/etc/dovecot
    [root]# cp dovecot-example.conf dovecot.conf
    [root]# vi dovecot.conf
    
    protocols = pop3 imap
    listen = *
    disable_plaintext_auth = no
    log_path = /var/log/dovecot.log
    log_timestamp = "%b %d %H:%M:%S "
    syslog_facility = mail
    ssl_disable = yes
    mail_location = maildir:~/Maildir
    lock_method = fcntl
    protocol imap {
    }
    protocol pop3 {
      pop3_uidl_format = %u
    }
    protocol lda {
      postmaster_address = postmaster@test15.examples.net
    }
    auth default {
      mechanisms = plain
      passdb pam {
        args = dovecot
      }
      userdb passwd {
      }
      user = root
    }
    dict {
    }
    plugin {
    }
    


  7. /etc/pam.d/dovecot を作成します。
    [root]# vi /etc/rc.d/init.d/dovecot
    
    #%PAM-1.0
    auth       required     pam_stack.so service=system-auth
    account    required     pam_stack.so service=system-auth
    


  8. スタートアップ・スクリプトを作成します。
    [root]# vi /etc/rc.d/init.d/dovecot
    
    #! /bin/bash
    
    # Source function library.
        . /etc/init.d/functions
    RETVAL=0
    
    prog=dovecot
    path=/usr/local/sbin/dovecot
    conf=/usr/local/etc/dovecot/dovecot.conf
    
    start() {
            echo -n $"Starting $prog: "
            $path -c $conf
            RETVAL=$?
            echo
            [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
            return $RETVAL
    }
    
    stop() {
            echo -n $"Stopping $prog: "
            killproc $path
            RETVAL=$?
            echo
            [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
            return $RETVAL
    }
    
    restart() {
            stop
            sleep 2
            start
    }
    
    case "$1" in
      start)
            start
            ;;
      stop)
            stop
            ;;
      restart)
            restart
            ;;
      status)
            status $path
            ;;
      condrestart)
            [ -f /var/lock/subsys/$prog ] && restart || :
            ;;
      *)
            echo $"Usage: $0 {start|stop|status|reload|restart|condrestart}"
            exit 1
    esac
    
    exit $?
    


  9. パーミッションを変更します。
    [root]# chmod 755 dovecot
    


  10. dovecot を起動します。
    [root]# /etc/rc.d/init.d/dovecot start
    dovecot を起動中:
    


  11. telnet でログイン認証のテストをします。
    [root]# telnet localhost 110
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    +OK Dovecot ready.
    user muser                 (/etc/passwd にあるユーザー名を入力)
    +OK
    pass muserpasswd           (パスワードを入力)
    +OK Logged in.
    quit                       (telnet から抜けます)
    +OK Logging out.
    Connection closed by foreign host.
    [root]#
    
    虫眼鏡 エラーが出る場合


    -ERR Authentication failed.
    
    • パスワードが違います。


    -ERR Password expired
    
    • パスワードの有効期限が切れています。


  12. pam 認証をしていますので、posixAccount があれば LDAP ユーザーでもログインができます。例として、以下の LDIF ファイルを作成します。
    [root]# vi useradd_sanga.ldif
    
    dn: uid=sanga,ou=people,dc=examples,dc=com
    uid: sanga
    objectClass: top
    objectClass: inetOrgPerson
    objectClass: posixAccount
    objectClass: shadowAccount
    sn: kyoto
    cn: sanga
    uidNumber: 2001
    gidNumber: 1001
    userPassword: {MD5}bzfNschX/CgDQ9/b2ga37A==
    homeDirectory: /home/sanga
    loginShell: /bin/bash
    shadowLastChange: 0
    shadowMin: 0
    shadowMax: 30
    shadowWarning: 7
    


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


  14. 一度ログインして、ホームディレクトリを作成し、パスワードを変更します。
    [root]# ssh -l sanga localhost
    The authenticity of host 'localhost (127.0.0.1)' can't be established.
    RSA key fingerprint is c5:7b:60:f3:f4:48:4e:86:02:38:1d:e7:4b:a3:b1:cb.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
    sanga@localhost's password:  (現パスワードを入力)
    You are required to change your password immediately (root enforced)
    You are required to change your LDAP password immediately.
    Creating directory '/home/sanga'.
    WARNING: Your password has expired.
    You must change your password now and login again!
    Changing password for user sanga.
    Enter login(LDAP) password:  (現パスワードを入力)
    New password:                (新パスワードを入力)
    Retype new password:         (再入力)
    LDAP password information changed for sanga
    passwd: all authentication tokens updated successfully.
    Connection to localhost closed.
    [root]#
    


  15. telnet で LDAP ユーザーのログイン認証のテストをします。
    [root]# telnet localhost 110
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    +OK Dovecot ready.
    user sanga
    +OK
    pass sangapasswd
    +OK Logged in.
    quit
    +OK Logging out.
    Connection closed by foreign host.
    [root]#
    


  16. テストメールを送信します。
    [root]# echo "test 11" | mail -s "test mail 11" sanga@test15.examples.net
    


  17. メールが届いたかを確認します。
    [root]# ls /home/sanga/Maildir/new
    
    1210309096.V808I7c8bM199092.test15.examples.net
    


  18. メール・クライアントから送受信テストをします。以下のように、メール・クライアントで新規メールボックスを作成します(ここでは Becky! を例にしています)。
    Becky! メールボックス 基本設定 Becky! メールボックス 詳細


  19. メールが受信できるかを確認します。
    Becky! メールボックス 受信テスト


  20. 「返信」 もしくは 「新規メール」 で、メールの送信テストを行います。



つづく

| arinux | openldap | 10:49 | comments(0) | trackbacks(0) | pookmark |
openLDAP 構築(46) - メール管理(Postfix) (1)


今回から数回に分けて、Postfix の認証、転送、仮想ドメインなどの情報を、LDAP で管理する方法を説明します。


メモ テスト環境


機種NEC Express5800
OSCentOS 4.5
kernel2.6.9-55.EL
LDAPopenldap-2.4.8
MTApostfix-2.5.1
POP serverdovecot-1.0.13
SASLcyrus-sasl-2.1.22



メモ Cyrus SASL のインストール


※ すでにインストール済みの場合は不要です。


  1. ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/ から
    「cyrus-sasl-2.1.22.tar.gz」 をダウンロードして、「/usr/local/src」 に置きます。


  2. 解凍します。
    [root]# cd /usr/local/src
    [root]# tar zxvf cyrus-sasl-2.1.22.tar.gz
    


  3. make に渡す引数をセットします。
    [root]# export LDFLAGS="-L/usr/local/lib"
    [root]# export CFLAGS="-DWITH_SSL_DES -I/usr/include"
    [root]# export CPPFLAGS="-I/usr/include -I/usr/local/include"
    


  4. コンフィグします。
    [root]# cd cyrus-sasl-2.1.22
    [root]# ./configure --with-dbpath=/usr/local/etc/sasldb2 ¥
    --with-plugindir=/usr/local/lib/sasl2 ¥
    --with-ldap=/usr/local/lib ¥
    --with-openssl=/usr/local/lib ¥
    --disable-krb4 --disable-gssapi --disable-anon --enable-login
    


  5. コンパイル、インストールします。
    [root]# make
    [root]# make install
    


  6. ldap が利用できることを確認します。
    [root]# /usr/local/sbin/saslauthd -v
    saslauthd 2.1.22
    authentication mechanisms: getpwent pam rimap shadow ldap
    


  7. ライブラリのパスと Cプリプロセッサのオプションに sasl のパスを追加します。
    [root]# export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib/sasl2
    [root]# export CPPFLAGS="-I/usr/include -I/usr/local/include -I/usr/local/include/sasl"
    



メモ Postfix のインストール


まずは、Postfix 単体で利用できる環境を構築します。


  1. http://mirror.postfix.jp/postfix-release/index.html から、
    「postfix-2.5.1.tar.gz」 をダウンロードして、「/usr/local/src」 に置きます。


  2. 解凍します。
    [root]# cd /usr/local/src
    [root]# tar zxvf postfix-2.5.1.tar.gz
    


  3. sendmail 関連のコマンドを rename します。
    [root]# mv /usr/sbin/sendmail /usr/sbin/sendmail.org
    [root]# mv /usr/bin/newaliases /usr/bin/newaliases.org
    [root]# mv /usr/bin/mailq /usr/bin/mailq.org
    


  4. sendmail プロセスを停止し、boot 時に自動起動しないようにします。
    [root]# /etc/rc.d/init.d/sendmail stop
    (停止しない場合は、「killall sendmail」 を実行)
    [root]# chkconfig sendmail off
    [root]# chkconfig --list sendmail
    sendmail        0:off   1:off   2:off   3:off   4:off   5:off   6:off
    


  5. postfix ユーザーと、postfix 及び postdrop グループを作成します。postfix ユーザーはログインさせないようにします。
    [root]# groupadd postfix
    [root]# groupadd postdrop
    [root]# useradd -g postfix -d /dev/null -s /bin/false postfix
    


  6. Makefile を作成します。
    [root]# cd /usr/local/src/postfix-2.5.1
    [root]# make makefiles CCARGS='-DUSE_SASL_AUTH -DUSE_CYRUS_SASL ¥
    -DHAS_LDAP -I/usr/local/include -I/usr/local/include/sasl ¥
    -DDEF_CONFIG_DIR=¥"/usr/local/etc/postfix¥"' ¥
    AUXLIBS="-L/usr/local/lib -lldap -llber -lsasl2"
    
    虫眼鏡 「No <db.h> include file found.」


    このエラーが出る場合は、「db4-devel」パッケージをインストールしてから、再度 Makefile 作成を実行します。

    [root]# yum install db4-devel
    


  7. コンパイル、インストールを実施します。
    [root]# make
    [root]# make install
    (省略)
    install_root: [/] <Enter>
    tempdir: [/usr/local/src/postfix-2.5.1] /usr/local/tmp
    config_directory: [/usr/local/etc/postfix] <Enter>
    command_directory: [/usr/sbin] /usr/local/sbin
    daemon_directory: [/usr/libexec/postfix] /usr/local/libexec/postfix
    data_directory: [/var/lib/postfix] /usr/local/var/postfix
    html_directory: [no] <Enter>
    mail_owner: [postfix] <Enter>
    mailq_path: [/usr/bin/mailq] <Enter>
    manpage_directory: [/usr/local/man] <Enter>
    newaliases_path: [/usr/bin/newaliases] <Enter>
    queue_directory: [/var/spool/postfix] <Enter>
    readme_directory: [no] <Enter>
    sendmail_path: [/usr/sbin/sendmail] <Enter>
    setgid_group: [postdrop] <Enter>
    
    虫眼鏡 make: *** [install] エラー 1


    以下の箇所でエラーが出る場合、

    Skipping /usr/local/man/man8/virtual.8...
    make: *** [install] エラー 1
    


    「config_directory」 を Makefile 作成時に指定しなかったことが原因です。「config_directory」 の Default である 「/etc/postfix」 を別の場所に変更したい場合は、「make install」 の時にではなく、Makefile 作成時に以下を指定する必要があります。

    -DDEF_CONFIG_DIR=¥"/usr/local/etc/postfix¥"
    


  8. コンフィグしたパラメータを確認します。
    [root]# postconf -n -c /usr/local/etc/postfix
    command_directory = /usr/local/sbin
    config_directory = /usr/local/etc/postfix
    daemon_directory = /usr/local/libexec/postfix
    data_directory = /usr/local/var/postfix
    debug_peer_level = 2
    html_directory = no
    mail_owner = postfix
    mailq_path = /usr/bin/mailq
    manpage_directory = /usr/local/man
    newaliases_path = /usr/bin/newaliases
    queue_directory = /var/spool/postfix
    readme_directory = no
    sample_directory = /usr/local/etc/postfix
    sendmail_path = /usr/sbin/sendmail
    setgid_group = postdrop
    unknown_local_recipient_reject_code = 550
    


  9. aliases の root の転送先の設定と、postfix アカウントの記述を確認します。
    [root] cd /usr/local/etc/postfix
    [root] vi aliases
    root:           admin   # これを追加。root 以外のメール管理者に転送する。
    postfix:        root    # この行はもともとあります。
    


  10. aliases.db に反映させます。
    [root]# postalias -c /usr/local/etc/postfix /usr/local/etc/postfix/aliases
    


  11. main.cf を編集します。
    [root] cd /usr/local/etc/postfix
    [root] vi main.cf
    
    queue_directory = /var/spool/postfix
    command_directory = /usr/local/sbin
    daemon_directory = /usr/local/libexec/postfix
    data_directory = /usr/local/var/postfix
    mail_owner = postfix
    myhostname = test15.examples.net
    mydomain = examples.net
    myorigin = $myhostname
    inet_interfaces = all
    mydestination = $myhostname, localhost.$mydomain, localhost
    unknown_local_recipient_reject_code = 550
    mynetworks = 127.0.0.0/8, 10.1.1.0/24
    alias_maps = hash:/usr/local/etc/postfix/aliases
    alias_database = hash:/usr/local/etc/postfix/aliases
    home_mailbox = Maildir/
    debug_peer_level = 2
    debugger_command =
        PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
        ddd $daemon_directory/$process_name $process_id & sleep 5
    sendmail_path = /usr/sbin/sendmail
    newaliases_path = /usr/bin/newaliases
    mailq_path = /usr/bin/mailq
    setgid_group = postdrop
    html_directory = no
    manpage_directory = /usr/local/man
    sample_directory = /usr/local/etc/postfix
    readme_directory = no
    smtp_host_lookup = dns
    


  12. スタートアップ・スクリプトを作成します。
    [root] vi /etc/rc.d/init.d/postfix
    
    #!/bin/sh
    
    # Source function library.
    . /etc/rc.d/init.d/functions
    
    # Check networking
    if [ -r /etc/sysconfig/network ] ; then
            . /etc/sysconfig/network
            [ ${NETWORKING} = "no" ] && exit 0
    fi
    
    RETVAL=0
    
    start() {
            # Start daemons.
            echo -n "Starting postfix: "
            /usr/local/sbin/postfix -c /usr/local/etc/postfix start 2>/dev/null 1>&2 && success || failure
            RETVAL=$?
            [ $RETVAL -eq 0 ] && touch /var/lock/subsys/postfix
            echo
            return $RETVAL
    }
    
    stop() {
            # Stop daemons.
            echo -n "Shutting down postfix: "
            /usr/local/sbin/postfix stop 2>/dev/null 1>&2 && success || failure
            RETVAL=$?
            [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/postfix
            echo
            return $RETVAL
    }
    
    reload() {
            echo -n "Reloading postfix: "
            /usr/local/sbin/postfix reload 2>/dev/null 1>&2 && success || failure
            RETVAL=$?
            echo
            return $RETVAL
    }
    
    abort() {
            /usr/local/sbin/postfix abort 2>/dev/null 1>&2 && success || failure
            return $?
    }
    
    flush() {
            /usr/local/sbin/postfix flush 2>/dev/null 1>&2 && success || failure
            return $?
    }
    
    check() {
            /usr/local/sbin/postfix check 2>/dev/null 1>&2 && success || failure
            return $?
    }
    
    restart() {
            stop
            start
    }
    
    # See how we were called.
    case "$1" in
      start)
            start
            ;;
      stop)
            stop
            ;;
      restart)
            stop
            sleep 2
            start
            ;;
      reload)
            reload
            ;;
      abort)
            abort
            ;;
      flush)
            flush
            ;;
      check)
            check
            ;;
      status)
            status master
            ;;
      condrestart)
            [ -f /var/lock/subsys/postfix ] && restart || :
            ;;
      *)
            echo "Usage: postfix {start|stop|restart|reload|abort|flush|check|status|condrestart}"
            exit 1
    esac
    
    exit $?
    


  13. パーミッションを変更します。
    [root]# chmod 755 postfix
    


  14. postfix を起動します。
    [root]# /etc/rc.d/init.d/postfix start
    Starting postfix:                                          [  OK  ]
    


  15. テスト用のユーザーを作成します。
    [root]# useradd -m muser
    


  16. テストメールを送信します。
    [root]# echo "test 1" | mail -s "test mail 1" muser@test15.examples.net
    


  17. メールが届いたかを確認します。
    [root]# ls /home/muser/Maildir/new
    
    1210227510.V808I2eb08M185771.test15.examples.net
    
    [root]# cat /home/muser/Maildir/new/1210*
    
    Return-Path: 
    X-Original-To: muser@test15.examples.net
    Delivered-To: muser@test15.examples.net
    Received: by test15.examples.net (Postfix, from userid 0)
            id 28104367D6; Thu,  8 May 2008 15:18:30 +0900 (JST)
    To: muser@test15.examples.net
    Subject: test mail 1
    Message-Id: <20080508061830.28104367D6@test15.examples.net>
    Date: Thu,  8 May 2008 15:18:30 +0900 (JST)
    From: root@test15.examples.net (root)
    
    test 1
    



つづく

| arinux | openldap | 16:09 | comments(0) | trackbacks(0) | pookmark |
1234567
891011121314
15161718192021
22232425262728
293031    
<< October 2017 >>
+ SELECTED ENTRIES
+ RECENT COMMENTS
+ RECENT TRACKBACK
+ CATEGORIES
+ ARCHIVES
+ 掲載予定のタイトル
  • Wordpress
  • Pukiwiki
  • SMTPs/POPs/IMAPs
  • fml
  • Tips
+ CSS Nite
+ MOBILE
qrcode
+ LINKS
+ RECOMMEND
+ PROFILE