Postfix+Dovecot+LDAP(バーチャルメールボックス)


Table of Contents

システム構成

Postfix+Dovecot+OpenLDAP_2.jpg

SMTP 兼 POPサーバ

  • ホスト名(IP)
    • serv11(192.168.11.11)
  • OS
    • CentOS 5.5 (kernel 2.6.18-194.11.1.el5)
  • パッケージ
    • postfix-2.3.3-2.1.el5_2
    • dovecot-1.0.7-7.el5

LDAP 兼 WEBメールサーバ

  • ホスト名(IP)
    • serv100(192.168.11.100)
  • OS
    • CentOS 5.5 (kernel 2.6.18-194.11.1.el5)
  • パッケージ
    • openldap-servers-2.3.43-12.el5_5.2
    • openldap-clients-2.3.43-12.el5_5.2

要件

  • アカウント管理はOpenLDAPを利用する
  • メールデータは「/var/mail」配下に保存する(大抵の場合、NFSなどで一元管理します)
  • SMTPS,POP3S,IMAPSを利用可能にする
  • SMTP認証を利用可能にする
  • バーチャルメールボックスを利用する

バーチャルメールボックスについて

Postfixはローカルメールボックス配送にUNIXアカウントを利用しますが、
全メールユーザにUNIXアカウントを与える事はセキュリティ的に好ましくありません。

そこで、バーチャルメールボックスという仕組みを利用してUNIXアカウントが無くても メール配送が行われるようにします。

OpenLDAP(192.168.11.100)

OpenLDAPのインストール

  • OpenLDAPをインストール
    # yum install openldap-servers
    # yum install openldap-clients

OpenLDAPの設定

スキーマファイルのダウンロード

  • 「wget」コマンドでpostfix用のスキーマファイルをダウンロードします。
    # wget http://ldapadmin.sourceforge.net/docs/postfix.schema -O /etc/openldap/schema/postfix.schema
    postfix.schemaの内容

管理パスワードの生成

  • slappasswdコマンドで管理用パスワードを生成して、テキストなどにメモしておきます。
    # slappasswd
    New password:****
    Re-enter new password:****
    {SSHA}MG//NfdYLHxWJINHLgh7ZTwPdzHy2mNn 

slapd.confの編集

  • openldapの設定ファイル「/etc/openldap/slapd.conf」を編集します。
    (※変更箇所のみを抜粋しています)
    # vi /etc/openldap/slapd.conf
    
    include         /etc/openldap/schema/postfix.schema
    
    suffix      "dc=oss-d,dc=net"
    rootdn      "cn=Manager,dc=oss-d,dc=net"
    rootpw      {SSHA}MG//NfdYLHxWJINHLgh7ZTwPdzHy2mNn
    
    #ユーザが自分のパスワード変更できるようにアクセス権を設定
    access to attrs=userPassword
      by self write
      by anonymous auth
      by * none
    
    #管理者は書き込み可能、その他のユーザは読み取り専用
    access to *
      by self write
      by * read

Berkeley DBの設定

  • Berkeley DBの設定ファイルを作成します。
    今回はサンプルのまま利用しますが、OpenLDAPのチューニングを行う場合は適宜変更して下さい。
    # cp -rp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

データ登録

DITについて

  • DIT(データ階層構造)は下記構成で作成します。
    LDAP_DIT.jpg
・Group
グループを登録するディレクティブ。
一般的なグループと同じで、複数ユーザをまとめて1つとして扱うために利用します。
Active Directory であれば administratorsやpoweruserがあります。
・Manager
slapd.confでrootdnに設定したディレクティブ。
Unixのrootのような扱いでデータベースに対してありとあらゆる権限を持ちます。
・Users
ユーザを登録するディレクティブ。

データ登録

  • 基本部分のldifファイルを作成します。
    # vi base.ldif
    
    dn: dc=oss-d,dc=net
    objectClass: dcObject
    objectclass: organization
    dc: oss-d
    o: oss-d.net
    
    dn: cn=Manager,dc=oss-d,dc=net
    objectClass: organizationalRole
    cn: Manager
    
    dn: ou=Users,dc=oss-d,dc=net
    objectClass: organizationalUnit
    ou: Users
    
    dn: ou=Group,dc=oss-d,dc=net
    objectClass: organizationalUnit
    ou: Group
  • ldifファイルを利用してデータを一括登録します。
    # ldapadd -x -D "cn=Manager,dc=oss-d,dc=net" -W -f base.ldif 


  • ユーザデータ登録前にユーザ hoge1とhoge2のパスワードを生成します。
    # slappasswd
    New password:
    Re-enter new password:
    {SSHA}M8mgOF7ObnKIdK4yHP6G1z1DvWBxf4+Y
    
    # slappasswd
    New password:
    Re-enter new password:
    {SSHA}YKATbytOmVm8KRBt7x8dtKp6D3j+M0Ku

  • ユーザデータのldifファイルを作成します。
    # vi user.ldif
    
    dn: uid=hoge1,ou=Users,dc=oss-d,dc=net
    objectClass: posixAccount
    objectClass: shadowAccount
    objectClass: top
    objectClass: account
    objectClass: mailUser
    gidNumber: 10001
    uidNumber: 10001
    uid: hoge1
    cn: hoge1
    homeDirectory: /home/hoge1
    mail: hoge1@oss-d.net
    maildrop: hoge1
    userPassword: {SSHA}M8mgOF7ObnKIdK4yHP6G1z1DvWBxf4+Y
    
    dn: uid=hoge2,ou=Users,dc=oss-d,dc=net
    objectClass: posixAccount
    objectClass: shadowAccount
    objectClass: top
    objectClass: account
    objectClass: mailUser
    gidNumber: 10002
    uidNumber: 10002
    uid: hoge2
    cn: hoge2
    homeDirectory: /home/hoge2
    mail: hoge2@oss-d.net
    maildrop: hoge2
    userPassword: {SSHA}YKATbytOmVm8KRBt7x8dtKp6D3j+M0Ku
    
    • ldifファイルを利用してデータを一括登録します。
      # ldapadd -x -D "cn=Manager,dc=oss-d,dc=net" -W -f user.ldif 

自動起動の設定

  • chkconfigコマンドで自動起動をONにします
    # chkconfig ldap on

LDAPの起動

  • LDAPを起動します。
    # /etc/init.d/ldap start

Postfix(192.168.11.11)

Postfixのインストール

  • postfix本体のインストール
    # yum install postfix

Postfixの設定

main.cfの編集

  • 設定ファイル「/etc/postfix/main.cf」を編集します。
    # vi /etc/postfix/main.cf
    
    # ■基本設定------------------------------------------------#
    # ホスト名
    myhostname = localhost
    
    # ドメイン名
    mydomain = localdomain
     
    # @以降のドメイン名
    myorigin = $myhostname
    
    # メールを受け取るネットワークインタフェースのアドレス範囲
    inet_interfaces = all
    
    # メールの最終目的地とみなす範囲
    # (バーチャルメールボックス利用時はドメイン名を含めない事)
    mydestination = $myhostname, localhost.$mydomain, localhost
    
    # 信頼できるクライアントのネットワーク
    mynetworks =  192.168.11.0/24, 127.0.0.0/8
    
    # リレーを許可するドメインを指定
    relay_domains = $mydestination
    
    # メールBOXの形式
    home_mailbox = Maildir/
    
    
    # ■バーチャルメールボックスの設定--------------------------------#
    virtual_transport = virtual
    virtual_mailbox_domains = oss-d.net
    virtual_mailbox_base = /var/vmail
    virtual_alias_maps = ldap:/etc/postfix/ldap-alias.cf
    virtual_mailbox_maps = ldap:/etc/postfix/ldap-mailbox.cf
    virtual_uid_maps = static:1000
    virtual_gid_maps = static:1000
    local_recipient_maps = proxy:unix:passwd.byname $alias_maps $virtual_mailbox_maps
    
    
    # ■SMTP認証の設定------------------------------------------------#
    # SASLによるSMTP認証を使用
    smtpd_sasl_auth_enable = yes
    
    # 使用可能な認証メカニズムの設定
    # noanonymous : 匿名接続を拒否。
    # noplaintext : PLAIN認証を拒否(Outlook ExpressはPLAIN認証のみ対応)
    #smtpd_sasl_security_options = noanonymous, noplaintext
    smtpd_sasl_security_options = noanonymous
    
    # 認証時のTLSの利用(TLSを強制する場合はyesに変更)
    #smtpd_tls_auth_only = yes
    
    #ローカル認証 realm を設定
    smtpd_sasl_local_domain = $myhostname
    
    #メールの送信可能なユーザ定義
    # permit_mynetworks : $mynetworksは認証無しで許可する。
    # permit_auth_destination : TOが@oss-d.netのメールを許可する。
    # permit_sasl_authenticated : 認証済みであれば許可する。
    smtpd_recipient_restrictions =
     permit_mynetworks
     permit_auth_destination
     permit_sasl_authenticated
     reject
    
    # Outlook LOGIN 認証を利用するための設定
    broken_sasl_auth_clients = yes
    
    
    # ■TLSの設定------------------------------------------------#
    #TLSを有効にする
    smtpd_use_tls = yes
    
    #秘密鍵ファイルの指定
    smtpd_tls_key_file = /etc/pki/tls/private/localhost.key
    
    #証明書ファイルの指定
    smtpd_tls_cert_file = /etc/pki/tls/certs/localhost.crt
    
    #TLSセッションキャッシュデータベースの指定
    smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_tls_scache
    
    #TLSのログレベル指定
    smtpd_tls_loglevel = 1
    
    #----------------------------------------------------------#

master.cfの編集

  • 設定ファイル「/etc/postfix/master.cf」を編集します。(コメントを外すだけです。)
    # vi /etc/postfix/master.cf
    
    smtps     inet  n       -       n       -       -       smtpd
      -o smtpd_tls_wrappermode=yes
      -o smtpd_sasl_auth_enable=yes
      -o smtpd_client_restrictions=permit_sasl_authenticated,reject
    
    tlsmgr    unix  -       -       n       1000?   1       tlsmgr

ldap-aliases.cfの編集

  • 設定ファイル「/etc/postfix/ldap-aliases.cf」を編集します。
    # vi /etc/postfix/ldap-alias.cf
    
    server_host = 192.168.11.100
    domain = oss-d.net
    search_base = ou=Users,dc=oss-d,dc=net
    scope = one
    query_filter = (uid=%u)
    result_attribute = mail

  • postaliasコマンドで設定確認を行います。メールアドレスが表示されない場合は設定を 見直して下さい。
    # postalias -q hoge1@oss-d.net ldap:/etc/postfix/ldap-alias.cf
    hoge1@oss-d.net

  • postmap コマンドでデータベースを作成します
    # postmap /etc/postfix/ldap-alias.cf

ldap-mailbox.cfの編集

  • 設定ファイル「/etc/postfix/ldap-mailbox.cf」を編集します。
    # vi /etc/postfix/ldap-mailbox.cf
    server_host = 192.168.11.100
    domain = oss-d.net
    search_base = ou=Users,dc=oss-d,dc=net
    scope = one
    query_filter = (uid=%u)
    result_attribute = uid
    result_format = %s/Maildir/

  • 設定の確認を行います。メールデータの保存先が表示されます。
    # postalias -q hoge1@oss-d.net ldap:/etc/postfix/ldap-mailbox.cf
    hoge1/Maildir/

  • postmap コマンドでデータベースを作成します
    # postmap /etc/postfix/ldap-mailbox.cf

SMTP-AUTHの設定(LDAP対応)

SMTP-AUTHの認証にLDAPを利用するよう設定します。

SASLの設定

  • 「/usr/lib/sasl2/smtpd.conf」を下記の通り設定します。
    # vi /usr/lib/sasl2/smtpd.conf
    
    pwcheck_method: saslauthd
    mech_list: login plain 

  • 「/etc/sysconfig/saslauthd」を下記の通り設定します。
    # vi /etc/sysconfig/saslauthd
    SOCKETDIR=/var/run/saslauthd
    MECH=ldap
    FLAGS=

  • SASLがLDAPのユーザ情報を使用するよう「/etc/saslauthd.conf」を設定します
    # vi /etc/saslauthd.conf
    ldap_servers: ldap://192.168.11.100
    ldap_search_base: dc=oss-d,dc=net
    ldap_filter: uid=%u

  • SASLの自動起動設定
    # chkconfig saslauthd on

  • SASLの起動
    # /etc/init.d/saslauthd start

SMTP-TSLの設定

秘密鍵と証明書の作成

秘密鍵「localhost.key」と自己署名証明書「localhost.crt」を作成します。

  • 自己署名証明書は商用サービスなどの第三者がアクセスする環境で利用しないで下さい。
  • 第三者がアクセスする場合は、CAから発行された証明書を利用して下さい。


  • カレントディレクトリを変更します。
    # cd /etc/pki/tls

  • 秘密鍵を生成します。
    # openssl genrsa -des3 2048 -rand /var/log/ > private/localhost.key
    「Enter PEM pass phrase:」と表示されるので、パスフレーズを入力すると暗号化のための秘密鍵(localhost.key)が生成されます。

  • 秘密鍵からパスフレーズを削除します。
    「Enter pass phrase for private/localhost.key:」と表示されるので、先ほどのパスフレーズを入力します。
    # openssl rsa -in private/localhost.key -out private/localhost.key
    Enter pass phrase for private/localhost.key:
    writing RSA key

  • 生成された秘密鍵を使って自己署名証明書を発行します(Common NameはURLでのホスト名を入力)
    # openssl req -new -x509 -key private/localhost.key \
    -out certs/localhost.crt -days 3650
    
    -----
    Country Name (2 letter code) [AU]:JP
    State or Province Name (full name) [Some-State]:
    Locality Name (eg, city) []:
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:
    Organizational Unit Name (eg, section) []:
    Common Name (eg, YOUR name) []:www.oss-d.net
    Email Address []:

起動・自動起動

送信メールサーバーの切り替え

CentOSではデフォルトでsendmailが起動しているため、Postfixに切り替えます。

  • sendmailの停止
    # /etc/rc.d/init.d/sendmail stop
    # chkconfig sendmail off

  • MTAの切り替え 「alternatives」コマンドで2を選択します。
    # alternatives --config mta
    
      選択       コマンド
    -----------------------------------------------
    *+ 1           /usr/sbin/sendmail.sendmail
       2           /usr/sbin/sendmail.postfix
    
    Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2

自動起動の設定

  • chkconfigコマンドで自動起動をONにします
    # chkconfig postfix on

起動

  • dovecotを起動します。
    # /etc/init.d/postfix start

Dovecot(192.168.11.11)

Dovecotのインストール

  • dovecot本体のインストール
    # yum install dovecot

Dovecotの設定

dovecot.confの編集

  • 設定ファイル「/etc/dovecot.conf」を編集します。
    # vi /etc/dovecot.conf
    
    # 利用プロトコル
    protocols = imap imaps pop3 pop3s
    
    # SSL用の証明書
    ssl_cert_file = /etc/pki/tls/certs/localhost.crt
    
    # SSL用の秘密鍵
    ssl_key_file = /etc/pki/tls/private/localhost.key
    
    # メールボックスの場所
    mail_location = maildir:~/Maildir
    
    
    #■LDAP認証の設定
    auth default {
        mechanisms = plain
    
        #pam認証は使用しない
         #passdb pam {
        #}
    
        #userdb passwd {
        #}
    
        userdb ldap {
            args = /etc/dovecot-ldap.conf
        }
    
        userdb static {
            args = uid=1000 gid=1000 home=/var/vmail/%u
        }
    }

dovecot-ldap.confの編集

  • 設定ファイル「/etc/dovecot-ldap.conf」を編集します。
    # vi /etc/dovecot-ldap.conf
    
    hosts = 192.168.11.100
    auth_bind = yes
    base = ou=Users,dc=oss-d,dc=net
    pass_filter = (uid=%u)

  • メール管理用のユーザを作成します。(同時にメールデータ用のディレクトリも作成されます)
    # useradd -u 1000 -d /var/vmail -s /sbin/nologin -m -k /dev/null mailadmin

自動起動の設定

  • chkconfigコマンドで自動起動をONにします
    # chkconfig dovecot on

起動

  • dovecotを起動します。
    # /etc/init.d/dovecot start

dovecot再起動

  • 設定変更を有効にするため再起動します。
    /etc/init.d/dovecot restart

動作確認

SMTPサーバでの動作確認

  • 192.168.11.11でテストメールを送信してバーチャルメールボックスの動作を確認します。
    # mail hoge1@oss-d.net
    Subject: test
    test
    .
    Cc:
  • メールが届いている事を確認します。
    # ls /var/vmail/hoge1/Maildir/new
    1285332325.Vfd00I483c8M961959.serv11
  • メールが届いていない場合はメールログを確認して下さい。
    # vi /var/log/maillog

MUA(Backy!)での動作確認

  • Backy!を下記の通り設定します。

    基本設定タブ
    • POP3Sをチェック
    • SMTPSをチェック
      Backy00.jpg


詳細タブ

  • SMTP認証にチェック
  • SMTP認証の「LOGIN」「PLAIN」にチェック
  • SSL/TLS関連の「証明書を検証しない」にチェック
  • SSL/TLS関連の「クライント証明書を使用」のチェックを外す
    Backy01.jpg
  • メールの送受信を行い問題なければ動作確認は完了です。

第三者中継チェック

  • 第三者中継(ToにもFromにも自ドメイン名が含まれないメールを中継する)はスパムに悪用される ため、専用サイトでチェックを実施します。 専用サイトは「第三者中継 チェック」などで検索すると情報が出てきます。

WEBメールの設定(192.168.11.100)

  • メールの送受信が出来たら下記手順に従いWEBメール(squirrelmail)を設定します。
    squirrelmail
このエントリーをはてなブックマークに追加
Last-modified: 2011-05-12 (木) 03:13:29   最終更新のRSS