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のインストール

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

slapd.confの編集

  • openldapの設定ファイル「/etc/openldap/slapd.conf」を編集します。
    (※変更箇所のみを抜粋しています)
    # vi /etc/openldap/slapd.confinclude         /etc/openldap/schema/postfix.schemasuffix      "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.ldifdn: dc=oss-d,dc=netobjectClass: dcObjectobjectclass: organizationdc: oss-do: oss-d.netdn: cn=Manager,dc=oss-d,dc=netobjectClass: organizationalRolecn: Managerdn: ou=Users,dc=oss-d,dc=netobjectClass: organizationalUnitou: Usersdn: ou=Group,dc=oss-d,dc=netobjectClass: organizationalUnitou: Group
  • ldifファイルを利用してデータを一括登録します。
    # ldapadd -x -D "cn=Manager,dc=oss-d,dc=net" -W -f base.ldif 


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

  • ユーザデータのldifファイルを作成します。
    # vi user.ldifdn: uid=hoge1,ou=Users,dc=oss-d,dc=netobjectClass: posixAccountobjectClass: shadowAccountobjectClass: topobjectClass: accountobjectClass: mailUsergidNumber: 10001uidNumber: 10001uid: hoge1cn: hoge1homeDirectory: /home/hoge1mail: : hoge1userPassword: {SSHA}M8mgOF7ObnKIdK4yHP6G1z1DvWBxf4+Ydn: uid=hoge2,ou=Users,dc=oss-d,dc=netobjectClass: posixAccountobjectClass: shadowAccountobjectClass: topobjectClass: accountobjectClass: mailUsergidNumber: 10002uidNumber: 10002uid: hoge2cn: hoge2homeDirectory: /home/hoge2mail: : hoge2userPassword: {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のインストール

  • 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 = virtualvirtual_mailbox_domains = oss-d.netvirtual_mailbox_base = /var/vmailvirtual_alias_maps = ldap:/etc/postfix/ldap-alias.cfvirtual_mailbox_maps = ldap:/etc/postfix/ldap-mailbox.cfvirtual_uid_maps = static:1000virtual_gid_maps = static:1000local_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, noplaintextsmtpd_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.cfsmtps     inet  n       -       n       -       -       smtpd  -o smtpd_tls_wrappermode=yes  -o smtpd_sasl_auth_enable=yes  -o smtpd_client_restrictions=permit_sasl_authenticated,rejecttlsmgr    unix  -       -       n       1000?   1       tlsmgr
↑

ldap-aliases.cfの編集

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

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

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

ldap-mailbox.cfの編集

  • 設定ファイル「/etc/postfix/ldap-mailbox.cf」を編集します。
    # vi /etc/postfix/ldap-mailbox.cfserver_host = 192.168.11.100domain = oss-d.netsearch_base = ou=Users,dc=oss-d,dc=netscope = onequery_filter = (uid=%u)result_attribute = uidresult_format = %s/Maildir/

  • 設定の確認を行います。メールデータの保存先が表示されます。
    # postalias -q  ldap:/etc/postfix/ldap-mailbox.cfhoge1/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.confpwcheck_method: saslauthdmech_list: login plain 

  • 「/etc/sysconfig/saslauthd」を下記の通り設定します。
    # vi /etc/sysconfig/saslauthdSOCKETDIR=/var/run/saslauthdMECH=ldapFLAGS=

  • SASLがLDAPのユーザ情報を使用するよう「/etc/saslauthd.conf」を設定します
  • 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.keyEnter 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]:JPState 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.netEmail 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.postfixEnter を押して現在の選択 [+] を保持するか、選択番号を入力します:2

↑

自動起動の設定

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

起動

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

↑

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.confhosts = 192.168.11.100auth_bind = yesbase = ou=Users,dc=oss-d,dc=netpass_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 Subject: testtest.Cc:
  • メールが届いている事を確認します。
    # ls /var/vmail/hoge1/Maildir/new1285332325.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