arinux

Linux サーバー設定備忘録
<< phpLdapPasswd (3) - カスタマイズ(2) | main | openLDAP 構築(47) - メール管理(Postfix + Dovecot) >>
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 |









http://www.arinux.net/trackback/64
   1234
567891011
12131415161718
19202122232425
2627282930  
<< November 2017 >>
+ SELECTED ENTRIES
+ RECENT COMMENTS
+ RECENT TRACKBACK
+ CATEGORIES
+ ARCHIVES
+ 掲載予定のタイトル
  • Wordpress
  • Pukiwiki
  • SMTPs/POPs/IMAPs
  • fml
  • Tips
+ CSS Nite
+ MOBILE
qrcode
+ LINKS
+ RECOMMEND
+ PROFILE